@agoric/zoe 0.26.3-dev-9e124c3.0 → 0.26.3-dev-a2813f6.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":"UEsDBAoAAAAAAAAAAAAVh0c/cicBAHInAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0RmFjZXQvdmF0Um9vdC5qcyIKICB9LAogICJjb21wYXJ0bWVudHMiOiB7CiAgICAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2Jhc2Utem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaGVhcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNlNGYzMDAwMDA4MzBiMGQ0MGE0NWQxZDQ1MTNkZjgxZTE0YjM1MzFlNGIwYjFjMzM1NjdhZDRkNmMxYzIyNTQ0NGI2MjdlYmIyMzg0OWUyMGI4MDczOWQ2MjkwYmE0ZmE1ZTdmODY4MzQ3NGM3ODBkMWRjM2JhNTQwNzA1NjA0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9oZWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9oZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTNmZjA2YzI2NWIzODZlN2EwZDkwZTE3ZGY0MGQ3OTk1NGIxYTExODdlOWQ2NDhlMTg4ODQ3YmFiYzc2ZGEzNWViZGM5MzYxNDFmZWFlM2UxOGUzYWUzMGM3OGJkOTJmN2U4MjI2ZmJjYTE0YWY4ZDNkNzg0ZTliYjYxZGI5NmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDFiY2JkZGE0NzNmN2ZkNDI1ZTQ3YzMzMTgwOTU2ZGYxM2JjY2M0YzVlOGY4ZTg5OWZkNGI5ZjVlMjg4N2E3MWU4OGU3MWRjMDNlMDlkZjE4OTBkYmVjNDgyOTg1ZDI1YWIyYTk5YTI4ZjlhOTlmNDZkMzg1OGNkMjdkYmIzMzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDFkMmE4NWY5YjI4OTA3NzdhODEwY2NlYTc0MmNmMzU4ODZlZTA0NzQ3ZjAyY2Y0ZDYzNjc1NDM1NzI0Y2FkYTAwZDE4ZmFhNTY3MTU2YjZjMzFlOWFjZGY0MDc3ZTc5NTA2MGYyMjcxM2Q1YzdkMDA0YmRmYWVjMTk4MTAzM2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNWU4NzU3YzcxNTA2OTZkY2Y5NDUzYmNmZTZiNDIzODA5NDE0NDQwMzg0Njk3NjM1NTIzODQwMTY1YWQ2NmFiNjkwNjNhYWJkNzZkMjZjZTM3NzIwZjQxYWYxOTdhZjYxNzc4MmFiMjIzM2ZiMWZkMjFjMzQ4Y2UzZTZmNWNjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2Utb25jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1vbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTgzOWRiZjE4NDYxZWJlZTNjYzcxNDY2MzJhNzQ5N2U2MDRjMjBiOWI3NThmYTBhNmY3OTY2YjZjMjU1Yzg4ZjQyNWNiMmYyMzYyMjYzNmQ5ZDlhNjBhMTNhNWZlZmE3NzI5M2RiYjc2ODg0YWY1ZDA5ODAzYTc1N2ZkYjhmMTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2F0Y2gtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2F0Y2gtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1ZWQ3N2M3NGU3M2IzOGYyZDgwZGI2MzAyMmZiODRjNDU1ZDcyOWEyNWIyN2U2Y2Y4ODVjMTM0MDg5M2FlOWMxYjVhZTdlNTZiM2I2YWFmZjQyMDM5OTEwMDE4MTM1ZTJkMjk2MjlmMWJkYTZiNGU3YjBiNDM0ZTgxOGUzZmFjIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2VydHAtdjAuMTYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9lcnRwIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzAyNzUxMTMwNzdhNTNiM2M2NWE4NmJlNzk0NzIxNWNmZWQ5YTBmNjUyMTY2OTVkODVkNTkxN2I2NTRkYmQyYTNhNTAwODA0YmY4YmY5YmNiYTM5NzIzZDhlNmQ3MDRkYzYwN2IzOTVlNGNjNTI4ZjY4NzczMDU0NjUxNGVmNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA1OTNkOTg3ZTBhMGUzZTNlODRlZjAwN2I2MzJlMjkwMzNiMmExMWM4MDU0M2Q1Yjg4M2Q2NjNjMDRiY2Y1MDdiNGUxZDFhZjEyMTY3YTU3ODkzZGVjMzgxNzU0OGY0YzRmMGRiYjczMjBiMWM0MGY4N2ExMzVmNDA1NzNjY2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmNlNmQ4YjM4NDUxM2E1MDUyZDI1YzRkYmI1YjIxZTBkNTc0MmZhYzhhOTQ4OTY4ODY2Zjc3YmI5MjE3Y2EzNzJmOWRiMTMyMjVlOTEyOTAyMGFmZGQ3YmU2OTMxYTNhZWQxNGMyNGE4MTE0YzI1NWNkNzc4YmQ0YWE5NTA5OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmJmNDAwZWNkZmE5YTBhYWI5OWVhZDgzZjRiMmJjMWJlNmJlMGE1ODI4MDc2ZGZmZGVkNWMxZjdhMDkwZDk4MmZjYjI5NWQ0MzU4ZTIzZWNmMDIyYWM0MDMxNDljYTdiMTgyMWZkMDRjNTY3NGMzNDNlMTc3ODI3OGQyNDdmMWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMTAxZjczMDA1YTA1M2Y2Njk4NGE3MDIwNDI2MzVmY2NlMjYxNmI4NmZkM2MxMTAxZGUxMWU5ZTcwNGE1OGEyMjU1NDdjYzFjZDUwNjk3NGMyYzM3MGQ0NmFlYTA1ZjJlMDg5ZTU1MDYzYjI2ZTRlMjhmZjg0OGFiNTEwMWQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDBlZDBmZjdmMTBiYTU0N2E2MTQxMTI0ZGQyOWZhNzAxM2NkZmQ4ODQ2NTJkOGQzNWM0ZGY4OTQ5OTc2YjM2OWMzMmJjOWQwZmJmODc3NWRmM2E1YTU2ZTBhYzU2NWIyOTQ5ODVkOWU5ZGJiMmE4ODA1YzU0NTVlMGU5ZTQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2NkNDAxZDUyZjc0YWQ1NTQ2YzY5YmVmNzE3OTU3N2ZmYzc4NGE5NzBhNzA0MmE2ZWQ1YmEwMDczNmUzMjgxNWExYzA0OTIzZDE2ZTI0ZWQ0NzgzYzExYzg2ZWYxMzE1NTA5MzdhZDdiNTExNDg5NDkwMDFmMDYzMmEwYjI0OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNlMGMyODc0MmEyNTE1OTBkNzE0ZWUzMjBiYzc4Y2FmMjI1NzVhNGZjMmI3MGQ3NjU3YWNmMDM2OTViOTUxZDJjNWEyYmE1YWZhNWQ4NjgyNGVmZmQ2ZTU1MzA3ZGJlN2NjZDlkOTQzZGY4MDA3Y2Q5ZDYxZDI1OTNlM2RhMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmYwMGUxYjdhODk3M2NlM2EzM2MzNTA1YTc5NTlmMjg1OTZhYjRiZmM1ODAyOTk5OWRhZDRjYzZiOWRhYmQyMjg4YmY2NzRjOWY5NTEwNTYwZWRmNzVkNjY2NjcyOTQzZWU0YjMyNDI4MWVjYzc2ZDNjZTcwMmU4YjQ4ZmY4M2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM2ZjY3NDVlNzJkMzg0YjJmOTUyMjlmMmZmOTliMWFjM2UxNWQ1ODg1NzA1MTU0MTRlNjc5YzA0YTRkYmNlMDNiZWVhOGJkOWQ2NjhhNzA3MTlhYWRjZmI4ZTJjY2RiMGM5OGZkNjM1ZGU2NzRkMmVmNDc2ZGJlOTYyOTZhZWExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NmRiZTI2YjJkZjdlMjNlOTQ2NDA3MGU2Y2ZhNjYxODBlYzRmZDhjNmFjMjlkMGM2ZWJhZGRlMGIwMWEwNjE4Nzc2NDAzYjAyNzJiYWVhNzJkNDNjN2NiMTVlNTkyYjMxOGI0Njc2MTkxYjk3YThmYmVlOTEwZGYxMjc4YjU0YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNDIyMDQwNzhmYjY4NDEzMTQwYzhmZjQ5ZTAyODAxMWQyMTBiMDhkNmFlZDc4NDZlYmVjOGU2ODlkYTE1YTdmZGFmM2FjMzk0ZDY2NDcwOWE4YjRlMTAyZjA5NDNmNDAyMWJlZWFiMDZlZjgwZmY0MDNhYjZkOGI2MDQ0YjQ0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTU0NjZkNDg1ZGVmMTNlNjEzNDU5YzcxYmI5MGFiODZjMGFjNTJjN2NmYTkyMGI3ZTRjMDBiOTk0YjEzNzc1ZjNiZTA3MjA0YzgxM2Q4ZWQyYmNmYzFlMjEyNzgyMDY1YmFkZDE1ODk4NmYxYTI4ZDE0ODEzZmExMDFhZmI4MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlkYmViY2JiN2VkOTkxZjk4YWE4NDgyMjA3NTlmMjU0MTI1YTY4OGEwMzgxZmRmNDYwM2FhOTQ5NzQ0ZThmYmNmZTNmNTk0Y2YzNjU5NGM5Yjg3MGFlYzRlMzkzYWU1MjUyNzNkYTY3OTZlNzkzNWUxYjdmMWZmYTdhOWMyNTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWxsYmFjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FsbGJhY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2QwOGNjNjIzOGFmODczNmE3OGEzYTI2YzQ2OWIyYmYzMGZlNDE4ODA0YzU3ZTg5MGNlNmYzZWJkNDIzMWRmMjQ3ZGM4YjAwNWU3ZGRkMjM3ZWFhOGNiNWM1ODkxZDA5NWU3ODI0OWQzZjZjM2NlNWNiYmJhMTQzZjViYjM0ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25maWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbmZpZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk1YmI4NjhjMjQ1ZTUzN2RjNTIxZmI2Mjc4MGYwNGE5NjkzMmFkNWRjOGNjYTNmNDIyMTkzM2MyZmM2YmFlZmUzOWY2NTM0ZTc5NTFlODU4MzVmNTY2NTcxM2I5MzZmZDM2ZTA0YjFmNmU4ZTA4MjJkZDM1ZGE2YWU2YmU3MGZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlYnVnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWJ1Zy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyMmJhZTVjMzZkODM5MzFiM2RmN2RmZmQ5Y2NiMGEzM2IxZjIxYTk0NWFhOGI1ZWM3YzdmZGIyMjg4MTNkMGY4ODU4MmYyZTI5ZmFhOTY1NzEwMTk4MDE4ZDVlOWFmYTljMjkzMWUzYjIyYzcxNDE2YWQ0MTY4MzIwOTdhN2IwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjMzZDk1ZmY5M2JlN2FjNGJiN2RlZjFkNzNlMTA5YWY1OTE5ZjRkMmFlYjVhZjA4ZmIwNGQ0MGQ2Yzg3N2RlODBhMjdkNWJiMWE3MjJjZDcxMjk2ZTQ3ZDI2OWJjYWFiODA1NGJlZWNkZmFmMWZjNzBmNTRmMTVlYWFkODVlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmZmMTE1ZjJjMDJmMGI1NjM2MDRlZDYxMTdlNzg3YzRlODdjMjZhYjYwYmNiMTMzMWI2ODcwZDNhNTA3ZDRiOWQwNzFhNmMyMzcwOThkYTlkOGJmNTQ5OTU1YTYwMDM0ZmJkOGIwYjM2ZTEyMDg0ZDk3ZTcyZGU3YTBhODY5NDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanMtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2pzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWM5OTAzMjM0ZDM4YjRkYzQ4M2NmZTRmYWI4MDUzMDJmZTI1NDhlMmZmOGM0ZGQ4OGY2NzI1NzJmZWRiNWQwY2M1NTg5N2YyYzMwMjYxZTY3YjJiZDg5MzQxYzEzYzE4YWQ1YTQxMjlmMDEwNWYxNTEzY2FkZDcxYzczMmIxOTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg3MzFmMWMzMDM2NjAyYWQ5MGQ1OTliMzVhNjA2ZmZiMTI4NjY4YjBmY2YyMDAzYzUzYThiNDgwNDE0YWRkNTFmNGU3YzE2MTFiNjhkM2M4M2Y1MTk1MTE5ZGY1YjQ2ZDVmMjlmNDQxMmI3Y2Q3YjY1ZjFmYzU1MmUwZDBhYzgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ldGhvZC10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWV0aG9kLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODA0NDU2OWRjNzRhNjJlNDIwZGM4ZTM5MTdiNWZhZjFmN2FhMGRlZGVhMDYxNzM0OTM1MmJiYWE3ZTllMDVkZmE5MGY2ZmVkMDA1ODk2NmIxMjExMjFlZGE4MzVjNDE0MDVhYzE2MzA2ZGJmYjA2MjkyNTAzMjE5NDA5YWYwMDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2VzLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zZXMtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZDJmNjg3MjczZWM1OTE2NTc5MDYyMDU2YzY1YTM4NmYwYzk5Y2RjYTdhNTljYTIxMDgyYTcwMzVhNjQzMDBjY2ZjMDNhMTIzMzYyMmI1YTFhMzFmMzcxOGMwYThlNWFkNjA0YmM2MWFlODI1MTdjNzI5NzQ2YTRhMmNiYmMxNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjcxZTUyMDUwZmQ4OWZlNzgxNWVmZWM2MjhlYWFlYjIwMGI3ZjdjZGRhODRlZTdjZGJjNmYyMDNjMDNlZGVmMDYxNzFiZjJlYzY3YzIwODEyZjgzMjFhNGUyNTljZDk3ZWQ4NTM3N2NmNTY0NWU3MzExNDFjOWMyM2Y3ZWViNTdlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NmZmN2NkNmI2ZGRhZmY1NzlhNWE2MWY4MjMxYzg0NWZlMzk0MDliMmQ4NGZmZjQ3MWZiYjdjNmZjMjE5ZWFjODhlYTJlNjViZGQ4Mjg5ZGQxZDhhZDg5YTg3Nzc5YjkyYWNiYmU2NzY1OTEyYjdlYzdmMjY5YzZiMzAyN2E2YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXBncmFkZS1hcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMGVjMmM0ZDBlNTY5ZTMzZmY4N2MzZjM1NDU3YmNkNDY3NjY4YmNkZDlkMmIzZDc1MDk1Yjg3YjlhZWIzYjEzMWM5ZDlkODM4Yzg5ZTgzNDczNTZjMDczZTBjZGFlOTMwNDA0NGFjOTU2NDc5NmRjOTQ3MjY0ZTE3NmQ0YjRiNCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWI5YzU0NmZjMWIzMmRkN2UxM2NmMzg4YjE1ZjBhYmQ4OTg5NTllYmUxNzhhNzcxZGM3OTI1ZWUxZDNhZmYwN2JkODZkYWRjMDAyNTA2ZDk3YmIyYjk5MDVkMjFjM2E2NDk2M2Q4ZGRkNGM5Mzg4ZWE0ODM2ZTg5ZTg5NmI4YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMDExMDBhZDFlYzBjYzE1NDU1Y2ZmYmFhNjA0MDMwM2IxYzMxZmNkODE4NGI5NDRmYjljN2NhZTg2MjE2YzIwMDk4MGNiZjZlNjg2YjRiOWRjYjQ1MzRiZDgwNDIwNWI3MmVkOTdmNzlmYTYxMDVhN2Y4MDljNmZkZmI2ZWU2OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZTBjNjk4MjE2OWMxOTI4OTQwYWY2Njk2MWRmOWQ3N2RmYTE3YzhlOTI1OGM3YzdkYjFjNWIyOTdlNTcxMzRiOGI1NDdlMzQzZGJlNmQ1NTViNjA3ZjFjODczYmRlMmJmZWYyNTA3MjU1MzgzNzQ2YTk2ZjhhZTZhNWY3MjM2NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJsaXNoLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVibGlzaC1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNDJiYzA0NjE0ZDdlYjkyMzE5OTE4MjBiZGRhZDk4NjFjNGRhNGVmY2FlODc0ZmYwZTE1NjYwZjA3ZjVhNzVlMTU0MWMyNzE5YzQxNGIwMjQ3YjRkMGJlMmE1OWU0Njg3YWVjMjQxZjM3NzgxM2VlOWQ1ZTU4Y2I4MGQ1YjQwNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZWQtbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlZC1ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5YzhhMDdkNzU5N2E3NTVmMTMyM2IxN2EzNTdlMmZlYzhmNGZkY2QxNzc1M2ViN2I1ZDI0NzQ4OGQ0ODE3NzBiZDc5NTg4N2NkNzc5YzFkYjE3ZTI4NzA4Y2VhZGU4ZTcyNDg3YjMwNWNhNjNmYTg1Y2Y0NzZkZjA0OWZjN2M0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlc3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUxZTVmYTgxZjU5YWYyYjNjZDEzY2FkNmM1N2YyNmM2MjE1MTU4ZDcwNDM4NDc1NDNmMjAyZTBkNmMzY2Y0YmY3MmRkM2RlY2NjM2IzMzNjOWJkYzM1ZjRhYTk4Mzk0YWE5ZmQ4NTgwYmM5N2Q5NDBjMjZiYTQ2N2VhMmZmZGU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDRjYjhiZTZmY2I4YTAzMzFiZjI5ZDJhOTk0ZDgyYmNmNzVkZjA4NGNkOTJkZjczNjBjZWQ0ZDg3NTNhZGUyODZjNjEzNmE3ZmQyNDNlOGYwNWVkNmRjOWFmYjEwZmNhNzliYzk5ZTUyMTJkMDk4NmFlZGI0MTZhYmUxODg5ZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI5NjYzMWU1Nzc0ZTc1NDU5ZjU2MTgwYjQyOTEzMWYzMjBmNjFiYjc4NTQ0MjM3N2FhNzgwZDQ3ODUwZGQ1Yjc0NzBhOTQ4MGYwMzk2Mjk0NDIxNzA3MzI1Yjk5MzViMTM1MWM2NzcyZGUzMWY5NGNhZjA5ZTQ4YjFjMmY1MTBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RvcGljLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90b3BpYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhhNWE0NmQ3NDViYzFmNWMxMDE2YWY2Mjk1NGM4MzQ5MGQxNTZmNWRmZjcxNTk3NTVmM2MyNTk3ZjhiYWNjNWMyMmE1MGY3YmNjY2ViZWU4NjJiZDg3ZDQ0ODRjMGI2MDY3NTM0NDc0MjkyNzM0NTY5NDgzMTk0NjExOGYxYmJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3N0b3JlLXYwLjkuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9zdG9yZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWE4YTFlYjNjNWI3MTNmYTkwZDk2NTFiNDY3NzNhNDQwMWNkNTE5MzYxZWJkMGRhNDZlMjAxMWZhYTA3NDI4YTI0ZmJlYjI5NjRhYzgzMmI0MmQ4MmNkMmQ5NGRlZWI4MjFmNTc1Y2ExM2ZhMWFlZDVjZDNmMGQwMTU3MzZjZTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4ODQ4NzMyYTI0OGJmM2Q4MjQxZDE5ZWFiOTQwNjZmZDI5MTEwYzVjYjM3YmJmOGE1YzE1YjZlNDRjN2NkOTEwMjVmMTNjOGJjMmRlOGE1NjYxZjhmMjlmMzRiMjE3YzZmMmJhNWIzYzE0OWU2ZGFiOGE0MWNmYWQ5NmE0YThkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRiMGQzM2MxZDVkMWNjZTc4MjZiMzc5NmZmZmNmYjBmOGU5OWM1MzgwMzNhODNjM2I0ODc3ZTA4YmQ5Nzk2YzJhNGMxZmZmYWRjMzI4Y2EwNGVkZTExNjRkNDZjYjI1ZDliYzcwODQ4ZWFkNzVhMjk4MmZjNWIzNDg2ZWI1NTQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDhiODZiMWMyYWM1ZGI2MWY1NjBiYzE1ZmYwNWZjYzUzNTViOTk5ZGYxMjhkMWM4MzQzODM5MzViYmY2ODM3OGVlYmEzZDE3YWUyZDM4ZjU2MjAxNDEzNzgxNzg1ODFlNzhjOGIxNGIwZGNiMzdkMDNiZWY3MTE4NGFlMzRhYjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhNjMxMjBjYzE3NmUyMGE0M2NmOWNkOTg1OWZmMmQyNGJhZTdkZDkyMWMxZTBlODJkYTBkYThlMjVhOTk4NjE2NjA0MGIwYmYyZjYwNWZiYTEzNmU4Zjc3MmM1MmUwMzlhZjgyZTU4YTIyODJjMWNmNmY3ZjM3M2RjMzUyNmE5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTBjZmViMDFlOGYyOWExZWNlYWEyNDEzZDQ3NmRlMzA5NTEzODliNDk3YjM0MmZkNjRjNjJjNWU5Zjc2MGUyOTFmYjY2ZDk3ZWEzYzJhZWFlMjlhNzZkNDA0NDE1MWFkODU0MTU5ODM4MjdmMWUxODllNWI0NmI1ODY1M2E4ODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjMTg4NjVkZWU0YjlmMWUxMDU0YWNkNmQxZTRlZmY2ZGMwMGM3N2QxZDBlNTFmZWI3ZjAzM2RmZDQzM2E0MDY2YzA0NjkxNjUwMWJkYjEyZTQ1YjEwY2IwNDIzNTJkYmFlOWQwZWE3ZTU1ZjliMmFjZmJmZjI1MGI1MzNmMjFjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjU4OWE2ODFjMjYzNjFmMWE1MzZiMzMzYWY2NDU0ODcwOTcwM2EyYzgwN2EyNTY2MjdhODhjOTU0YTMzNGYwMzg3YmMzNGIyMWExM2Y2NGI0ZWYwYzUwZjAyN2UwYzdkNzM5MzMzN2MwNTdjMDA3OWZmM2FmNjUxMWYxMWNmMGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdGltZS12MC4zLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvdGltZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdGltZS12MC4zLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNmNiMmQyMjEwZjIyZjNhOTQxZTNmY2IzOWZjYzljZmZjY2ExYWE5MDg0ZDI1OWEzNzVjODU1MGFkMTdjYzQ2YWE5YjBmOTQ5YTEwMDAwMTIyNmY4MGI1ZmNlOWRlNTEyMWZiMjQyNzE1MzNjZjg4YTU2MGNkNTAwNDhiMjEyOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90aW1lTWF0aC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGltZU1hdGguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NDIwYjA3MTUzOGM5ZTM1MDQ1YTc4MzI1OGQ4MTQ4N2JkNDJiMGUyNDBhMDA3ZGZlNjVhNDg1MTY2ZWQwZTY0NmI0M2IzYTAxZWMxNWY4YTEzNTRiYTZmZWI1NjdmNmMzNWU5ZmNjOTNmNmMzY2Y5NTY2ZTMwMTgwMjdjNjRlNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5ODViNmI1ODAyNDcyOGFkOWJiYTI0OGJiMDdhYmQyZmY1MzY0YmI3ZTI4NDliMzRkOWE2YWRiYzAwNWJlMDk2M2I1ZDdkYjBmMjJmYmMxMzEzYjUyYjE3YjQxNDcxMThmMGE1ZmU4YTQ5YzJlZmY3ODlhYjk2ZjMxYWE2YTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdC1kYXRhIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZWZlMGU1ZWZmOWRkMjAyMDM2OTU0MTg5MzkwOWIyNWUwNWYwMjViNTJjMjU3ZGI4OTZjZDkwYjNhNDk5MzVlYTYzZjZkNjUyOWE1MTIxZjFjNzdiOGMwMGVkYjBhMTkwMmIwNWI3ZTk4YTk2NTFjN2NmZmYwMDVmOWUyNTczNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmU1ZGRjODI0NDIxOWM2OWFlNTdlOWUxMjFlMjQ2ZTJkMDVkYzM2ODhkOGRkM2RiOWViMmJkZTZmYWMwM2M3NDE5NDhlMWJkNTMwYmYxNGNjNjM5NjFiNzhjYzRjMjUwOWQyYWVkZmZkNzcwYTkwNzU4ODg2MzY4MTIzNTE1OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NDhkMWQ3OTI4Mjc0ZjFkNmJmOWQ5MzBjODI0MmFiZjNiZDYwNmIwNjEzZjUyMWQ3ZGY4MzYwZTkxZTYwYWM1ZmYyNzJlMDQwMzllYjRkZjFjYWY4NmY2Yjk3M2M4NjJlZDQ2OWNmMjgwOGJiMzBlMGY4OTNkN2UxMTJlNWZjOSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b2UtdjAuMjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b2UiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jbGVhblByb3Bvc2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jbGVhblByb3Bvc2FsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTZiNzVhOWEzN2M1ZTEwNDgxZDA2OTI2MGE1Njc1NzNlNmZhMDUyZmI5ZmFmMzNjOGRiYTU4ODBlNzc5OTU4MmEyMTkyM2VlYWYxYzBmMzgzZTVmNzE1ZjQ5NDYwNmQ0M2U5NTlhMmZkYWNjZWNhYzQxNzVhZjkwMzE5ZmU3NDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9hbGxvY2F0aW9uTWF0aC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9hbGxvY2F0aW9uTWF0aC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIzMWQ2ZGVkYTMxYzM3Mjg0MDFmMTVmNDdkY2U3ZWY2NjU1ZjNmNWU5NjBkMmMyMjM0N2JhYTgyNGJjMzcxMGIzMTBiNDZmMDgyZDIyYTE3OWRlYzgxN2ZhZjA2NWMxMTZhNzk1NzU4NWY5ZDVkMTZjNDgzZmM0NDI2MmU4ZGQxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvZXZhbENvbnRyYWN0Q29kZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9ldmFsQ29udHJhY3RDb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWM5MDFmMjg3M2YzYjhhN2RmYjE3YzQ5YzA2ZTNjNzY2MWNiYTEwNmRmOGMxN2YyMTE1MjM1OTk5ZWUxM2ZjMjExNDI5MThhYmQ1ODBiYzg1OWY0Zjg1NzM0MTk4MWVlNzU4NWI2ZDY4OGFmZGI2YWZhYTZjMWIyYzVlNDNiMTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9leGl0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L2V4aXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNGZmNjMxYjUxOWYxN2I1MGU3NTk1ODgxMWU5NWRlYTRiNDM4Zjk5ZWI3ZmNlYjBhNGI1OWRiODJkNWI1ZTg2ODMxYTY0OGM1YmZkZmQ4YjJjNTE1ZjQwOTAxNjkxNWZjMTU3Njk0YTA0MGJkNTdjNGFjNzA0MDJlMzc2MTJiNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L2ludGVybmFsLXR5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjI3MDdjNDAwODNiYzhhZGYwODM1MTEwMDA0OTczMTM0YmU5Y2I4MGM0ZDYxYmJmZjk3ODAyOTQxMDVmMWNjYTVmNWU3OGZkYjc1ODI2MDI0MzU0YWZiZTRmOWEyYjA2NWRmZjRiMGJiNDNjY2MxZWVjZWFhNzIwY2U2NDJkM2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9vZmZlckhhbmRsZXJTdG9yYWdlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L29mZmVySGFuZGxlclN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NjJhMTVlOTRmMjdkODYxZmQyNzQyOGJjOGNmZGQyZmM2ZmRhNGM4MTdiMTFhZDQwZmU1NWYyNWVkNDA0NzVjYTM2M2M1ZDAwMzZiMTBjMjBiZDkzYTA1MGJjMzEwMTA1MjYwZDg1YzFmOGQyY2ZkNTUzN2RkZDAzNTMzZWM2MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzdjOTAwNWFmYjQ5NWVhYzc1YWE2MWY2NWI4ZTNmYzViOTU1MTFlMTExMjI2ZGRkYmEwN2NkNDliMzQyZWFjYTQzYWY2NGY2ZGZjMmE3ZjA5MWQ4YmQwOTBmYzM2MzAxZTQ4NmFhYWExODU3OTBmNjRhMTE3NDY5NTI1YzM3MTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9yZWFsbG9jYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L3JlYWxsb2NhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDIxYTdkNzBmY2QxZDhlZWZkNWUwZmZkMzdjMTIzZDZkYmM2NWMyOTA4MWJlNjI3Y2VjZTY2MDJlYjE2NTE3ZjAwM2YyNDgzMTczOGExYzUzYTE4Zjk4YjI3YzVmMDIzMmM1ZDMwNTA1MGJiMzMyMWM1NTI0MjhmMTFmOGEzNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L3JpZ2h0c0NvbnNlcnZhdGlvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9yaWdodHNDb25zZXJ2YXRpb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YjQ4MzA5MjIwNmI0ZmQ4ZDY2MGE4YTAyZWNhYzhmMTZkZDBkNTg3ZDgzZDMyZWIxYjQxYTdhOTg5OWU3NWQ3Mjc5NzZiMTE5OTQ1OTcyMjNmNzQ0YzI1NWNhZTA4ZjMwODllMWQ3OGIzMmViMjQ0OTUxMWMyYTQ1NWRlZDFiNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEzYjk3YTg4ZDcwMTZkMjRmNDE5NjZlOGJkNTU0ZWRmNmVkNWEwODMzMzYwM2ZiMTRkNGJkZDY0YmE2YmU2YzcxYTE1YzFiZGM1MmJkYjQzNzAyNWE1M2ExY2M0YmExMGZlNzJiMmVmZGM1YTdlODBmMDA3MTViY2M3OTc4ODRmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvdHlwZXMtYW1iaWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC90eXBlcy1hbWJpZW50LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGQzN2ExZWI4OGZhYTM1MmM5MTg3ZTNkODNjMTQ3ZTE5NDE2MWQzMzI0MDIzM2Y5MjYxYTViNWEwMDFjYzIzNTkzOWNhOTdhZjU0ZjI3Nzg4OTMyOGJmMWIxNGQ2MjliOThmY2VjZTMyY2U2NTg0NmQ3NDIxNDZmODQ0NjQ3ZjUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC92YXRSb290LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L3ZhdFJvb3QuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiODNjYTFlMDE5NTgwNGE2YjYxMjA2OTQ2ZjA5MzcwZDE4NTA3M2IwNzdjNjZkOWI1YjI1NDQyZjVlYmU4MjlhNzU1YWZkZjY5MGFhN2Q4ODk5MmU1NTExMGU0OTY3ZGEyNzZlMWY3ZGNmY2YwYmYxZDMyYmJkOGNmYWViNTZlZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L3pjZk1pbnQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvemNmTWludC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImZhZTQ1ZTA2MWYwMWNkM2M2NGM3NTI3NzVkZWM2OWFkNTg2MGMyZDljNjNjODRjMGE3NWU1MmZkY2YyOTU2N2YxOWJkNzRmNmRhMDNlNjBkZGVkNjBhNjZjZGI1MGJmOTYwYjkxNjE2MmZmYzAyNzgzNzk2N2NlZjU2YzlkYWQxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvemNmU2VhdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC96Y2ZTZWF0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmM2NGUyMTY2OGQ3N2NlNjJjY2VjNzg4MmI5ZjQ1NTA1YTA5YzJjY2MwYzUwOTU0MmFjMmM5NDgyYzUyNGVlZWI3ODdmZTMxYWMyZmNjZWVlODQ3YWQ2ZTQzN2ZmMmE2ZmIwZjRmMzk3MjFkOTdhNTQwNTQzNjlkYTAwYjE4ZWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC96Y2ZaeWdvdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvemNmWnlnb3RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTRiZGMwZDMzZDA0ZGZlZjI1YmVjMjNlOWJjMmM0ZWZkYmEzZGE4MWMzM2FhYmE4M2Y2NGNkZmYyMmQwNTZmZTdiMjQyYjcxMzk1OGM0ZTVlZDkyODRkMDc1YmM4ZjA3MjIxOGU1MWEwNGFiMGQwMjcxZWJmNTJkOTM1ODBiM2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvYXRvbWljVHJhbnNmZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MjYwNDIxODNlZWFkNTgxNDdiZWVkZDk5ZGEyZDcwMjdiZmI0YjNiOTZkN2M4YWQ5MTEzY2ExOGUzNDlkZWJkMDZkMzkyYTdlNTFhOTgzZTQxNDgyNGExZmM4YWZkNGFmYmMxZTg5YzlmYTgzNWY2Y2I5ZTQ2MDlhM2RmYzQzMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9oYW5kbGVXYXJuaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9oYW5kbGVXYXJuaW5nLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDIzM2M3ZGYyNWU5ODRiOTljMDVjNGViODg2YmI0ZDQ2MGRmYjEzOWIyNjc3YWYwNDA3MWJmZWVmZDEwYTBmM2QzOTE5ZTkwZTkxMzcxNzk0YTgxMWI4Y2RkYTZlMmVhZGVlNzJjODJlNmJmY2MyOTI0NzViNDA4OTdkODA3ZTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5zdGFuY2VSZWNvcmRTdG9yYWdlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGE2YTA4ZTE2ZWQ1NmY2ZjE5ZmUxZjk3MTQ0OGFhM2JhY2U2ZDQ5YjYyM2I0YTAwMTdhM2ZkNGUzOGE5OTNiM2ZiNjJkMzFiNWFkNWMyYmIwNGM1YTRkMTQ5MGZmNDZlMmJlMDQyOGFjZjcyZDMzMTFiMWY0NzllYjY0MmI1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbnRlcm5hbC10eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW50ZXJuYWwtdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjOTc4ZmQwYTk5MGNjMjdmMWQ3NThhZWE0NGVkMTZkMmQxODYwZjNhYWY1MDA4YTk0NWZiZGRjYTk5MmQ0YzIwMjUwYjlmMGNjZmU5M2NkZmJlYzVkMWUxYTUyZjhjOGJhZmY1MTA3ZjYzYjNmODUwNzYxMjRkYWZkOThhMDJjYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlclJlY29yZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4NzA2MDljNzk5MzIyOWU5MTlhZmJlZmFhM2Y4MWZlZDdhYTRlODlhMTU1ODk0MGUwMmNjZmE4Njg2ZjhkY2Q4ZjAyNTk4ODA4ZDFhYjExNThhZTg4YWMzZGMwNWUwZGJjY2VjNjBmNWFhODgxMmUwNjIyNGJiNWViYTk0MWYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzc3VlclN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlclN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjYTVmNGRhYzg1MmZmNjIzZmRjZWYzZmQ3ZjQxMDlhZTJlZGVhNWFjYWQ0YzVmNGM5ZjExZmM1OGIwZTEyMjJkM2I3ZjU2MGFmODM0ZTcyZTU0ZTQ1ZTUyZjgxZmM2MDdiOTVkNWFkY2QzNGQwNGRmYjc2YTgxODY1ZGRjMGYyMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlSGFuZGxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlSGFuZGxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODNkOTUyNGE1M2I3NzI3ODJkZjVkNDJkZTdmNWNlNTkwMzk5OTRhZGNkMjA5YzhlYTRkNGQ5ZmRlYzgyZmUyMDZmZWYyMTBkZDQxMzUwMTRjMjJkYmZiNGM3YzE2OWI1YzJhZjIzMWEzMDViZDg3OGZiN2MzNjVkMmUwOGE3Y2IiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJhOTNhYTcxNWYxNDhlOWQ1M2I4NGQ4MWI4NmQyYzU5NGVlN2E5N2NiNWU4ODY3YzYwMzgzY2IxMmI3NTdjNWI0YTY2NDllNDMzN2EwMTQ0YTljYzYzNDNkNDRiNjQ0YWU2Y2RiMTE5ZDgxYjE2OTRkOTZhZTkwODI4NWZmYTU0IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3pvbmUtdjAuMi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3pvbmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImR1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNGRmMjY0NjRiMGVkMWJmZDFlYzMwMjM1MjNhMzE4M2I3OWJjOWUwMzc2MDJkNmMxOTIyNmRiNzlmMmQ4OWNjMjkwYjE0YTVmNWI3NTc0M2ZmOWE4ZWExNjI0NTQwNjk3YzcwODU1ZGI3MDhmYTdhYjg0OTQxYmRkMzUzZWZjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmFiMWE2OGZhNTkyYWU1OGUyZTZmNDg4ZTg4YzAxMWE1MmVjMjBlMGIxYTljOGE0N2U3MDdjMzcyMDJmNDU5MWY0MWI3OTJhYzc0OWRhZGMzNjk0ODcxNTU0YjhlNGVlYTFmNWUyYjU5OTViZWJmNGI0ZjY1OTBhOGU3ZWJiYjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Jhc2U2NC12MS4wLjkiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Jhc2U2NCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9iYXNlNjQtdjEuMC45IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Jhc2U2NC12MS4wLjkiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9hdG9iLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImF0b2IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjYzYzZTBjMTU5ZmU4YmJmZGZjYjU1ZThjYjY5MmUzNjliZmY4NThhNjk5NTQyN2U3MGNmN2NkMjU4YWI2MWZmNDMzMGNkN2Q2OWZlMmE4Njc4ODJlODA1MzQzNWMzYzNmMjAyMzg1MDQ0NTgyMTljYWM3NTg5NTYwYThhNDlhYSIKICAgICAgICB9LAogICAgICAgICIuL2J0b2EuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYnRvYS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5ZmM2OTI3MTNhMTUxMTQ1MGRiNjUxYTIzYmFjMGIzMTdiZTExN2I2MmY3NTI2YzdiNzQ3MjQ3ZWRkNWVmOWJmYjRhZjIzYjQzMGU2ZTJjMmQxMmRhNTNlMWFmOTZhNTBhMzE4ZmZjY2Y3MWQwNjAxOTQ4M2UwNDg5NzZkMTMwIgogICAgICAgIH0sCiAgICAgICAgIi4vZGVjb2RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImRlY29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU3NGI4ZjY1ZDJhMDYxNTQ0ODA0YmIxNzk4OGYxMTY1YmFjMWRhNzlhMWVhY2YyNDg3NjAyNDViMGMwOGM2ZDU5ODA2MDNkZDlmMzk4Njc1ODRhZjI4M2I3MDlkZTY1NTYzZmYyM2VmMDQyMGExNDdkYmE2Nzc2YTM4NWViNWViIgogICAgICAgIH0sCiAgICAgICAgIi4vZW5jb2RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImVuY29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhiNmU0NWJjZGQ0MTQxNWJhNWZmYzYyYzI5NjY1ODczNjdiNTI1ZjBhZmU5MmQ0OGFhNDZkMmMyNTE1ZDVlZDIyMGE3NGE3OGQ4MGIxYjk3MDk0ZjYyY2UxMTQ5ODRhNTAzMmNlMDA3NTUzZDExMjllNTlmMjNkZTE4MTRmOWZiIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ZDRmZjdmM2IzMDgxMTdhYjU5OTY0MjRkMzkxZjNlNzllNGUxZjY1ZTMwNTYwMzZiMzM2MzRlOWY3MWZlZWVlNGE5Y2M4ZTlkNTc0YzRjZGQyMDkyY2E5OTZjNmI5ZjI3MTZmM2E1NDJjYzVkNjM4ODc3ZTM1NDU4Y2VlNTlkMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21tb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbW1vbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM4YjIwYTZkMTFhNThhZjQ4MmQ3MDU2NTk4MDZlNTIzZjMxOTFhOTBlMjMyNGI2ZmI3YTcyMjFhMzllZWE0ZjJjZDM4MDA0NDM3YWIwNDkzOTkxZGM4YTY4MzdjMTkyMWMwYWFjZmJkOGFhYWY0MDJmMTg3YzFlN2RmOTYzNWM5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlY29kZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVjb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjkwNGU3NTA5NTMyYmM2YzUxODBhNTY1NjlmNjllMzBhODhiMThmYWM4MmQ3N2QyYjE1Mzg1NDE3YmQzMGIxZjAxMDgxNWE3YTUyM2EzNGE0NTNkNDIxNTAzM2VlZGMyZDk5YjY0NzRhN2MzMmFkZmQ0NDY1ZGZmM2RiYTkxMmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhZGQxYjJmNDUzMWM0NzY2YWQwYzYxOTg5MDExNTcwMWZhMDRjODg3NDM4NmI5ZGMzYjVlZjg1YmZkM2EzYTIyNWNjMzNjYmUzZTdjM2FjZTMyODQ1ZGM0NDY3MGVkYWIwNzg5NWIzNjI0ZGFjYTM0NDJiMDhlMjM1MDg5Yzk2ZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vY29tbW9uLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vY29tbW9uIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmJhNDdhODlkYmRlYWU0ZDBmY2I3Yzk0NGIyM2FlMTg5ZDU1MGJiMzZkNmFmNDZkMDM3YTA0NGY5NzgwMmFiZWViZjk0MzhkY2M5MTE0YTRmNmQxMjY5OGIwMmRkYTI4YzhjYzQxNzNkMDZhODZmMTZjMTc0OTE3N2RiODc1NGEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTQwZmQwYzdiMjlkMmY0NjE3MTUxZTUwM2Y3MjBmZDU1NGI2NDFmMTgyYzFiM2NkNWRhNGY0ZTE3MTNlZjUyMTJiNTc2NThjZThjZjUzNmVhMDg0YjY0ZGExOTg5YTlkZmRhNTViMjQzOGIyYjZhMzA1MmFlYzFjMzM4ZWJmZCIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwMDZhM2U0MjEyZDgxNzM3OWI0ZjE3MDIwNzljYWQyODQzNWQ0OTBkOGM1YWIzYmRhMDYwYzE1N2QxOGNhYzAxYzFlMzE0NWY5NDdjYzRjMjQzNjMwOWQwODk1OTAxMTlmOWJkNWE1ZDQyMTE3MjAwYmM4OTc0ZDhiMGYyZDM3IgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjYxMzYzMWZjNGZhZjhiYWE2NzRiYjQ4Mjg4ZTZhNDZiN2RhYWUyZmRlNzg3YzVmMWEwNTFmOTZkMTFmZDg5YWJkMjVjZDZlODkwMDU1MDEyMWY1NmZlMWY1MTBkMzJmYzllNDQ3MzhjOGZmNzgxY2JhNjdiYmQxYWNlNjUxYjA4IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5OGM2MjYxNmI0Y2RiM2ZjODFlOTcxMjkwOGEzN2RkYjU3YmVmNmIxZDU4MjNlMDRjZjI4MWNhOTVlODYwNjA1MTAyM2U1NDVkZDZiZGRjMjk2ZmVkZWJlNGU2NjU5NGU5OTg2OTk4MDVlMjA5ZWU3ZGE0MWE5MWFmODE3YzgiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNDM2ZWM0YzY2NmMyYTU1Njc0NWM1ZmE1NGVjODY0OGEzZWNkMGYzMTIwMTA5NmExNTEwY2ExNDMzNDk5ODk2NmE2NDZjMWQwNjNiNjEwMTljY2Y2NDU1MWIzY2I1ZjEyOTBlMDZhNTkxNGQ4YTFkNWYwM2VjNmIxNzFhMzFkZiIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmNDM3YjVmM2UzM2I3NzNkZTZjYmVkMTBlNTBhOWUwYjk0OGM3M2E2YWUxNjQ2NjQwMTQ5Y2M4ZjBmODE2OTU4NWFhZjI1N2QxMDI2NmZjMjZiZTVlMWRjMzk0ZjVhMzUxZWM2YTZhZjg1ZDNiOTkyMjg4MTk5ZGI4ZDE2NmU4IgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhZjA0NTFiMmU2ZDBlZTQxMzA1ODkxZWY2Y2Y1YTllYzRhMDM0NWYxODQ4ZmU5YjJkOWM1MTIzMjQzNjY5YzU0YWM1MWM1Mzg4MjRjMzAxOTBkMjA3ZTQ4ZjUwYzA4NDU2M2Y5MzhkYTVlNjQxZmI3OWJjNDY1MGVkMGVjZjE3IgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2I1ZDM0MjZhMTRjMGY3NTYyNTA0ZmI3ODZhOWIwMjQwZGU0Y2I4NTI3OTRhMzhiMDYwMzMwMGE5OTBlNTEwMzlkNTM1ZTUzYWU2N2VjNzEwNWM5YTMyNTNkNDk2YWFmYzczMjA1NGI2YWMyNTUxNzYzYzkwZDc1M2Y1OWY2YmEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlciIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vdHJhbXBvbGluZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby90cmFtcG9saW5lLXYxLjAuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vemlwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3ppcC12MS4wLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW1wb3J0LWFyY2hpdmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YzIxMjRmYzAwNWRmNzk1ZTg5NjFmZDdiMGI0Y2RkMDRhYWExYzEwNGM0NDk0MTgwZTYzYmNjNDk0OTkxY2UzZTZmZGUzMDFiZmQyNzkwNTY3YjFmMDg3MTA4Mzg4MDgzOGY1ZGNlZTNlOGI0ZWQxYmM4NWUwM2NkM2ZlZWI1YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wYXJ0bWVudC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbXBhcnRtZW50LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIwOWY0ZDViYzliYjBmYzNjYzBkZTUyNzJkZjU3MzI0M2JjMjcxOTYxZTU5Y2U3OGY4MmQ4ZTA3ZjU2MmE3OTEwNTExMmUzYzM4NTlhNTMwNjAwOWZhMTY3ODBmODQ3MGJmMzM2YzA1ZjY5NGEyNGI3NzE5MjQyMDY3MDk1ZDM1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4dGVuc2lvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXh0ZW5zaW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmY2MzZjOTBlOGJjZTBjMThmN2Q4MjJlOTY4NTA2NWQ5NGQwOWRmMmZmZWZjZGVhNDhjZTViNDNjMmE5N2NjM2Q3NDFhZGY3NTI1NmJmY2ZlMzAxOGZkMjI3MTJlYmNkMjg4YzZjYTI2NmY2Y2ZjOWRhYjI0NGM4Yzc1YjczMmQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBkMTI5YjhkMjIxODA4ZjFhMmI5NjFjNWRjNjg2MDFhNWNmMzcxODE5NGRkNTE5NTRjNmI4NTM5OGJiNDA4MGM4ZGE5Zjk2NGQxNDA2ZDczOTNhZGFkYTIyOWJiMzQ2MGY0YTJkN2Q4N2E3OGVlZmVmNjI2M2M1NzdlMjU3ZjdlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMjM0ZTcyNmQ2ZDEwY2M1OGFmZWQxZjMzY2NlMzE2YjM1Zjc3ZWQ3NmU4NDdiMzQxMDY0NTVhNDk3MWNmYjhiMTZkMDBkNzM5MjcwZTQ2NjBmMWQ1YTkwOGQ4Y2Y2YTExNmM5YzMyY2IyOTM4ZDhlZDI4NDIzNTcxMDRmYjNmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbXBvcnQtYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW1wb3J0LWFyY2hpdmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Y2YwZTZjYTE2ZTY5MzdjNjZkNGM4ZjhiNTM2ZjA5NGQxZTE0YTNmZDJkNjExMzNmMGRkODI2YTJiYmJlODAwNzE0NTBkN2Q2ZWZkMzc3Nzg1NmVmMWQzZWU3ODU5ODFmOWU5YWQzY2RhMjI5M2NhM2ZjY2Y4ZjFjOWIyY2UxYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbXBvcnQtaG9vay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW1wb3J0LWhvb2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ODBiNTc4OGI2ZTY3YzNkZjk5ZDVkYjJhMDAxMGUyZWU2NTllOWZkNzQ5YzA4YjA4ZWQ3ZjdiNTYzYzlmMDNlZjM0YWFkYmQ5YjlkNDE4NTQ0M2NiZGY5MzNmMWI4Mjc4OTE5OWU0OTlhZjQ2ZmI5NTRjNDk3MzlhOGNhM2VlOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9qc29uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9qc29uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOWRiYmQxYzgxYzM1YmM0NzdiYmY5ZGQzMzRjNjhlM2E5MTAzOWU2ZDkzMTcyNTZjNzBjNzg4NzVjOTczODk1MDI5ZmYyZGZjNGY4MWU4YzdlMGJlMjQ3OGY2NGM1MTNmN2ZjNDRmMjk4YjUwNDBiZTdmNmZkNzg1NGRjYmVjM2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGluay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGluay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdkYmRkNWExYTNmOGEyODczNTFmMTU0NWZhNDk2YWI2ZDY1OGRkZWI3YzE1Y2QxYjY2ODZhNDI5OTQwZDI0MWU0Mjk1ZmZjOTAwODY5NWU0ZDY1YWE1YzhkMDEyOTQ1ZDJiMGEyZTQ4YTYwNjAwODI4MjQxOWVkMGQyMTlmMjNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcC1wYXJzZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcC1wYXJzZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxMzQxMmM3NTA2ZWUwYzI3ZGI5OTM5ZmNkOTE4NTI1OGI4YThjNTJiNGNiNjU1OTBmYmFhNWRiYThmODIwNjhhYTA4YzM4MWNiZjQ0ZDY0NzE1ZWM3ODMyMWNkZDhhMjExM2RiNzdkYzM5ZDAxZjVmY2YzM2E1MWE4YTkyN2EwMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vZGUtbW9kdWxlLXNwZWNpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM2YzcyYzA2NzIyZDE3ZjQ0MGM1ZGU0YjA1NmJjNzE5NDMxODNhMmRiZDFjOTUzOWFiYTg4OGEyZDE2ZTI0OTlhZmVjMDBkNmM1MzljZGMwMTg4ZTc0YmE4M2Y0OWJjZmI4ZmI5ZjE1ZGI3MWQwNWQ2ODc3NDQ2YzExMWIyNzQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLWJ5dGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1ieXRlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZkNDEzZGUzNTViY2ZiYzQxYzAzM2Y0Yzg0ZTQxYzU1MDc3MmViYmIwZTk4NWY5ZWMxNjg3MzNhNTgwZjIyMWU0NGZlMDA5MDVmNmQ2NTk5NTc1MzM0YTNmOTMxNDE0MTFhZTg3YzE1ZjJjZWMwMjA3MzNkMDc2OWVhOWRmNmQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxMjc0ODM2ZGFiZjI5ZmQyODk4YzJmNTA1OTg4NDQ4NDVhNDJmMTFmMTVlYTA5MzcwOGZmNjAzMDNmMWU4ZTg3ZTA0ZDNmNWJlMzQ5YjZmZmEwMGUzMzc5YmZiZDMxZWE2Y2MxNmE0ZjBjNThkNzkyMTU2ZDA4ODRlYjJlMTE5MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1qc29uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1qc29uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzliODQwODMyYmM2MzE2ODZlODJkNTdkNWM3ZjM4ZTAwYjZhNTZmZTVjNzQ5NDBiNTQ3NjFhMGNiMTc3MWFlYjEwZjcyODk2ODQyN2YyNjdjYjVlNDJlZGQ4ZDk4Mzc4NjNmZmFmYTc2ZTM1MTYxYWU1ZDFhYWEyNDM4ODFiMzciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtcHJlLWNqcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtcHJlLWNqcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRmZDNjYzlhYzk2NzdkZDYxNDA4ZGQyN2YxMDIxMWVlOWM4NDg1OWZkNDA4YmExOTNkYjJlZTEyOTdkOWVjNzYyOWYzZGI4MzE2NTVlNGZhZWNjYjA1ZWM0Mjc3NzY2MjhhZTEyYTVlZjcyMTJlMzg0ZjkxNjVmN2FkOWYwYjI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLXByZS1tanMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhcnNlLXByZS1tanMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkZWUyZjA4NDNhMGZmOTA0MTkyNDA4MjNjNmM2YzQ2ZDJmNDliMTUwYmZhYzhjZWVhYmM4YmRhNTdiM2VkODhjOWVjNDEwYTBkYzY5YzdmOTYwOGZiZWVkNTY5ODJkYmMyZDc2Zjc3MGMwOTgzNTRkOGUyOWM2ZGFhZmMwZDM2NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS10ZXh0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS10ZXh0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGYxNjUzMzgzM2I5NjViZTg0MmRmNmQ3MGIxYzc4ODE3NTM3Mzk2ZDU4NjhlMTg4NGE0YWNmYTEyNzNlYjViMDAzYThkODhhOGVjYTM4ZWFiYzg1NmRkNDllOWM1NWU2Y2NjZWVmZWY4YmUzYWUyYTY5NzYyN2RiYjc4ZWYwY2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcG9saWN5LWZvcm1hdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcG9saWN5LWZvcm1hdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMzNWZiOGVhMzZjODA3MjMyMzRlNWE5ZjZjYmU1YjMyZDg0ZTk1MDAzYTU5ZjE3YzU2MzA4MmVmNjA5NDY4NjllZTlkYzkzYjhjNWM0MzBlN2I3YWNiMjU4NTc5YTA5N2FlYThkNDkwNzE4NjExYjFjYmUwMGQ2ZGRlYjE0MDdiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BvbGljeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcG9saWN5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTliNjQ0Mzk1ZmNjNzQ0NjRkZWJjOWFlYmRlYmUzYzY0MjA4NTZlODU5OTYyYTZjMjVjYjhhNzUzYzUwYzFjMTM5NjliYjlhZDI0MWU4NTVjNDAxNjhmNjg5NWVmZDY5ODRlOTM2M2I1NzFlNzJiNTc3ZmFmYzEzNGJmM2ZiODEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcG93ZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wb3dlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMTg1M2JiMzlkNjU0YzlmZmJjOTYxZjQ3NTdiNzUzY2VjOTg4N2Y2MGNjNTg0ZDg4OGQ4Mzg1YzRkNTQ1Y2ZkMGY0OTE1OWZiNzJmMmRhYmU0NDllYTcyMDQ3MGFkNGU4NzA3YmQxZTQ0ZDhjOTIzZTQ4NDJiZWRiMTcxYzVhOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1leHRlcm5hbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtZXh0ZXJuYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IjogewogICAgICAibmFtZSI6ICJAZW5kby9lbnYtb3B0aW9ucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MTc3NmVlYjIxYjFjNTUxZGEzZjliOGRjZGY1YWJkODhiY2JmNWY4ZTM4Y2IwNGVkYWJjOGNiOTY0YmI5NzUxOGZmNGNhY2I3NDNlOGFiYmFhYzIyODYxNjgxNWZiZTQwZTg2YmUyZDdkNDI4MTU3ODk1MmY4YWE4NjZhMWI5NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbnYtb3B0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW52LW9wdGlvbnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZGIxNWQ0YjY2OTMzMjVkMzQ1MjM4MGNhNjJkZDk3YTdhZTRkMDMzYmY2NzUzYWJmNDE3NWJmOGYyYTQwNWRjYzkzZDg3N2RkZGVjMTBhN2JlNWI0ZmMzMjM2N2Q3MmUzZTc2ODAwZjdmNDhjNjA4ZGE0NTNjM2QyZDExNDQ4NSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXJyb3JzLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXJyb3JzIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDFmOGY0ZjU3ZjRmNmUyYzhiNWQyOTY3MzY3ZmZlNGQwN2M5Y2IxNzYxYTdjNWM4ODQ4NmY0YjI3YTRlM2ZlNTdkMjk4NGE1OTA4M2NmNTI5NzE5MThmZjk5ZWJmYTZiODJhOGMwZDljNWQzNGVjNWQ5NDhiMTVjOTlkMmViMTMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IjogewogICAgICAibmFtZSI6ICJAZW5kby9ldmVudHVhbC1zZW5kIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkM2U5MTA0YjZlMjViMDJhNzM0OTc5YWQ0ZjE5Nzg2YmE4NzE2OWU4MGY4YjBkOGE1MTE2NzgxZDkxNmNhMWNhYTBjY2FhZDllY2IzYTQ1YWYxMjAxNTYyZjAwNWVhOGEwYTJlMGFkMjYyMmMwN2E5NThlYzg3ZmU0NTgxMDliIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhOTVkZjRjYTMyODIwOTY4ZjEyMDNhYjVlYTI3MmI5NjFhZTMxMTYzNDA3MGNmMTUyMGU4YWFhNjJjYThlYTIyMjk3MDQ0YWM0ZTg4OTI2NzRmYmI5MWEzNDNhNzY1MGRjYmFmNTNiN2M3NDUyMWFkNWU1NTZiOGYzM2EzM2E0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjkxMTE0NmM4ZTA0NTIyNzAwZTIzYzkzOGU2YmE1NzBhYzdlYTFlOTE1ZDllN2M0ZGNiYzUzZmMwZjdhYjhhY2I4ZGQ3Y2ZjMDdjNTJlMDJmMmM2NTc0MDRlZTg5ZWY3MzExYTMyNzk0YTg3MTFhYTdhYjQzYTU0MjBiMzJjODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjA1MWY2OTQ0MmRiMTNmOWUyYjZjMTlkZGQxODljNTFhYjIxYTg0MDQyMTAzMDFmOGQyNjFiM2IzMTk0OGJkNTBjYjZmODUyM2UwMzVjNGYzZGY3NjMxMTU4MjhmYzJlYWRjOWMyYjEyNzE3ZmEzOTM4ZmQ0ZjFkNzg0YjEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwY2JhNzU3OThiZGEzOTIwZDc1ZDY4NWRmMzgzYTZiYmEwNzE1ZTEzMjY0ODRjNjNhZjgxZWJkZTdlODRiMzg1ZjA3YTczNzdmYzUyZmMzYzgwZTgwMzFiYTdmOTFiNWJkMjVjODdjNDk5NDY5ZWExZDEzNzA3Nzc3OWFiMWU4IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmZWEwNDExYjIxNmM3MTQxNTE0Mzk2NjY0ZjhmODIxM2FjZDExMmU5MzBjMGY0ZmFjMDM0MjdmNTczN2Q3MzdkMGU5NDZiNmNjNGM2MDg4NGQwNDA1N2I3N2Y4ODA4YTM5NjczNjg1OTU1ODg3MjQzNWVhZWVlZDJmMTMyNjQ3ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDQyOWM4NWMyYWZmNjc2OTlkMDZkMDdkZDBhOTcxYWMyMGY3NzI2MzVlNjk2OGE2ZWFjMGFhYTNkMzdjNzdkODk4NmFiMzI5N2Y5N2M2NjIxMzc0M2VjZDI1MzhmZDJjNWU4NjEyZjE1ZTJiZmNkNWQ2ZTU2NTY3YWNmMzdjYjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLW1ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLW1ha2Vycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFiNzk0MTUxMmVkZTA1MTI5ZjNiMjBjZDUwODA3ZDVhYTEwNTM5YjMwODlkYjQwZTRiZGVkZGQ2NjRiNTc5ZjdkNjQ4OTAzMjU3ZjBjMTVlZDA2NmJkYTk1ZTM2Zjg5MDgwMzgyZjZmNmE5MzExY2E2ZjJlZTA4NzNkMDY4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDUwYzY4YmFhZWIxMDY2YThhNWUzMjI2MGU0MmNmYTU3NWQ0OTM5MDgwNzRhZmNhMzZlYmY2ODJmMTgwZGQwMWZmN2I5ZWQ3YTJkMDBmNzczNDA4NGUwODZmZTZkZTM0ZWY3ZDFiZGVlOGEwMGM1ZWQ1NjFiOGMzNTg0MGU2MTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZ2V0LWludGVyZmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUwMDMzNzgyZDU3MDIzOTYzM2ExOTE5NDc4Yjc5YjZkMTRmYWU1MzhjMTBlNjkzN2ZmMDJkMmY0YWM2NjRjYTBlYzY5YmIyMzQ5MzEwNWQ2NGMwOGMzYWY2OWQwZGZhNWJkNTFiNzA4NTRkY2VjYzZiMDYxNTE5ZTczY2RiYzE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9mYXItdjEuMS45IjogewogICAgICAibmFtZSI6ICJAZW5kby9mYXIiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNDM1M2MxZTI4MmM3ZjA4YTQ5ZDE2YWMyZWVhMDY5YTFjMzI1MzQwNWJlNjNkODU1YTgzOWIwOGI4MGQ5YmQzYzI3NDQ1YWUxZGEyYmMzMWJmNDYyMTNkNWIyZDQxNDM5MTE3Y2YxZWMwZjExYWYwMjQ3ZDk1NWE3NjE3NzU2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9iYXNlNjQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2ltcG9ydC1hcmNoaXZlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGUxMTI2YzBiNTdlNWVhYTVjZjllYTU5OTIxYmM0MzMyODIxMGJkZDZmZDhmMzkwOWUzYmU4NDUzYWQ5M2YyNTA3NmJlNTNjZTQ3MzMyZTkxN2Y1NTEzM2RiMjg0ZDgwNGIyMWUzYTJlMTlmNjU5ZTM5Y2JiMDQyYTA4N2ZmYzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDA5ZjJhMTg0Yjg3ZDk0N2M3Y2IzN2IxYzBkN2Y0ZmUwMzhmMDJlNjYwNWRkMjEyYmRiYWRmM2M5Y2E1MTRhMzYwZjM2MDIwMTE0MTdlNzc3ZjE3NGY1MGEzYmFmMWQ1OGIwNGExYThlNGU3MjcwY2RiYTNiNDk0MmI0NjQyNmMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL21hcnNoYWwtdjEuNi4yIjogewogICAgICAibmFtZSI6ICJAZW5kby9tYXJzaGFsIiwKICAgICAgImxhYmVsIjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTk3MWE0YmFmOTJiNTQ4ZTI0NzQ4ODBjMDdkYWJmMzYxZjJmZDAzOGM0MDBkYTUxZDBhNDQ2ODA5MmUzNjU1NTc2OTdjOGViMWNhZTMyNWNmZDlmYWY3MmFiODZjMTNmMDQyNDBhNmUxNDczYTdlMzkzODYyZGQwNDExYjU0ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlUGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3OWRkNjRkNmZlMmUyNTg0YTY5YTA2ZjM2Yjk5ZDZiZjgwMmQ0NjQ0M2M1NzU0NGY4ZTVmNDQwYTIwMjY0Y2IwZjhkNGM0MzYyYWYzYzU5NzYwM2YyNDdmZDEzMzRjZTkyYjlhOGEyMTBjOGM2MGMyMzlkYmJmM2I0MzJiYTY5MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEzMmI0OGM3YjBhN2M0YWYxZjA1OGM0NTAzMGNjNTFhMjE2MTE2MDc1YzI0ZTUwOGRhOWVjZWY2YmQ2ZDQxYzRkYjA4MGEyYTgzODMyMjg3ZmY2MjA4NzNlNjdmMzE4ZWNhNDIzMTU0MWQyMTBiOTRiNDQyMWM5ZTM0YTM5ODhjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRjYmRmOWFhZTMxNmJjM2UzNDA1ZWZkZjcwMDNjYWFlMTg3YTkzMjk4OTRkOTI5MmRhYzY2ZDU5OTBjYzVkZmI4MTEyZjQzM2E4N2RjM2QyZDFlYzAyNmRkODU2NjBkZGZhM2QxOWVkZTQ5YWViYmFhMjg0ZDFjMDA5ZWY4MWQ5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUwYjhjMWE5YzViNjZkN2RmMDYxODQ1YmI3MzhmZWFmMzBkZTc1NDgzZGRkODUzZDJiNTU3ZmFiZDgzMjc5ZDQwNGFjNDlmZjU1M2IyZTMzYTE5MDAxZjUwMTE2NDIzNTg3YTljNDJkMzYzZGQ1ZTlmYzE0NTMxMjI4ZWE5NDY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjMmJkMjQxZTIyOTNiYTIxYWU2YWIyYzRmZmUzNjA0NzFmZDViOTE1YTQ5NzZkYTQxZjE2OGY5ODAwMjQwMmZkNDdjZWVhODE4YjhkMGIzNGNiOGM1N2FhOTUwMjkyZjcyOTczYTEwYjQ3YzA4YjA0MTdhNGNjYjNmMDU4MmM3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWVjNjU2ZDVkNGZkMjNjMjlhNTRiYTY4NWVmYmIwOTJkY2YyZjk0ZTBjYmNjODgxOGExMTI5Y2FjNjgxNmE5M2UxNTA0YzVhZWQwZmZjMzFlNjYyZWY0MDU0MjFiYTVjOWUxYjg0ZDhkNDMzMGMwNjgwM2FjMjJjNTAxYWQxMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yYW5rT3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JhbmtPcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMwZDhmY2ZlNGMzN2JiNTdiYTYyMzBkYjY1MWY2ODM1YjZlZDQyOTI0MzYxYzI4NGE4ZmM1ZWRiYTI5YmQ3MWY5MDMwZDFlNWNlMDZmMWIzYWNkNWU0Yzc4NzkyNzkwOTg5OGRkZjY5MmEzYTYxNDBkZmFlOTRiZDMyZmJiY2Q3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9uYXQtdjUuMC4xMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbmF0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYyMGE5NDdmMTJmZGQ1MjY2MTAyY2Y2ZTIwMDM4M2E0Mjg5N2U5ZGIzOTlhMjcyYjZjY2RjMDUwMjMyMzU2M2UyOTljOWQ2M2ZmZWJkNzA1MWUxY2M2ODhlZmE1ZjkxZDY4ZTQzZTY0YzVjOTMxZjBiN2E1NDg1NWU0M2EwNDZkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTkzMmQ1NGY1YjQxYWM3YjI0MWIwNDQ3ZGViYjVmNzkzNTlhNGNhYzUyZDdjYjY4NDU1NGQyNTE1MTk5Yjk5YTQ1ZjAxZmVjOTJhY2E0N2FhNWI3MTU5ZTRlZGI5NGFjN2NjNGIxYmE4NjE1YjIzOTQ0Mjg4MWVkODkwZmUxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5QXJyYXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlBcnJheS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNmMDdhYjlkMTczYzUwMzgzOGVjNWFjOTMwNjFiOTdiYzFlMDI3OWM2YmUzYzRkN2JhNDZjMWU5YWNmNDFjMGM5ODAwZGFkYjlhMjViYjllNzliYTcyMmEwZDQzNDRiY2NmYjkwYjIwZWI2N2YxY2Y5MDg1ODg0ZjJjNzJmYmFhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWM0OWNjNmQ1NzdhYWIyYmVhNzhkNDQzY2U4ZGU3MTM4YTQ4YWRkMDE4YTIyMTU2NGZhMTQ0NGIxNWVhYTY5YjYyMjE2MTE4MDg1ZWUyNjU1NTJlZTQ4YzZlZGY2ZWE1OWEwMDM4ZTgzNzVlNTQxNDk4MmUyMTJhODkxZmUyOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzYzBiYzBiZWMxOTRmZDkxMWI0OWM4NzkzOTk4ODZkZjZkNjZkYjc5Zjc1MGQyNDNkNjY1ZDliYWZhMWNjYzQ0NzJmODQzMzg2NDFiMGUxODRjYWMzOWM1NzdkZmExMTVlOGIzZGJiZjY5MjdmOWI3N2IwZDcyODM3NGM3MDZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlY2QwZTNkZWE2NGE5MTkyYzU3OGQwNzhiYWZkYTY4ZDE1ZjNiZjhjNWY3ZjcyZGVhNTNiZjYwNDJlZGUyNjYyYTFhMzBlNWQ1ZGE0ZjE2Mjc2NGU0MTExMWRiMDZkYTliNGIyNWM0M2E5MTc5ZGEyNjEyYWIwNmQ4YTVlODNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2l0ZXItaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXRlci1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWE4ZDdjZTA1MWJlYzg3NTY0ZTdjNGY2YWQxMjAzNjI2OTgyZjQxYTMyMzhhNTEwMjVmYWE1MzEwMWQ2MjdhNTMwMGNiYjQwNjYxYjM4ZThkYjEyMDAwMzIyZDdhZGY5NTkyY2YwYTViYTdjZDYzMTY5YzIxN2I0MGJjNDhjMzAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1mYXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2UtZmFyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVkYWI1OTY4YjY5MWEyOWEyZmQ4NTRjYTMzMWJkNDc1ZTBmNDdmNTU0YmYxZjlkZDY3Y2MxN2NmMjdhMTJjOWQ3NjU0NmFkNmZiNmUyOWViOTk2MTVmNDRjYjVmMDE1NTE0Mjg2YTlhYjIzZjQ0OGJiYzQ1YjA4NDFjMWRhZjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZVRhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwMWY4MmY5YjQwNjQzZjU5YWRjMjAyZGE3MWEwMWE1N2FmNjA0NGZhNWRlOWY5YmY4OTNiOTMyNzljYTFhMTVjYmExMGJmZDU2YzBhZDkzMDA2MzdhZTJkNjJkMDhlYjgzYmE3MDYzYmE4MDVkZmQxYmVhZjEyNGJjMmZlYTIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNlNTU2MDQ3ZWYwMzFkYjQzNmM4NGZhMzI4YjM3M2ZiNDhiYTllNDY2ZWMyNDJkNDBmMWZmMmZmYjJlNmZlMGQyOTBjYmNjZDA5MDVkMWYyODEwOTZkZGQ1MzdiODBjZmFkMDE2N2NhMjYxOTUzNTk5N2EyMzI4OGIzNjg4Y2MyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGVPZi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0MmE5ZWZiYjI4NTZlNmZmYzBmMzg5Yzg1ZGZkZGE4NGU2MTFjM2JmNDdiYTQ3ODBmMjA3ODFiOTYzN2I2MDIyMWJlMTQ4MDM4YTgwOWYyZDZmYjc2ZTJkZTY0NjlmZGFlNjNjMDA1MjU2YmE1NGU0OTZlNzRmYmVkNTM5N2FlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlbW90YWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVtb3RhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzkxMDA5Mzg3NDc1Y2I5NzM3YmM4YWQ1MGY5OGE0ODhjOGE1MTExMDMzMjZiNTNiNDI5NDkxN2FkNjg2ODgzYTBhNGJhZDZkYjA2YTk0YzA1MDZiZWYxNGFjYmFkZjMwODUyOGI5MWRhMjRiMmE1MGU5NTgxYTNlY2E5MjA3NTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2FmZS1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zYWZlLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZDZjYmZiM2MzZjllMThhMDA1Njg3YzU5N2YxZWZiNzc5NWRiM2FjMzY5NzQ0N2NhYTJiMjgyNGNjMWJhYjE0Y2IxYjhhMWE3MDZhZGExMjlkNzk4YjBhOTJkMDlhOTEzZjA4M2JmYzdiNjM2NzZlNzEzOGY1ZmJmZTljMGM4NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdHJpbmcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0cmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM5YjIxMDE3MWRmZjI5NmYzOGI0NTc3MDZhYjAyMWVhYmI3NTYwZTI1OGQ5M2ZmZjY4YjU2ZTk2YzZjMmE2YzJjOWQ5NzE2Yjk2NjBlYTk4Y2VkOWZmNGFiNmRmMDJhYTAxYjhmODE4NmI3MDZlNWY3MGJhMjdkZmU5NWVkODlkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N5bWJvbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3ltYm9sLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjg1YzRlYWNhNzllODFjZTczMGM1Y2NhYzQxMjBmOTJiZjQ4YjMxN2YzNGQ4MzVhZDIxMzllYzcxMTE1NTkzY2U0ZTlmOWFjNjhkNzdiOWRkNmI2YjM5NzViZjE2NmJmNDFkZTM4MjRlZWNmZTViYjE2OWU1NzFiMzNiYWZlYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90YWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjZGQwY2U5MmVlOGI1ZTZkMDA5N2E1Nzg4MjQyYTg3OWU3MjZjNjdjNTRmZmIwZTNiYTRlYWUzOTk2NDFkYzRkMWFjNWU1NjE5ZjVmNTY2ZTZhM2VkZDg0NmNmODczYjVjMWM1OTc4NWIyNTFmZDIwNGU5MDg5YjE3YWMwMTQ5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzI5ZmMxNTQwNTM3NzE1ZGY4NTRhMzhhNWU0NWFlNmQyMjg2ZTlmYjE1MWM1Mjg1NmM5YjlkZmMxZTIyY2Q2MzA5ZWQzMjIyMzBlNmZlY2M2YTI0OGE2YjM0NTBhM2ZmMTY0YTY3NGVlZmY4MjhjOTE1ZWM0ODIwM2JkYzY2NDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGF0dGVybnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTY5ZWNhOTkyYWUyY2YwOWQ0NmVhZTdlZWEwMDdlOTViYjRjNjRhYWEzN2JhNWU0NjYyNTg2YjlmZGZjZjA5NDQ4ZjlmMWQ1ZGI5ZjQxNjdlMGE3Yjc5NmZlOTIwYTVmZDBhOThkMGM1NDY0OWUyMTc2MzAzZGFmN2VhNDQ5OGYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jaGVja0tleS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk5NzJmYTAwNGJiY2RlYzMzZDJiMWUzYjdkOTE4MDQwZjVmODJhNDhmZjdlMGNjM2EyNGM2MDY2MjI2ZDYxMTFlY2M3NDk0NjRjOGRlZDVhODU4Zjg1ZDlkNjg5NGQ2NzkxZjFiMjU3N2NlODU0NmE1OWQ5NmQ1MjM3YjQyOTI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29tcGFyZUtleXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMWQ4NTQ4YjM5MGNjMjY2MTc1Y2M5ZmU2Nzk1ODYxYTQyMzdhOWQ5NDJhM2Q4OWNmZjYyNTk0NjIzMDQ0OTM0MGU0NmM1NzVlMzZhNzNmNmJhMzg1NWUwYmZlNTkyZTJhNWRmYjY3NTJhYzAwZTY3ZTEzYWM1ZDA0MDM4MWI4MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weUJhZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI1NTk0ODU4ZGU4M2QzNTdjNWNlOGRiMGNlZWQ2ZjFmZWJiZjM1YWRmMGFmNzFjYjY3MGE0OGRmMTQzODk3ZGJiOWNkOWFlYzZmZjdiMWJjNjNlNmQzZTJkNzMyMDE3YTgwODhkOWZkYjRkNzU2ZmIyMGRhOTY5ZDhlNDJlNDc0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weVNldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5U2V0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGJiMTNiYTA2YWM4NmNhZTUxOGJjYmI0YmZiNzU2ODk4MDEwYzdmYmYwODE4MGU1NGQ2YjFkZDU0NDc1NjdjODgzZDRlODBmODU1ZjgxNjNiYjk2M2RmOTc5M2MzNDVlOWMzZmYyYjM0YWMwM2M0M2JlMmUyZDU2MGMyYzkzNDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRkOGZkYzcwMDM0NDU4ODdlZGI3ZGEyMzE3ODc3ZTdkZjUzYzYzYmZjODg0ZmQ1Y2RiNTg3YmI2NmU4N2M3ODBkZjM3ZmRlYmQzMjNkNmViYzBjZDYxMzg2YzkyNTUyNTE5ZDRlZGE5NzBlMmY4YzUwMmExYjdkZWZiYmIzMGY0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjFiM2EyZjQ0OGY5MGYyMzgyOWI0NmM5NzNjYjZjNjk2YTlmZTJjMjM0ZDZmMmUwYmZjY2VlMWU3YzhlNTI3YzQ4NTFmOGJkNWJhODdlMDBlZWVhYWY5Y2M0MjczYWVkZjZmYTM3MTVkZDI3NjQwN2U3MmI4YzYxMzQwNmYwNTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYjg1YjgxMGUzM2EyY2NiOTUzYTAxZmNlYWYwMDM2YjY5MTQxYTFiZTlkODMyOGVlYjU5MGM5NzA5NmRhNmMzZjE1NzQ1YmIwMzc4MzkxZGUyZjc5MDA4NWMwZWE2Y2Y1ODBhZDlkMGQwOTRhMDI0NDI0YjgyZmI4ZmNhNjI4NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjFiOWU4NTdjZWU4ODRhYjA4YjhmOThmOGMyZmQwZWM2MjAxOTJjMmYyMTQwZTcxYTJjOWMyYTRkYmFhZGQ3OGZkZWY3OWE2OTVkN2Y5NjJjZjkxOWJkNjA5MTE1NGJkNWNjYjNiYzQ1ZGIyMzRlZTkwNTU5MGYyMzFjZDU5ZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNWMwNzViNzRlNzRkNWJiMDg4ODg5MWUzYzNkMjFmNGI2MzI5NTE2ZjQ1YTNjYzU4YWI0N2MxNDQ0ZmQ4MTY4Mjg1MmNiYTliOTEyZThkMTlhZTZjYTEzOGQ5OWUwNDJhZjc5OGVhNDY4OTk4NTM3NDA2ZTIxNjRlNjAzZWMxMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Mzc2NTA1ZjY4YmRjM2NiOTRlNjU3NjRlMmZlMzJlY2U5MDI2YTEzNzdlNzA0MWVlYWRjNzUwMTgwYTk3ZTk4MmY3YzRhYjhmNzMxODg4NDg0MmRkMjI1ODUyOWRiNDI1NDRmNThiZDA5OTA5Mzk0OGIwYzVjMzQwYjg2ZWU5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2M2MmI1ODA1YzQyNTU3NmJkMTFiYTM4NzEwNmU3MmFkNjk1YTc0MjIzZjU4ZDZmODkxY2JmMThhNjZjZTQyNjgxMWIxMmYzOGRiMTM4NDg3NzBjOTJmZTlhODM0NzNiNDJmMTcwZGY0NmNiODZkMjU0ODhiN2Y1ZmQxZDllYTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjIyNWYxYjUzZGYxYjI4YjM5ZTM3NzI3YmEwZGY0OTE1OGMxMjcyYmZjMTE1MWUzZWQ5NzhkZTVlODBiYjUzNTgwZjkwNWEzNzI1ODYyMmJhYzNmYzhmODNlMDkwNDFlYmY3NDFkODA1NmFmZmI2MWQyYjYxZDJkYjRjM2ViOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YThjNTIzNDc1ZWUwNWRlMjgwMWJkMzZkOTc2N2Q2ODI1YWE2MGRkYTA0ZDQ3ZTQ0MDQ5ZWM0ZjQ5MDg2MzYxYTM5ZTNmYjE5OGZhYzg0OGMzNTYwZmY1ZjU1Yzc3MzUyMjU1MzVlY2E1NjNlZWEyNzY3NWIxOGE0Zjk0NzZmMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vc3RyZWFtLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vc3RyZWFtIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vc3RyZWFtLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZGRmYTNhZWZhZDk0NmEyZTFhNGUzYWRkN2NlMThkMWMzZWMxM2ZkY2YxZDViNzRjMWM5ZmRiM2E1ZDVmODZlYTA1ZmJhMWE0NzRkOTAwZTdlZjhhMmFmYjUzN2JlOGZkYzNjOGJjNDI1NGYwNjA3Y2I0MTZmMmZkNTk0ZmM2OSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3RyYW1wb2xpbmUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjNTQzZWY1MmI3ZjUwNWRmOGM2MDFlN2VlNTc0YzhjYzMyNjE5Mjk4NzZhZTZmNmE0OTQyZTA1YWY0MTI3ZWM4MWRlOGFjMTJlODljMjJmMjQ0YzU1Yjc4ZTMzMTcyZTkyNTBjYjQzOWMyMDI3OTkyYmQ2NDM4MGYyN2U5NDZjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYW1wb2xpbmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYW1wb2xpbmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NWEwMjdiZTczNGM1NzU4ZTYyNjZkYTIxN2IxMWE2ODk0YTNlMTVkYzZiOTJhMGMyZTM3ZmZhNTljYTVhYmZmNjQxNDFkYmM1YzVjOWEwNmQ1ZWU5OTNkMDU4MGVlMWQzNDViNGJiNGEzMjJkYWZmYmMwZTkxYWYxYzdiNGE0NSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vemlwLXYxLjAuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vemlwIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3ppcC12MS4wLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vemlwLXYxLjAuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTUwODY5N2FlMzI3MmVkYTRiOWJlMTk0MWIwODBlNDAwM2U1OGZmNDAzMjFlYjlhNzBmODk3MzllZDM4Yjc0M2IxOGM2ZjZkMjA4YmM3M2RhMmMwMTU3OTZmZGUyZjA3MjlkNzUyMzA2ZDkzZjYzZjU1M2NlNjk2MGYxNzUxMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYnVmZmVyLXJlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYnVmZmVyLXJlYWRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyYjUzZTBjYWRkNGZjZGVhMGNhMzE4Njg0NWYxZWIzYzhiOWI1NTA3YmI4ODFkMzcyYzUzNzIzY2U3ZWY2YzY5M2YyYmQ0Y2JmMzMxYzg0NjZiZGZjMGU2Yjc3NTExNzk5MjA0MWI1OTdlY2JjNzkxY2Y0N2ZkYzk4ZDhhOWVmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2J1ZmZlci13cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2J1ZmZlci13cml0ZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YzNmZTdlYzU5MTE2NjU5YTUzNDAzMzg5ZTkyYTA0MWNkMDE4NDEyYzkxZTcyZmE2ZTUwYzFlYWY5ZTU1OWRmNDQzZjJiODc5MDU4NjFhZTZhMTFjN2FhOGVjZTBhMWMwNGU5NGUxZTU5OWU0YzI5M2EyMWVkYmM5NzhiZjEwZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb21wcmVzc2lvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tcHJlc3Npb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ODNmZmVlYjhiMWY3OTc2MTE5Mjg4ODQ5NDA2ZGI4NjcyMjkxZjY2ZjQ1NzM2YjBjZmFhNjFlM2ZjZjMxZDNiNmQ5ZjkyYjFkZTJkZDU4Zjc3MjA2NzY0ZmIyMGU4MjQzZGY0Y2EzZGQ2MDc2NGMxMWYwNDMxYTg1MzNmNDVjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jcmMzMi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjMzIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGZmODc1MzAyYTIyZTg5ZjFlNTE2MTRmOTM1NGQ1NDU1ZTk1MzZjMDBlMDdiZjY2YjQyMzcyMDk0M2ZmMjYyNDg0YmUxNGQzMzU0MTI3ZmQ4ZDI4ZDJkMDM4ZWI5YTcyZTg3NmViNTY0ZWNiMjQ2OTdiYWYxNThlMzk1MTMzYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9mb3JtYXQtcmVhZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9mb3JtYXQtcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTc4NzBkODE5NTQ2MjgyN2MyMjIxYzAzOWI5OGE0MWZjYjM3YmFiNDI3YWUzZjBlYWQ4ODNhMjFlOWY0NjdjYWUyMGJiMmYyNTUwZTljM2Y3ODQ5MDFhODJkYTkwMjc1Yzg1ZTc0ZjRhODU1Mjk2NDFiYjY4YTU2MWU1NDAxMTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZm9ybWF0LXdyaXRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZm9ybWF0LXdyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU4NTM5ODUwMDBlMjExNjZhODIwZjRjMmRkYzNlMjhiNzYyMmMwYmRkMTJjYzRmZGFlNWM0ZTJhN2Y5ZTVjMTQ2MTY2MGI5ZTRkMjNmNDU5ZWZhYWFkMDlhNjZmMzBjMTY5ZDRkMDkwMWEyMDJmY2JlN2NhYzA1NGU2NTJjZWY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVhZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2EyODA3NzJlZmY3MWEwZDkxYmYxZGM5OGY3NzZiMTJkZmIyZThlMTMyMzk2Mjk0ZjhhNWVhMGRhZjAyMzA0Mzk4YmU4ZWE3MjM1MzAwNzk1N2E0YTg2ZTIwZjk0Njk0MTdlMjM0MDgxMjFjZDg0MDM0ZTExNzc0OTg1YjBlMTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2lnbmF0dXJlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zaWduYXR1cmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMWFhYWFkMGM5MTk1NDkzMWVjOWJlNWViNDcxODczOTdjYTFlMzc4ZGMwMzUxM2U4ZTE2NzYwZGI5ZjQ3Y2Y5ODUxYjNiMzQwZDRkNDViZWI2YjU3ZTYwMzIxNTc4OWFmMmRlYjQ3YWNjYjQyNGIwMDM0NmY4OWI1YjE3ZDc3NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3dyaXRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDQ5MTdlMTZjOTIxMzk5ZDU4NDRiMWRjNzVkOTBiN2RjYzI4MjVhYjI1YmQ4NDRlN2ZlMjllM2MzMGJjNmIyYTFmOGZmOThkZmY4ZDgzMzI0YWY0YTI3Njc2YmRjYWQ3ZmUxYzBjOTNhMDkwY2I3ZTlkMTQ4Y2RjODNkMjJkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUyN2Q3ZGQ2MjNlZmZhZGRlZTA3ZDVkYTA2YjIwMThlNjZjZjI4YWQwOTQ0NGYxZmE3MmRjMWUwZTY5MmUzYmIzNGQ5N2I4MDVmMzc0NjA0OWRlYzc4NTFhYmJiZWYxYjg1YjJmZjEwMGYxNjhlZGU0MGY0MWYxN2E5Mzc0ZDY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL0UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL0UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlODkyNmFmZGI1OWM1ZTVhMDg2M2Q0NzEzMjQ5M2VhOGJlNjM5MjEzMTBlZTY3ZGE2ZmY0NzlkNTYzYzk1NTJkZDlhMjI0MjU1YTgxODc2NGYyNzgxMmI4Y2IzNDQ3YTFmYzljZGJjZTdjNzcxMThiZjAwYjcyZDkzMzYzMjNmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmNlYjE5ODNmZTRkMTJhYzYyN2Q5ZjFiZDA1NjUwZGJhY2YxNDRiN2YzOWY2MWUwY2E3NDIzZjk4Y2Y5YjA2MTY1ZGZjZDg4ZjYxN2FmODY2YTBkMTU3MDcwYTk3NGU4ZjkyY2UxYzUwMTA5ZDAwNzc0ODhmNDI4YzJlMDc5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTZmZWUxNmRhYjM4YTIxZjBiNWM4YTBiMWYxMGMzYjczYTMxNTdmNmU5ZjU4OTM4MDk2YjRiODc5YjJhMDk5M2ZkN2M5ZGRkN2IzOTMwZTgwMjYwZTFhODdhYjFhNGFjNjc2MWNiNzU3OTg1OGZlMzllMDEwOWRjNWExNjA1M2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFrZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOWE4ZTMzODQwZjUwYTdkYTIzMmM4ODM2YzZmYmEyNGIzZjc1MGVmMmIzMzFkYWIxNjVhZmVkNjA1MDhiZjczYTc4MThlMjc5OGMyZWVkYjNkMDRmM2Q2NzE3Zjk0M2ZiOTMwODg2ZmU2NGU4YTc4MzA0ODY1OTY3NGE5NDJhOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMS9hc3luYy10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwZmYzMTg5NTk2MWYyYzlmZGYzMTQ0NWRkNjg4ZjNkY2Y3ZmY1MTUwNzJmODIyOWJlNDU1MTg1Njg0MjIyMmY3MWM2NWM4NTMzMWFiYmRhZDllM2Q1NTVkOTFkNWY5ZmI2ZmYxODE2YjkyYzZjZjA5N2NjOWYyYzhjY2NjYmRhMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMS9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMS9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVkMzljNDVkOTdjMGZkMmExNDFiZGExY2M1NDg0NDk0Y2Y1OWY2NjBiNDc4YzRkMzlhM2Y3MmJlMGQzNGFlMDAwOTIzZTc4M2Y2MGVjYjFlNzEzMjlhMzBkZTczMTUwNDg5NWE2ZDRjZjAyMmU2ZTFjNzI2Y2U5ZDlkZDZkM2QiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9UEsDBAoAAAAAAAAAAAAFC72gfwEAAH8BAAAgAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL2hlYXAuanN7ImltcG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2hlYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEtx/5FkKAABZCgAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaGVhcC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXhvIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOlsibWFrZUhlYXBab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcixpc1Bhc3NhYmxlLG1ha2VFeG8sZGVmaW5lRXhvQ2xhc3MsZGVmaW5lRXhvQ2xhc3NLaXQsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJTZXRTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUsbWFrZU9uY2VLaXQsa2V5cyx3YXRjaFByb21pc2U7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V4b1wiLCBbW1wibWFrZUV4b1wiLCBbJGjNj19hID0+IChtYWtlRXhvID0gJGjNj19hKV1dLFtcImRlZmluZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKGRlZmluZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcImRlZmluZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKGRlZmluZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhclNldFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbW1wibWFrZU9uY2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZU9uY2VLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL2tleXMuanNcIiwgW1tcImFnb3JpY1ZhdERhdGFLZXlzXCIsIFskaM2PX2EgPT4gKGtleXMgPSAkaM2PX2EpXV1dXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW1tcIndhdGNoUHJvbWlzZVwiLCBbJGjNj19hID0+ICh3YXRjaFByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5jb25zdCBkZXRhY2hlZEhlYXBTdG9yZXM9RmFyKCdoZWFwU3RvcmVzJyx7XG5kZXRhY2hlZDooKT0+ZGV0YWNoZWRIZWFwU3RvcmVzLFxuaXNTdG9yYWJsZTppc1Bhc3NhYmxlLFxuXG5zZXRTdG9yZTptYWtlU2NhbGFyU2V0U3RvcmUsXG5tYXBTdG9yZTptYWtlU2NhbGFyTWFwU3RvcmUsXG53ZWFrTWFwU3RvcmU6bWFrZVNjYWxhcldlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZTptYWtlU2NhbGFyV2Vha1NldFN0b3JlfSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUhlYXBab25lPShiYXNlTGFiZWw9J2hlYXBab25lJyk9PntcbmNvbnN0e21ha2VPbmNlLHdyYXBQcm92aWRlcn09bWFrZU9uY2VLaXQoYmFzZUxhYmVsLGRldGFjaGVkSGVhcFN0b3Jlcyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTdWJab25lPShsYWJlbCxfb3B0aW9ucyk9PlxubWFrZUhlYXBab25lKCBgJHtiYXNlTGFiZWx9LiR7bGFiZWx9YCk7XG5cbnJldHVybiBGYXIoJ2hlYXBab25lJyx7XG5leG86d3JhcFByb3ZpZGVyKG1ha2VFeG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGRlZmluZUV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGRlZmluZUV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZTp3cmFwUHJvdmlkZXIobWFrZVN1YlpvbmUpLFxuXG5tYWtlT25jZSxcbndhdGNoUHJvbWlzZSxcbmRldGFjaGVkOmRldGFjaGVkSGVhcFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6ZGV0YWNoZWRIZWFwU3RvcmVzLmlzU3RvcmFibGUsXG5cbm1hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMubWFwU3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5zZXRTdG9yZSksXG53ZWFrTWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrTWFwU3RvcmUpLFxud2Vha1NldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha1NldFN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUhlYXBab25lKG1ha2VIZWFwWm9uZSk7XG5oYXJkZW4obWFrZUhlYXBab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VIZWFwWm9uZSI6WyJtYWtlSGVhcFpvbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7lq3z2sCAABrAgAAJQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4va2V5cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2V4cG9ydHMuanNcIiwgW11dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtdXSxbXCIuL2tleXMuanNcIiwgW11dLFtcIi4vaXMtcGFzc2FibGUuanNcIiwgW11dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB16UGuWAIAAFgCAAArAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pcy1wYXNzYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiaXNQYXNzYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCByZWFsSXNQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAocmVhbElzUGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT5yZWFsSXNQYXNzYWJsZShzcGVjaW1lbik7JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHmlMGXUDAAB1AwAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtpbmQ9KGxhYmVsKT0+IGAke2xhYmVsfV9raW5kSGFuZGxlYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uPShsYWJlbCk9PiBgJHtsYWJlbH1fc2luZ2xldG9uYDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFnb3JpY1ZhdERhdGFLZXlzPXtcbmV4b0NsYXNzOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4b0NsYXNzS2l0OihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4bzoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpLHNpbmdsZXRvbihsYWJlbCldKSxcbnN0b3JlOihsYWJlbCk9PmhhcmRlbihbbGFiZWxdKSxcbnpvbmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pfTskaM2PX29uY2UuYWdvcmljVmF0RGF0YUtleXMoYWdvcmljVmF0RGF0YUtleXMpO1xuXG5oYXJkZW4oYWdvcmljVmF0RGF0YUtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYWdvcmljVmF0RGF0YUtleXMiOlsiYWdvcmljVmF0RGF0YUtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAH0KGKeIGAADiBgAAKQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvbWFrZS1vbmNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VPbmNlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdExhYmVsVG9LZXlzPShsYWJlbCk9PmhhcmRlbihbbGFiZWxdKTtcbmhhcmRlbihkZWZhdWx0TGFiZWxUb0tleXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU9uY2VLaXQ9KGRlYnVnTmFtZSxzdG9yZXMsYmFja2luZ1N0b3JlPXVuZGVmaW5lZCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgdXNlZEtleXM9c3RvcmVzLmRldGFjaGVkKCkuc2V0U3RvcmUoIGAke2RlYnVnTmFtZX0gdXNlZCBrZXlzYCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRPbmx5T25jZT0oa2V5KT0+e1xudHlwZW9mIGtleT09PSdzdHJpbmcnfHxGYWlsIGBrZXkgJHtrZXl9IG11c3QgYmUgYSBzdHJpbmdgO1xuIXVzZWRLZXlzLmhhcyhrZXkpfHxcbkZhaWwgYGtleSAke2tleX0gaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgem9uZSBhbmQgaW5jYXJuYXRpb25gO1xuXG4vL1xuLy9cbnVzZWRLZXlzLmFkZChrZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB3cmFwUHJvdmlkZXI9KHByb3ZpZGVyLGxhYmVsVG9LZXlzPWRlZmF1bHRMYWJlbFRvS2V5cyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3cmFwcGVyPShsYWJlbCwuLi5yZXN0KT0+e1xuZm9yKGNvbnN0IGtleSBvZiBsYWJlbFRvS2V5cyhsYWJlbCkpe1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbiB9XG5yZXR1cm4gcHJvdmlkZXIobGFiZWwsLi4ucmVzdCk7XG4gfTtcbnJldHVybiAoLyogICAgICAgICAgICAqL3dyYXBwZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlT25jZT0oa2V5LG1ha2VyKT0+e1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbmlmKGJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBiYWNraW5nU3RvcmUuZ2V0KGtleSk7XG4gfVxuY29uc3QgdmFsdWU9bWFrZXIoa2V5KTtcbnN0b3Jlcy5pc1N0b3JhYmxlKHZhbHVlKXx8XG5GYWlsIGBtYWtlciByZXR1cm4gdmFsdWUgJHt2YWx1ZX0gaXMgbm90IHN0b3JhYmxlYDtcbmJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmluaXQoa2V5LHZhbHVlKTtcbnJldHVybiB2YWx1ZTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9KTtcbiB9OyRozY9fb25jZS5tYWtlT25jZUtpdChtYWtlT25jZUtpdCk7XG5oYXJkZW4obWFrZU9uY2VLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU9uY2VLaXQiOlsibWFrZU9uY2VLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA72q0kl8JAABfCQAALQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvd2F0Y2gtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSIsIlByb21pc2VXYXRjaGVySGFuZGxlciIsIlByb21pc2VXYXRjaGVySSIsIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJIYW5kbGVyPU0uY2FsbChNLnJhdygpKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoKTtcblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkoUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlclJlamVjdGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJSZWplY3RlZCcse1xub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABczaqHAB0AAAAdAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudE1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJBbW91bnRNYXRoIiwiQXNzZXRLaW5kIiwiYXNzZXJ0QXNzZXRLaW5kIiwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIiwiZ2V0QXNzZXRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxwYXNzU3R5bGVPZixhc3NlcnRSZW1vdGFibGUsYXNzZXJ0UmVjb3JkLE0sbWF0Y2hlcyxuYXRNYXRoSGVscGVycyxzZXRNYXRoSGVscGVycyxjb3B5U2V0TWF0aEhlbHBlcnMsY29weUJhZ01hdGhIZWxwZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNcIiwgW1tcIm5hdE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoc2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5QmFnTWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqL3tcbk5BVDonbmF0JyxcblNFVDonc2V0JyxcbkNPUFlfU0VUOidjb3B5U2V0JyxcbkNPUFlfQkFHOidjb3B5QmFnJ307JGjNj19vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5oYXJkZW4oQXNzZXRLaW5kKTtcbmNvbnN0IGFzc2V0S2luZE5hbWVzPWhhcmRlbihPYmplY3QudmFsdWVzKEFzc2V0S2luZCkuc29ydCgpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjNj19vbmNlLmFzc2VydEFzc2V0S2luZChhc3NlcnRBc3NldEtpbmQpO1xuaGFyZGVuKGFzc2VydEFzc2V0S2luZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBoZWxwZXJzPXtcbm5hdDpuYXRNYXRoSGVscGVycyxcbnNldDpzZXRNYXRoSGVscGVycyxcbmNvcHlTZXQ6Y29weVNldE1hdGhIZWxwZXJzLFxuY29weUJhZzpjb3B5QmFnTWF0aEhlbHBlcnN9O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZD0odmFsdWUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsdWUpO1xuaWYocGFzc1N0eWxlPT09J2JpZ2ludCcpe1xucmV0dXJuJ25hdCc7XG4gfVxuaWYocGFzc1N0eWxlPT09J2NvcHlBcnJheScpe1xucmV0dXJuJ3NldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLnNldCgpKSl7XG5yZXR1cm4nY29weVNldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLmJhZygpKSl7XG5yZXR1cm4nY29weUJhZyc7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG50aHJvdyBGYWlsIGB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIGEgYmlnaW50LCBjb3B5U2V0LCBjb3B5QmFnLCBvciBhbiBhcnJheSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRWYWx1ZUdldEhlbHBlcnM9KHZhbHVlKT0+XG4vL1xuaGVscGVyc1thc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSldO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50TWF0aD17XG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlOihicmFuZCxhbGxlZ2VkVmFsdWUpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyhhbGxlZ2VkVmFsdWUpO1xuY29uc3QgdmFsdWU9aC5kb0NvZXJjZShhbGxlZ2VkVmFsdWUpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb2VyY2U6KGJyYW5kLGFsbGVnZWRBbW91bnQpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRSZWNvcmQoYWxsZWdlZEFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWU6YWxsZWdlZFZhbHVlfT1hbGxlZ2VkQW1vdW50O1xuYnJhbmQ9PT1hbGxlZ2VkQnJhbmR8fFxuRmFpbCBgVGhlIGJyYW5kIGluIHRoZSBhbGxlZ2VkQW1vdW50ICR7YWxsZWdlZEFtb3VudH0gaW4gJ2NvZXJjZScgZGlkbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYnJhbmQgJHticmFuZH0uYDtcbi8vXG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCxhbGxlZ2VkVmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmdldFZhbHVlOihicmFuZCxhbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbW91bnQpLnZhbHVlLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eTooYnJhbmQsYXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICovJ25hdCcpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcbmNvbnN0IHZhbHVlPWhlbHBlcnNbYXNzZXRLaW5kXS5kb01ha2VFbXB0eSgpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5RnJvbUFtb3VudDooYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZCx2YWx1ZX09YW1vdW50O1xuY29uc3QgYXNzZXRLaW5kPWFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbiB9LFxuLypcblxuXG5cblxuXG4gICAqL1xuaXNFbXB0eTooYW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlfT1hbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUoYWxsZWdlZEJyYW5kLCdicmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGFsbGVnZWRCcmFuZCxicmFuZCk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyh2YWx1ZSk7XG5yZXR1cm4gaC5kb0lzRW1wdHkoaC5kb0NvZXJjZSh2YWx1ZSkpO1xuIH0sXG5pc0dURSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmlzRXF1YWw6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNFcXVhbCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuYWRkOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvQWRkKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5zdWJ0cmFjdDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb1N1YnRyYWN0KC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1pbjooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG55OlxuaXNHVEUoeSx4LGJyYW5kKT9cbng6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1heDooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG54OlxuaXNHVEUoeSx4KT9cbnk6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgfTskaM2PX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGdldEFzc2V0S2luZD0oYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHt2YWx1ZX09YW1vdW50O1xucmV0dXJuIGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbiB9OyRozY9fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAgUbFhdQDAADUAwAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQW1vdW50U3RvcmU9KHN0YXRlLGtleSk9PntcbnJldHVybiBoYXJkZW4oe1xuZ2V0QW1vdW50OigpPT5zdGF0ZVtrZXldLFxuaW5jcmVtZW50OihkZWx0YSk9PntcbnN0YXRlW2tleV09QW1vdW50TWF0aC5hZGQoc3RhdGVba2V5XSxkZWx0YSk7XG4gfSxcbmRlY3JlbWVudDooZGVsdGEpPT57XG5pZihBbW91bnRNYXRoLmlzR1RFKHN0YXRlW2tleV0sZGVsdGEpKXtcbnN0YXRlW2tleV09QW1vdW50TWF0aC5zdWJ0cmFjdChzdGF0ZVtrZXldLGRlbHRhKTtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADood0axwUAAMcFAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG11c3RNYXRjaCxEaXNwbGF5SW5mb1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaM2PX2EgPT4gKERpc3BsYXlJbmZvU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZURpc3BsYXlJbmZvPShhbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kKT0+e1xubXVzdE1hdGNoKGFsbGVnZWREaXNwbGF5SW5mbyxEaXNwbGF5SW5mb1NoYXBlLCdkaXNwbGF5SW5mbycpO1xuXG5pZihhbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kIT09dW5kZWZpbmVkKXtcbmFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQ9PT1hc3NldEtpbmR8fFxuRmFpbCBgZGlzcGxheUluZm8uYXNzZXRLaW5kIHdhcyBwcmVzZW50ICgke2FsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmR9KSBhbmQgZGlkIG5vdCBtYXRjaCB0aGUgYXNzZXRLaW5kIGFyZ3VtZW50ICgke2Fzc2V0S2luZH0pYDtcbiB9XG5jb25zdCBkaXNwbGF5SW5mbz1oYXJkZW4oey4uLmFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmR9KTtcblxuaWYoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyE9PXVuZGVmaW5lZCl7XG5OdW1iZXIuaXNTYWZlSW50ZWdlcihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzKXx8XG5GYWlsIGBkZWNpbWFsUGxhY2VzICR7ZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlc30gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYDtcbiB9XG5cbnJldHVybiBkaXNwbGF5SW5mbztcbiB9OyRozY9fb25jZS5jb2VyY2VEaXNwbGF5SW5mbyhjb2VyY2VEaXNwbGF5SW5mbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb2VyY2VEaXNwbGF5SW5mbyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAjjjJqPwIAAD8CAAAhAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGiU08lqFgAAahYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwsYXNzZXJ0UGF0dGVybixtYWtlU2NhbGFyQmlnTWFwU3RvcmUsbWFrZUR1cmFibGVab25lLEFzc2V0S2luZCxhc3NlcnRBc3NldEtpbmQsY29lcmNlRGlzcGxheUluZm8scHJlcGFyZVBheW1lbnRMZWRnZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzXCIsIFtbXCJtYWtlRHVyYWJsZVpvbmVcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dLFtcImFzc2VydEFzc2V0S2luZFwiLCBbJGjNj19hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL2Rpc3BsYXlJbmZvLmpzXCIsIFtbXCJjb2VyY2VEaXNwbGF5SW5mb1wiLCBbJGjNj19hID0+IChjb2VyY2VEaXNwbGF5SW5mbyA9ICRozY9fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRMZWRnZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxub3B0aW9ucz17fSk9Plxue1xuaWYoaGFzSXNzdWVyKGlzc3VlckJhZ2dhZ2UpKXtcbmNvbnN0e2VsZW1lbnRTaGFwZTpfPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBpc3N1ZXJLaXQ9dXBncmFkZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxucmVjb3ZlcnlTZXRzT3B0aW9uKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfWVsc2V7XG5jb25zdCBpc3N1ZXJLaXQ9bWFrZUR1cmFibGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1cbiB9OyRozY9fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRozY9fb25jZS5tYWtlSXNzdWVyS2l0KG1ha2VJc3N1ZXJLaXQpO1xuXG5oYXJkZW4obWFrZUlzc3VlcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1cGdyYWRlSXNzdWVyS2l0IjpbInVwZ3JhZGVJc3N1ZXJLaXQiXSwiaGFzSXNzdWVyIjpbImhhc0lzc3VlciJdLCJtYWtlRHVyYWJsZUlzc3VlcktpdCI6WyJtYWtlRHVyYWJsZUlzc3VlcktpdCJdLCJwcmVwYXJlSXNzdWVyS2l0IjpbInByZXBhcmVJc3N1ZXJLaXQiXSwibWFrZUlzc3VlcktpdCI6WyJtYWtlSXNzdWVyS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOSrY+7hBQAA4QUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEGFj3ifBQAAnwUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlTZXQsbXVzdE1hdGNoLE0sZ2V0Q29weVNldEtleXMsc2V0SXNTdXBlcnNldCxzZXREaXNqb2ludFVuaW9uLHNldERpc2pvaW50U3VidHJhY3Q7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjNj19hID0+IChtYWtlQ29weVNldCA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJzZXRJc1N1cGVyc2V0XCIsIFskaM2PX2EgPT4gKHNldElzU3VwZXJzZXQgPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFVuaW9uID0gJGjNj19hKV1dLFtcInNldERpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoc2V0RGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1tYWtlQ29weVNldChbXSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weVNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooc2V0KT0+e1xubXVzdE1hdGNoKHNldCxNLnNldCgpLCdzZXQgb2YgYW1vdW50Jyk7XG5yZXR1cm4gc2V0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KHNldCk9PmdldENvcHlTZXRLZXlzKHNldCkubGVuZ3RoPT09MCxcbmRvSXNHVEU6c2V0SXNTdXBlcnNldCxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOnNldERpc2pvaW50VW5pb24sXG5kb1N1YnRyYWN0OnNldERpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weVNldE1hdGhIZWxwZXJzKGNvcHlTZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5U2V0TWF0aEhlbHBlcnMiOlsiY29weVNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJUrcMlnBAAAZwQAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxOYXQsaXNOYXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXSxbXCJpc05hdFwiLCBbJGjNj19hID0+IChpc05hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbXB0eT0wbjtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobmF0KT0+e1xuLy9cbmFzc2VydC50eXBlb2YobmF0LCdiaWdpbnQnKTtcbmlzTmF0KG5hdCl8fEZhaWwgYHZhbHVlICR7bmF0fSBtdXN0IGJlIGEgbmF0dXJhbCBudW1iZXJgO1xucmV0dXJuIE5hdChuYXQpO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KG5hdCk9Pm5hdD09PWVtcHR5LFxuZG9Jc0dURToobGVmdCxyaWdodCk9PmxlZnQ+PXJpZ2h0LFxuZG9Jc0VxdWFsOihsZWZ0LHJpZ2h0KT0+bGVmdD09PXJpZ2h0LFxuLy9cbmRvQWRkOihsZWZ0LHJpZ2h0KT0+bGVmdCtyaWdodCxcbmRvU3VidHJhY3Q6KGxlZnQscmlnaHQpPT5OYXQobGVmdC1yaWdodCl9KTskaM2PX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARwq540gGAABIBgAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANj9K1X8DAAB/AwAAIwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudEtpbmQ9KGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk9PntcbmNvbnN0IG1ha2VQYXltZW50PWlzc3VlclpvbmUuZXhvQ2xhc3MoXG4gYCR7bmFtZX0gcGF5bWVudGAsXG5QYXltZW50SSxcbmluaXRFbXB0eSxcbntcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH19KTtcblxuXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRLaW5kKHByZXBhcmVQYXltZW50S2luZCk7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50S2luZCI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASy2n++sfAADrHwAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRmFpbCxhbm5vdGF0ZUVycm9yLGlzUHJvbWlzZSxtdXN0TWF0Y2gsTSxrZXlFUSxBbW91bnRNYXRoLHByZXBhcmVQYXltZW50S2luZCxwcmVwYXJlUHVyc2VLaW5kLEJyYW5kSSxtYWtlSXNzdWVySW50ZXJmYWNlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRLaW5kID0gJGjNj19hKV1dXV0sW1wiLi9wdXJzZS5qc1wiLCBbW1wicHJlcGFyZVB1cnNlS2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZElcIiwgWyRozY9fYSA9PiAoQnJhbmRJID0gJGjNj19hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJJbnRlcmZhY2VzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFtb3VudFNoYXBlRnJvbUVsZW1lbnRTaGFwZT0oYnJhbmQsYXNzZXRLaW5kLGVsZW1lbnRTaGFwZSk9PntcbmxldCB2YWx1ZVNoYXBlO1xuc3dpdGNoKGFzc2V0S2luZCl7XG5jYXNlJ25hdCc6e1xudmFsdWVTaGFwZT1NLm5hdCgpO1xuZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkfHxcbkZhaWwgYEZ1bmdpYmxlIGFzc2V0cyBjYW5ub3QgaGF2ZSBhbiBlbGVtZW50U2hhcGU6ICR7cShlbGVtZW50U2hhcGUpfWA7XG5icmVhaztcbiB9XG5jYXNlJ3NldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5hbmQoTS5rZXkoKSxlbGVtZW50U2hhcGUpKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlTZXQnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uc2V0KCk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uc2V0T2YoZWxlbWVudFNoYXBlKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uYmFnKCk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYmFnT2YoZWxlbWVudFNoYXBlKTtcbiB9XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbkZhaWwgYHVuZXhwZWN0ZWQgYXNzZXQga2luZCAke3EoYXNzZXRLaW5kKX1gO1xuIH19XG5cblxuY29uc3QgYW1vdW50U2hhcGU9aGFyZGVuKHtcbmJyYW5kLC8vXG52YWx1ZTp2YWx1ZVNoYXBlfSk7XG5cbnJldHVybiBhbW91bnRTaGFwZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVBheW1lbnRMZWRnZXI9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQpPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgYnJhbmQ9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IGJyYW5kYCxCcmFuZEkse1xuaXNNeUlzc3VlcihhbGxlZ2VkSXNzdWVyKXtcbi8vXG5yZXR1cm4gYWxsZWdlZElzc3Vlcj09PWlzc3VlcjtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG4vL1xuZ2V0RGlzcGxheUluZm8oKXtcbnJldHVybiBkaXNwbGF5SW5mbztcbiB9LFxuZ2V0QW1vdW50U2hhcGUoKXtcbnJldHVybiBhbW91bnRTaGFwZTtcbiB9fSk7XG5cblxuY29uc3QgYW1vdW50U2hhcGU9YW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5lbGVtZW50U2hhcGUpO1xuXG5cbmNvbnN0e0lzc3VlckksTWludEksUGF5bWVudEksUHVyc2VJS2l0fT1tYWtlSXNzdWVySW50ZXJmYWNlcyhcbmJyYW5kLFxuYXNzZXRLaW5kLFxuYW1vdW50U2hhcGUpO1xuXG5cbmNvbnN0IG1ha2VQYXltZW50PXByZXBhcmVQYXltZW50S2luZChpc3N1ZXJab25lLG5hbWUsYnJhbmQsUGF5bWVudEkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlPShyZWFzb24pPT57XG4vL1xuLy9cbmlmKG9wdFNodXRkb3duV2l0aEZhaWx1cmUhPT11bmRlZmluZWQpe1xudHJ5e1xub3B0U2h1dGRvd25XaXRoRmFpbHVyZShyZWFzb24pO1xuIH1jYXRjaChlcnJJblNodXRkb3duKXtcbmFubm90YXRlRXJyb3IoZXJySW5TaHV0ZG93bixYIGBDYXVzZWQgYnk6ICR7cmVhc29ufWApO1xudGhyb3cgZXJySW5TaHV0ZG93bjtcbiB9XG4gfVxudGhyb3cgcmVhc29uO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50TGVkZ2VyPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50TGVkZ2VyJyx7XG52YWx1ZVNoYXBlOmFtb3VudFNoYXBlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGF5bWVudFJlY292ZXJ5U2V0cz1pc3N1ZXJab25lLndlYWtNYXBTdG9yZSgncGF5bWVudFJlY292ZXJ5U2V0cycpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGluaXRQYXltZW50PShwYXltZW50LGFtb3VudCxvcHRSZWNvdmVyeVNldD11bmRlZmluZWQpPT57XG5pZihyZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cycpe1xub3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWR8fFxuRmFpbCBgd2hlbiByZWNvdmVyU2V0c1N0YXRlID09PSAnbm9SZWNvdmVyeVNldHMnLCBvcHRSZWNvdmVyeVNldCBtdXN0IGJlIGVtcHR5YDtcbiB9XG5pZihvcHRSZWNvdmVyeVNldCE9PXVuZGVmaW5lZCYmIUFtb3VudE1hdGguaXNFbXB0eShhbW91bnQpKXtcbm9wdFJlY292ZXJ5U2V0LmFkZChwYXltZW50KTtcbnBheW1lbnRSZWNvdmVyeVNldHMuaW5pdChwYXltZW50LG9wdFJlY292ZXJ5U2V0KTtcbiB9XG5wYXltZW50TGVkZ2VyLmluaXQocGF5bWVudCxhbW91bnQpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWxldGVQYXltZW50PShwYXltZW50KT0+e1xucGF5bWVudExlZGdlci5kZWxldGUocGF5bWVudCk7XG5pZihwYXltZW50UmVjb3ZlcnlTZXRzLmhhcyhwYXltZW50KSl7XG5jb25zdCByZWNvdmVyeVNldD1wYXltZW50UmVjb3ZlcnlTZXRzLmdldChwYXltZW50KTtcbnBheW1lbnRSZWNvdmVyeVNldHMuZGVsZXRlKHBheW1lbnQpO1xucmVjb3ZlcnlTZXQuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvZXJjZT0oYWxsZWdlZEFtb3VudCk9PkFtb3VudE1hdGguY29lcmNlKGJyYW5kLGFsbGVnZWRBbW91bnQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydEFtb3VudENvbnNpc3RlbnQ9KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKT0+e1xuaWYob3B0QW1vdW50U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlLCdhbW91bnQnKTtcbiB9XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0TGl2ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmhhcyhwYXltZW50KXx8XG5GYWlsIGAke3BheW1lbnR9IHdhcyBub3QgYSBsaXZlIHBheW1lbnQgZm9yIGJyYW5kICR7cShcbmJyYW5kKVxuIH0uIEl0IGNvdWxkIGJlIGEgdXNlZC11cCBwYXltZW50LCBhIHBheW1lbnQgZm9yIGFub3RoZXIgYnJhbmQsIG9yIGl0IG1pZ2h0IG5vdCBiZSBhIHBheW1lbnQgYXQgYWxsLmA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZXBvc2l0SW50ZXJuYWw9KFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCk9Plxue1xuIWlzUHJvbWlzZShzcmNQYXltZW50KXx8XG5hc3NlcnQuZmFpbChcbiBgZGVwb3NpdCBkb2VzIG5vdCBhY2NlcHQgcHJvbWlzZXMgYXMgZmlyc3QgYXJndW1lbnQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgcHJvbWlzZSAoZGVwb3NpdChwYXltZW50UHJvbWlzZSkpLCBjb25zaWRlciB1bndyYXBwaW5nIHRoZSBwcm9taXNlIGZpcnN0OiBFLndoZW4ocGF5bWVudFByb21pc2UsIChhY3R1YWxQYXltZW50ID0+IGRlcG9zaXQoYWN0dWFsUGF5bWVudCkpYCxcblR5cGVFcnJvcik7XG5cbmFzc2VydExpdmVQYXltZW50KHNyY1BheW1lbnQpO1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQoc3JjUGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHNyY1BheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG4vL1xuLy9cbmRlbGV0ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5iYWxhbmNlU3RvcmUuaW5jcmVtZW50KHNyY1BheW1lbnRCYWxhbmNlKTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gc3JjUGF5bWVudEJhbGFuY2U7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB3aXRoZHJhd0ludGVybmFsPShiYWxhbmNlU3RvcmUsYW1vdW50LHJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmFtb3VudD1jb2VyY2UoYW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWFrZVBheW1lbnQoKTtcbi8vXG4vL1xuYmFsYW5jZVN0b3JlLmRlY3JlbWVudChhbW91bnQpfHxcbkZhaWwgYFdpdGhkcmF3YWwgb2YgJHthbW91bnR9IGZhaWxlZCBiZWNhdXNlIHRoZSBwdXJzZSBvbmx5IGNvbnRhaW5lZCAke2JhbGFuY2VTdG9yZS5nZXRBbW91bnQoKX1gO1xudHJ5e1xuaW5pdFBheW1lbnQocGF5bWVudCxhbW91bnQscmVjb3ZlcnlTZXQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50O1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9cHJlcGFyZVB1cnNlS2luZChcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuYnJhbmQsXG5QdXJzZUlLaXQsXG5oYXJkZW4oe1xuZGVwb3NpdEludGVybmFsLFxud2l0aGRyYXdJbnRlcm5hbH0pLFxuXG5yZWNvdmVyeVNldHNTdGF0ZSxcbnBheW1lbnRSZWNvdmVyeVNldHMpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGlzc3Vlcj1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gaXNzdWVyYCxJc3N1ZXJJLHtcbmdldEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfSxcbmdldEFsbGVnZWROYW1lKCl7XG5yZXR1cm4gbmFtZTtcbiB9LFxuZ2V0QXNzZXRLaW5kKCl7XG5yZXR1cm4gYXNzZXRLaW5kO1xuIH0sXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5tYWtlRW1wdHlQdXJzZSgpe1xucmV0dXJuIG1ha2VFbXB0eVB1cnNlKCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuaXNMaXZlKHBheW1lbnQpe1xuLy9cbnJldHVybiBwYXltZW50TGVkZ2VyLmhhcyhwYXltZW50KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRBbW91bnRPZihwYXltZW50KXtcbi8vXG5hc3NlcnRMaXZlUGF5bWVudChwYXltZW50KTtcbnJldHVybiBwYXltZW50TGVkZ2VyLmdldChwYXltZW50KTtcbiB9LFxuLypcblxuXG4gICAgICovXG5idXJuKHBheW1lbnQsb3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnRMaXZlUGF5bWVudChwYXltZW50KTtcbmNvbnN0IHBheW1lbnRCYWxhbmNlPXBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuYXNzZXJ0QW1vdW50Q29uc2lzdGVudChwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk7XG50cnl7XG4vL1xuZGVsZXRlUGF5bWVudChwYXltZW50KTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gcGF5bWVudEJhbGFuY2U7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlPS8qICAgICAgICAgICAgICAgICAgICovXG5pc3N1ZXJab25lLm1ha2VPbmNlKCdtaW50UmVjb3ZlcnlQdXJzZScsKCk9Pm1ha2VFbXB0eVB1cnNlKCkpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1pbnQ9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IG1pbnRgLE1pbnRJLHtcbmdldElzc3Vlcigpe1xucmV0dXJuIGlzc3VlcjtcbiB9LFxubWludFBheW1lbnQobmV3QW1vdW50KXtcbm5ld0Ftb3VudD1jb2VyY2UobmV3QW1vdW50KTtcbm11c3RNYXRjaChuZXdBbW91bnQsYW1vdW50U2hhcGUsJ21pbnRlZCBhbW91bnQnKTtcbi8vXG4vL1xuY29uc3QgcmF3UGF5bWVudD1tYWtlUGF5bWVudCgpO1xuaW5pdFBheW1lbnQocmF3UGF5bWVudCxuZXdBbW91bnQsdW5kZWZpbmVkKTtcblxuY29uc3QgbWludFJlY292ZXJ5UHVyc2VCZWZvcmU9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xubWludFJlY292ZXJ5UHVyc2UuZGVwb3NpdChyYXdQYXltZW50LG5ld0Ftb3VudCk7XG5jb25zdCBwYXltZW50PW1pbnRSZWNvdmVyeVB1cnNlLndpdGhkcmF3KG5ld0Ftb3VudCk7XG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUFmdGVyPW1pbnRSZWNvdmVyeVB1cnNlLmdldEN1cnJlbnRBbW91bnQoKTtcbmFzc2VydChrZXlFUShtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZSxtaW50UmVjb3ZlcnlQdXJzZUFmdGVyKSk7XG5yZXR1cm4gcGF5bWVudDtcbiB9fSk7XG5cblxuY29uc3QgaXNzdWVyS2l0PWhhcmRlbih7aXNzdWVyLG1pbnQsYnJhbmQsbWludFJlY292ZXJ5UHVyc2V9KTtcbnJldHVybiBpc3N1ZXJLaXQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRMZWRnZXIocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50TGVkZ2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50TGVkZ2VyIjpbInByZXBhcmVQYXltZW50TGVkZ2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB3E0Qq6EAAAuhAAACEAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcHVyc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vdHJhbnNpZW50Tm90aWZpZXIuanMiLCIuL2Ftb3VudFN0b3JlLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVB1cnNlS2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sbWFrZUNvcHlTZXQsQW1vdW50TWF0aCxtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQsbWFrZUFtb3VudFN0b3JlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIi4vdHJhbnNpZW50Tm90aWZpZXIuanNcIiwgW1tcIm1ha2VUcmFuc2llbnROb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudFN0b3JlLmpzXCIsIFtbXCJtYWtlQW1vdW50U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZUFtb3VudFN0b3JlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBFTVBUWV9DT1BZX1NFVD1tYWtlQ29weVNldChbXSk7XG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQdXJzZUtpbmQ9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbnB1cnNlTWV0aG9kcyxcbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk9Plxue1xuY29uc3QgYW1vdW50U2hhcGU9YnJhbmQuZ2V0QW1vdW50U2hhcGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3R7cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZTp1cGRhdGVCYWxhbmNlfT1tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVjb3ZlcnlTZXQ9KHN0YXRlKT0+e1xuY29uc3R7cmVjb3ZlcnlTZXR9PXN0YXRlO1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0naGFzUmVjb3ZlcnlTZXRzJyl7XG5yZXR1cm4gcmVjb3ZlcnlTZXQ7XG4gfWVsc2V7XG5yZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cyd8fFxuRmFpbCBgcmVjb3ZlclNldHNTdGF0ZSBtdXN0IGJlIG5vUmVjb3ZlcnlTZXRzIGlmIGl0IGlzbid0IGhhc1JlY292ZXJTZXRzYDtcbnBheW1lbnRSZWNvdmVyeVNldHMhPT11bmRlZmluZWR8fFxuRmFpbCBgcGF5bWVudFJlY292ZXJ5U2V0cyBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkYDtcbnJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgV2l0aCBub1JlY292ZXJ5U2V0cywgcmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG5cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2RlcG9zaXRJbnRlcm5hbCx3aXRoZHJhd0ludGVybmFsfT1wdXJzZU1ldGhvZHM7XG5jb25zdCBtYWtlUHVyc2VLaXQ9aXNzdWVyWm9uZS5leG9DbGFzc0tpdChcbiBgJHtuYW1lfSBQdXJzZWAsXG5QdXJzZUlLaXQsXG4oKT0+e1xuY29uc3QgY3VycmVudEJhbGFuY2U9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY292ZXJ5U2V0PWlzc3VlclpvbmUuZGV0YWNoZWQoKS5zZXRTdG9yZSgncmVjb3Zlcnkgc2V0Jyk7XG5cbnJldHVybntcbmN1cnJlbnRCYWxhbmNlLFxucmVjb3ZlcnlTZXR9O1xuXG4gfSxcbntcbnB1cnNlOntcbmRlcG9zaXQoc3JjUGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9ZGVwb3NpdEludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlKTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH0sXG53aXRoZHJhdyhhbW91bnQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5cbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBwYXltZW50PXdpdGhkcmF3SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5hbW91bnQsXG5vcHRSZWNvdmVyeVNldCk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBwYXltZW50O1xuIH0sXG5nZXRDdXJyZW50QW1vdW50KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG5yZXR1cm4gYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpO1xuIH0sXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXIoKXtcbnJldHVybiBwcm92aWRlTm90aWZpZXIodGhpcy5mYWNldHMucHVyc2UpO1xuIH0sXG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuXG5nZXREZXBvc2l0RmFjZXQoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5kZXBvc2l0RmFjZXQ7XG4gfSxcblxuZ2V0UmVjb3ZlcnlTZXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRU1QVFlfQ09QWV9TRVQ7XG4gfVxucmV0dXJuIG9wdFJlY292ZXJ5U2V0LnNuYXBzaG90KCk7XG4gfSxcbnJlY292ZXJBbGwoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmxldCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGFtb3VudDsvL1xuIH1cbmZvcihjb25zdCBwYXltZW50IG9mIG9wdFJlY292ZXJ5U2V0LmtleXMoKSl7XG4vL1xuLy9cbmNvbnN0IGRlbHRhPWZhY2V0cy5wdXJzZS5kZXBvc2l0KHBheW1lbnQpO1xuYW1vdW50PUFtb3VudE1hdGguYWRkKGFtb3VudCxkZWx0YSxicmFuZCk7XG4gfVxub3B0UmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBpbnRlcm5hbDogUmVtYWluaW5nIHVucmVjb3ZlcmVkIHBheW1lbnRzOiAke2ZhY2V0cy5wdXJzZS5nZXRSZWNvdmVyeVNldCgpfWA7XG5yZXR1cm4gYW1vdW50O1xuIH19LFxuXG5kZXBvc2l0RmFjZXQ6e1xucmVjZWl2ZSguLi5hcmdzKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdXJzZS5kZXBvc2l0KC4uLmFyZ3MpO1xuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOntcbmN1cnJlbnRCYWxhbmNlOmFtb3VudFNoYXBlLFxucmVjb3ZlcnlTZXQ6TS5yZW1vdGFibGUoJ3JlY292ZXJ5U2V0Jyl9fSk7XG5cblxuXG5yZXR1cm4oKT0+bWFrZVB1cnNlS2l0KCkucHVyc2U7XG4gfTskaM2PX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKmWPI1gUAANYFAAAtAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByb3ZpZGVMYXp5LG1ha2VOb3RpZmllcktpdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRozY9fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAASMHBOzBgAAMwYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLG1hdGNoZXMsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3QgICAgICAgIEJyYW5kU2hhcGU9TS5yZW1vdGFibGUoJ0JyYW5kJyk7JGjNj19vbmNlLkJyYW5kU2hhcGUoQnJhbmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyU2hhcGU9TS5yZW1vdGFibGUoJ0lzc3VlcicpOyRozY9fb25jZS5Jc3N1ZXJTaGFwZShJc3N1ZXJTaGFwZSk7XG5jb25zdCAgICAgICAgUGF5bWVudFNoYXBlPU0ucmVtb3RhYmxlKCdQYXltZW50Jyk7JGjNj19vbmNlLlBheW1lbnRTaGFwZShQYXltZW50U2hhcGUpO1xuY29uc3QgICAgICAgIFB1cnNlU2hhcGU9TS5yZW1vdGFibGUoJ1B1cnNlJyk7JGjNj19vbmNlLlB1cnNlU2hhcGUoUHVyc2VTaGFwZSk7XG5jb25zdCAgICAgICAgRGVwb3NpdEZhY2V0U2hhcGU9TS5yZW1vdGFibGUoJ0RlcG9zaXRGYWNldCcpOyRozY9fb25jZS5EZXBvc2l0RmFjZXRTaGFwZShEZXBvc2l0RmFjZXRTaGFwZSk7XG5jb25zdCAgICAgICAgTm90aWZpZXJTaGFwZT1NLnJlbW90YWJsZSgnTm90aWZpZXInKTskaM2PX29uY2UuTm90aWZpZXJTaGFwZShOb3RpZmllclNoYXBlKTtcbmNvbnN0ICAgICAgICBNaW50U2hhcGU9TS5yZW1vdGFibGUoJ01pbnQnKTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLk1pbnRTaGFwZShNaW50U2hhcGUpO1xuY29uc3QgTmF0VmFsdWVTaGFwZT1NLm5hdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weVNldFZhbHVlU2hhcGU9TS5zZXQoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFNldFZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5QmFnVmFsdWVTaGFwZT1NLmJhZygpO1xuXG5jb25zdCBBbW91bnRWYWx1ZVNoYXBlPU0ub3IoXG5OYXRWYWx1ZVNoYXBlLFxuQ29weVNldFZhbHVlU2hhcGUsXG5TZXRWYWx1ZVNoYXBlLFxuQ29weUJhZ1ZhbHVlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBBbW91bnRTaGFwZT17YnJhbmQ6QnJhbmRTaGFwZSx2YWx1ZTpBbW91bnRWYWx1ZVNoYXBlfTskaM2PX29uY2UuQW1vdW50U2hhcGUoQW1vdW50U2hhcGUpO1xuaGFyZGVuKEFtb3VudFNoYXBlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFtb3VudFBhdHRlcm5TaGFwZT1NLnBhdHRlcm4oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5BbW91bnRQYXR0ZXJuU2hhcGUoQW1vdW50UGF0dGVyblNoYXBlKTtcbmNvbnN0ICAgICAgICBSYXRpb1NoYXBlPXtudW1lcmF0b3I6QW1vdW50U2hhcGUsZGVub21pbmF0b3I6QW1vdW50U2hhcGV9OyRozY9fb25jZS5SYXRpb1NoYXBlKFJhdGlvU2hhcGUpO1xuaGFyZGVuKFJhdGlvU2hhcGUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc05hdFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsTmF0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzTmF0VmFsdWUoaXNOYXRWYWx1ZSk7XG5oYXJkZW4oaXNOYXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weVNldFZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlTZXRWYWx1ZShpc0NvcHlTZXRWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5U2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsU2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzU2V0VmFsdWUoaXNTZXRWYWx1ZSk7XG5oYXJkZW4oaXNTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZ1ZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weUJhZ1ZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlCYWdWYWx1ZShpc0NvcHlCYWdWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5QmFnVmFsdWUpO1xuXG4vL1xuY29uc3QgICAgICAgIE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUz0xMDA7JGjNj19vbmNlLk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyhNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpO1xuXG5jb25zdCAgICAgICAgQXNzZXRLaW5kU2hhcGU9TS5vcignbmF0Jywnc2V0JywnY29weVNldCcsJ2NvcHlCYWcnKTskaM2PX29uY2UuQXNzZXRLaW5kU2hhcGUoQXNzZXRLaW5kU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRGlzcGxheUluZm9TaGFwZT1NLnNwbGl0UmVjb3JkKFxue30sXG57XG5kZWNpbWFsUGxhY2VzOk0uYW5kKFxuTS5ndGUoLU1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyksXG5NLmx0ZShNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpKSxcblxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue1xuLy9cbi8vXG59KTskaM2PX29uY2UuRGlzcGxheUluZm9TaGFwZShEaXNwbGF5SW5mb1NoYXBlKTtcblxuXG5jb25zdCAgICAgICAgSXNzdWVyS2l0U2hhcGU9e1xuYnJhbmQ6QnJhbmRTaGFwZSxcbm1pbnQ6TWludFNoYXBlLFxubWludFJlY292ZXJ5UHVyc2U6UHVyc2VTaGFwZSxcbmlzc3VlcjpJc3N1ZXJTaGFwZSxcbmRpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9OyRozY9fb25jZS5Jc3N1ZXJLaXRTaGFwZShJc3N1ZXJLaXRTaGFwZSk7XG5cbmhhcmRlbihJc3N1ZXJLaXRTaGFwZSk7XG5cbi8vXG5cbmNvbnN0ICAgICAgICBCcmFuZEk9TS5pbnRlcmZhY2UoJ0JyYW5kJyx7XG5pc015SXNzdWVyOk0uY2FsbFdoZW4oTS5hd2FpdChJc3N1ZXJTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5nZXRBbW91bnRTaGFwZTpNLmNhbGwoKS5yZXR1cm5zKE0ucGF0dGVybigpKX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuQnJhbmRJKEJyYW5kSSk7XG5jb25zdCAgICAgICAgbWFrZUlzc3VlckludGVyZmFjZXM9KFxuYnJhbmRTaGFwZT1CcmFuZFNoYXBlLFxuYXNzZXRLaW5kU2hhcGU9QXNzZXRLaW5kU2hhcGUsXG5hbW91bnRTaGFwZT1BbW91bnRTaGFwZSk9Plxue1xuY29uc3QgSXNzdWVyST1NLmludGVyZmFjZSgnSXNzdWVyJyx7XG5nZXRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldEFzc2V0S2luZDpNLmNhbGwoKS5yZXR1cm5zKGFzc2V0S2luZFNoYXBlKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5tYWtlRW1wdHlQdXJzZTpNLmNhbGwoKS5yZXR1cm5zKFB1cnNlU2hhcGUpLFxuXG5pc0xpdmU6TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QW1vdW50T2Y6TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuYnVybjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBNaW50ST1NLmludGVyZmFjZSgnTWludCcse1xuZ2V0SXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxubWludFBheW1lbnQ6TS5jYWxsKGFtb3VudFNoYXBlKS5yZXR1cm5zKFBheW1lbnRTaGFwZSl9KTtcblxuXG5jb25zdCBQYXltZW50ST1NLmludGVyZmFjZSgnUGF5bWVudCcse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSl9KTtcblxuXG5jb25zdCBQdXJzZUk9TS5pbnRlcmZhY2UoJ1B1cnNlJyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnQ6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXI6TS5jYWxsKCkucmV0dXJucyhOb3RpZmllclNoYXBlKSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXBvc2l0Ok0uY2FsbChQYXltZW50U2hhcGUpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0RGVwb3NpdEZhY2V0Ok0uY2FsbCgpLnJldHVybnMoRGVwb3NpdEZhY2V0U2hhcGUpLFxud2l0aGRyYXc6TS5jYWxsKGFtb3VudFNoYXBlKS5yZXR1cm5zKFBheW1lbnRTaGFwZSksXG5nZXRSZWNvdmVyeVNldDpNLmNhbGwoKS5yZXR1cm5zKE0uc2V0T2YoUGF5bWVudFNoYXBlKSksXG5yZWNvdmVyQWxsOk0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgRGVwb3NpdEZhY2V0ST1NLmludGVyZmFjZSgnRGVwb3NpdEZhY2V0Jyx7XG5yZWNlaXZlOmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChQdXJzZUkpLm1ldGhvZEd1YXJkcy5kZXBvc2l0fSk7XG5cblxuY29uc3QgUHVyc2VJS2l0PXtcbnB1cnNlOlB1cnNlSSxcbmRlcG9zaXRGYWNldDpEZXBvc2l0RmFjZXRJfTtcblxuaGFyZGVuKFB1cnNlSUtpdCk7XG5cbnJldHVybiBoYXJkZW4oe1xuSXNzdWVySSxcbk1pbnRJLFxuUGF5bWVudEksXG5QdXJzZUlLaXR9KTtcblxuIH07JGjNj19vbmNlLm1ha2VJc3N1ZXJJbnRlcmZhY2VzKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbmhhcmRlbihtYWtlSXNzdWVySW50ZXJmYWNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmFuZFNoYXBlIjpbIkJyYW5kU2hhcGUiXSwiSXNzdWVyU2hhcGUiOlsiSXNzdWVyU2hhcGUiXSwiUGF5bWVudFNoYXBlIjpbIlBheW1lbnRTaGFwZSJdLCJQdXJzZVNoYXBlIjpbIlB1cnNlU2hhcGUiXSwiRGVwb3NpdEZhY2V0U2hhcGUiOlsiRGVwb3NpdEZhY2V0U2hhcGUiXSwiTm90aWZpZXJTaGFwZSI6WyJOb3RpZmllclNoYXBlIl0sIk1pbnRTaGFwZSI6WyJNaW50U2hhcGUiXSwiQW1vdW50U2hhcGUiOlsiQW1vdW50U2hhcGUiXSwiQW1vdW50UGF0dGVyblNoYXBlIjpbIkFtb3VudFBhdHRlcm5TaGFwZSJdLCJSYXRpb1NoYXBlIjpbIlJhdGlvU2hhcGUiXSwiaXNOYXRWYWx1ZSI6WyJpc05hdFZhbHVlIl0sImlzQ29weVNldFZhbHVlIjpbImlzQ29weVNldFZhbHVlIl0sImlzU2V0VmFsdWUiOlsiaXNTZXRWYWx1ZSJdLCJpc0NvcHlCYWdWYWx1ZSI6WyJpc0NvcHlCYWdWYWx1ZSJdLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiOlsiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIl0sIkFzc2V0S2luZFNoYXBlIjpbIkFzc2V0S2luZFNoYXBlIl0sIkRpc3BsYXlJbmZvU2hhcGUiOlsiRGlzcGxheUluZm9TaGFwZSJdLCJJc3N1ZXJLaXRTaGFwZSI6WyJJc3N1ZXJLaXRTaGFwZSJdLCJCcmFuZEkiOlsiQnJhbmRJIl0sIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIjpbIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFbRVxHpGQAA6RkAACcAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY2FsbGJhY2suanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FsbEUiLCJjYWxsU3luYyIsImlzQ2FsbGJhY2siLCJtYWtlRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VNZXRob2RDYWxsYmFjayIsIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siLCJwcmVwYXJlQXR0ZW51YXRvciIsInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU1ldGhvZEtleXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbFN5bmMoY2FsbFN5bmMpO1xuaGFyZGVuKGNhbGxTeW5jKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxFPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRSh0YXJnZXQpKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBFKHRhcmdldClbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbEUoY2FsbEUpO1xuaGFyZGVuKGNhbGxFKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbnR5cGVvZiB0YXJnZXQ9PT0nZnVuY3Rpb24nfHxcbkZhaWwgYHN5bmMgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbjogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlRnVuY3Rpb25DYWxsYmFjayhtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYHN5bmMgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY01ldGhvZENhbGxiYWNrKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fEZhaWwgYG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjNj19vbmNlLmlzQ2FsbGJhY2soaXNDYWxsYmFjayk7XG5oYXJkZW4oaXNDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQXR0ZW51YXRvcj0oXG56b25lLFxubWV0aG9kTmFtZXMsXG57aW50ZXJmYWNlR3VhcmQsdGFnPSdBdHRlbnVhdG9yJ309e30pPT5cbntcbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ldGhvZHM9LyogICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5tZXRob2ROYW1lcy5tYXAoKGtleSk9Pntcbi8vXG5pZighaXNQcm9wZXJ0eUtleShrZXkpKXtcbnRocm93IEZhaWwgYGtleSAke3Eoa2V5KX0gaXMgbm90IGEgUHJvcGVydHlLZXlgO1xuIH1cblxuY29uc3QgbT0vKiAgICAgICAgICAgICAgICAgICove1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9cbltrZXldKC4uLmFyZ3Mpe1xuLy9cbmNvbnN0IGNiPXRoaXMuc3RhdGUuY2JzW2tleV07XG5pZighY2Ipe1xuY29uc3QgZXJyPW1ha2VFcnJvciggYHVuaW1wbGVtZW50ZWQgJHtxKHRhZyl9IG1ldGhvZCAke3Eoa2V5KX1gKTtcbmlmKHRoaXMuc3RhdGUuaXNTeW5jKXtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiB9XG5pZihjYi5pc1N5bmMpe1xucmV0dXJuIGNhbGxTeW5jKGNiLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBjYWxsRShjYiwuLi5hcmdzKTtcbiB9fVtcbmtleV07XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICovW2tleSxtXSk7XG4gfSkpO1xuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUF0dGVudWF0b3I9em9uZS5leG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuLypcblxuXG5cblxuICAgICAqL1xuKHtcbnRhcmdldD1udWxsLFxuaXNTeW5jPWZhbHNlLFxub3ZlcnJpZGVzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9fSk9Plxue1xuY29uc3QgY2JzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9O1xuXG5jb25zdCByZW1haW5pbmc9bmV3IFNldChtZXRob2ROYW1lcyk7XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMob3ZlcnJpZGVzKSl7XG5yZW1haW5pbmcuaGFzKGtleSl8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIG5vdCBhbGxvd2VkIGJ5IG1ldGhvZE5hbWVzYDtcblxucmVtYWluaW5nLmRlbGV0ZShrZXkpO1xuY29uc3QgY2I9b3ZlcnJpZGVzW2tleV07XG5jYj09bnVsbHx8XG5pc0NhbGxiYWNrKGNiKXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gaXMgbm90IGEgY2FsbGJhY2s7IGdvdCAke2NifWA7XG5jYnNba2V5XT1jYjtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIHJlbWFpbmluZyl7XG5pZihpc1N5bmMpe1xuY2JzW2tleV09bWFrZVN5bmNNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9ZWxzZXtcbmNic1trZXldPW1ha2VNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7Y2JzLGlzU3luY30pO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICovbWV0aG9kcyk7XG5cbnJldHVybiBtYWtlQXR0ZW51YXRvcjtcbiB9OyRozY9fb25jZS5wcmVwYXJlQXR0ZW51YXRvcihwcmVwYXJlQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUF0dGVudWF0b3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3I9KHpvbmUsaW50ZXJmYWNlR3VhcmQsb3B0cz17fSk9PntcbmNvbnN0IG1ldGhvZE5hbWVzPWdldEludGVyZmFjZU1ldGhvZEtleXMoaW50ZXJmYWNlR3VhcmQpO1xuY29uc3QgbWFrZUF0dGVudWF0b3I9cHJlcGFyZUF0dGVudWF0b3Ioem9uZSxtZXRob2ROYW1lcyx7XG4uLi5vcHRzLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUF0dGVudWF0b3IpO1xuIH07JGjNj19vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADID/RnNBQAAzQUAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEJyaWRnZUlkPS8qICAgICAgICAgICAgICAgICove1xuQkFOSzonYmFuaycsXG5DT1JFOidjb3JlJyxcbkRJQkM6J2RpYmMnLFxuU1RPUkFHRTonc3RvcmFnZScsXG5QUk9WSVNJT046J3Byb3Zpc2lvbicsXG5QUk9WSVNJT05fU01BUlRfV0FMTEVUOidwcm92aXNpb25XYWxsZXQnLFxuVkxPQ0FMQ0hBSU46J3Zsb2NhbGNoYWluJyxcblZUUkFOU0ZFUjondnRyYW5zZmVyJyxcbldBTExFVDond2FsbGV0J307JGjNj19vbmNlLkJyaWRnZUlkKEJyaWRnZUlkKTtcblxuaGFyZGVuKEJyaWRnZUlkKTtcblxuY29uc3QgICAgICAgIENvc21vc0luaXRLZXlUb0JyaWRnZUlkPXtcbnZiYW5rUG9ydDpCcmlkZ2VJZC5CQU5LLFxudmliY1BvcnQ6QnJpZGdlSWQuRElCQ307JGjNj19vbmNlLkNvc21vc0luaXRLZXlUb0JyaWRnZUlkKENvc21vc0luaXRLZXlUb0JyaWRnZUlkKTtcblxuXG5jb25zdCAgICAgICAgV2FsbGV0TmFtZT0vKiAgICAgICAgICAgICAgICAqL3tcbmRlcG9zaXRGYWNldDonZGVwb3NpdEZhY2V0J307JGjNj19vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaM2PX29uY2UuVkJhbmtBY2NvdW50KFZCYW5rQWNjb3VudCk7XG5cblxuaGFyZGVuKFZCYW5rQWNjb3VudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmlkZ2VJZCI6WyJCcmlkZ2VJZCJdLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCI6WyJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCJdLCJXYWxsZXROYW1lIjpbIldhbGxldE5hbWUiXSwiVkJhbmtBY2NvdW50IjpbIlZCYW5rQWNjb3VudCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcqLSXSAQAAEgEAAAkAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2RlYnVnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlVHJhY2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG5sZXQgZGVidWdJbnN0YW5jZT0xO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUcmFjZXI9KG5hbWUsZW5hYmxlPXRydWUpPT57XG5kZWJ1Z0luc3RhbmNlKz0xO1xubGV0IGRlYnVnQ291bnQ9MTtcbmNvbnN0IGtleT0gYC0tLS0tICR7bmFtZX0uJHtkZWJ1Z0luc3RhbmNlfSBgO1xuLy9cbnN3aXRjaChlbmFibGUpe1xuY2FzZSBmYWxzZTp7XG5jb25zdCBsb2dEaXNhYmxlZD0oLi4uX2FyZ3MpPT57IH07XG5yZXR1cm4gbG9nRGlzYWJsZWQ7XG4gfVxuY2FzZSd2ZXJib3NlJzp7XG5jb25zdCBpbmZvVGljaz0ob3B0TG9nLC4uLmFyZ3MpPT57XG5pZihvcHRMb2cubG9nKXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gaW5mb1RpY2s7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBkZWJ1Z1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5vcHRMb2cubG9nKGtleSxkZWJ1Z0NvdW50Kz0xLC4uLmFyZ3MpO1xuIH1lbHNle1xuY29uc29sZS5pbmZvKGtleSxkZWJ1Z0NvdW50Kz0xLG9wdExvZywuLi5hcmdzKTtcbiB9XG4gfTtcbnJldHVybiBkZWJ1Z1RpY2s7XG4gfX1cblxuIH07JGjNj19vbmNlLm1ha2VUcmFjZXIobWFrZVRyYWNlcik7XG5oYXJkZW4obWFrZVRyYWNlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVHJhY2VyIjpbIm1ha2VUcmFjZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAtXgwo4CAACOAgAAJQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9lcnJvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiTm9uTnVsbGlzaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBOb25OdWxsaXNoPSh2YWwsb3B0RGV0YWlscz0gYHVuZXhwZWN0ZWQgJHtxKHZhbCl9YCk9PntcbmlmKHZhbCE9bnVsbCl7XG4vL1xucmV0dXJuIHZhbDtcbiB9XG5hc3NlcnQuZmFpbChvcHREZXRhaWxzKTtcbiB9OyRozY9fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB/2q4QLBQAACwUAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2NvbmZpZy5qcyIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vanMtdXRpbHMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vc2VzLXV0aWxzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2NvbmZpZy5qc1wiLCBbXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbXV0sW1wiLi9lcnJvcnMuanNcIiwgW11dLFtcIi4vanMtdXRpbHMuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3Nlcy11dGlscy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADML6bVHwcAAB8HAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2pzLXV0aWxzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWVwQ29weUpzb25hYmxlIiwiZGVlcE1hcE9iamVjdCIsIm1ha2VNZWFzdXJlU2Vjb25kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwQ29weUpzb25hYmxlPSh2YWx1ZSk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcENvcHlKc29uYWJsZShkZWVwQ29weUpzb25hYmxlKTtcbmNvbnN0IGRlZXBNYXBPYmplY3RJbnRlcm5hbD0odmFsdWUsbmFtZSxjb250YWluZXIsbWFwcGVyKT0+e1xuaWYoY29udGFpbmVyJiZ0eXBlb2YgbmFtZT09PSdzdHJpbmcnKXtcbmNvbnN0IG1hcHBlZD1tYXBwZXIodmFsdWUsbmFtZSxjb250YWluZXIpO1xuaWYobWFwcGVkIT09dmFsdWUpe1xucmV0dXJuIG1hcHBlZDtcbiB9XG4gfVxuXG5pZih0eXBlb2YgdmFsdWUhPT0nb2JqZWN0J3x8IXZhbHVlKXtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbmxldCB3YXNNYXBwZWQ9ZmFsc2U7XG5jb25zdCBtYXBwZWRFbnRyaWVzPU9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtpbm5lck5hbWUsaW5uZXJWYWx1ZV0pPT57XG5jb25zdCBtYXBwZWRJbm5lclZhbHVlPWRlZXBNYXBPYmplY3RJbnRlcm5hbChcbmlubmVyVmFsdWUsXG5pbm5lck5hbWUsXG52YWx1ZSxcbm1hcHBlcik7XG5cbndhc01hcHBlZHx8PW1hcHBlZElubmVyVmFsdWUhPT1pbm5lclZhbHVlO1xucmV0dXJuW2lubmVyTmFtZSxtYXBwZWRJbm5lclZhbHVlXTtcbiB9KTtcblxucmV0dXJuIHdhc01hcHBlZD9PYmplY3QuZnJvbUVudHJpZXMobWFwcGVkRW50cmllcyk6dmFsdWU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0ICAgICAgICBtYWtlTWVhc3VyZVNlY29uZHM9KGN1cnJlbnRUaW1lTWlsbGlzZWMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07JGjNj19vbmNlLm1ha2VNZWFzdXJlU2Vjb25kcyhtYWtlTWVhc3VyZVNlY29uZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcENvcHlKc29uYWJsZSI6WyJkZWVwQ29weUpzb25hYmxlIl0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJtYWtlTWVhc3VyZVNlY29uZHMiOlsibWFrZU1lYXN1cmVTZWNvbmRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZtFKvTFQAA0xUAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiLCIuL2NhbGxiYWNrLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q2FwRGF0YSIsImFzc2VydFBhdGhTZWdtZW50IiwiaXNTdHJlYW1DZWxsIiwibWFrZUNoYWluU3RvcmFnZVJvb3QiLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIiwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUsRmFyLE0sbWFrZUhlYXBab25lLGNiOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanNcIiwgW1tcIm1ha2VIZWFwWm9uZVwiLCBbJGjNj19hID0+IChtYWtlSGVhcFpvbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NhbGxiYWNrLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNiID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZUNoYWluU3RvcmFnZVJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VDaGFpblN0b3JhZ2VSb290XCJ9KTskaM2PX29uY2UubWFrZUNoYWluU3RvcmFnZVJvb3QobWFrZUNoYWluU3RvcmFnZVJvb3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlU3RvcmFnZU5vZGVDaGlsZCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVN0b3JhZ2VOb2RlQ2hpbGRcIn0pOyRozY9fb25jZS5tYWtlU3RvcmFnZU5vZGVDaGlsZChtYWtlU3RvcmFnZU5vZGVDaGlsZCk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgQ2hhaW5TdG9yYWdlTm9kZUk9TS5pbnRlcmZhY2UoJ1N0b3JhZ2VOb2RlJyx7XG5zZXRWYWx1ZTpNLmNhbGxXaGVuKE0uc3RyaW5nKCkpLnJldHVybnMoKSxcbmdldFBhdGg6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldFN0b3JlS2V5Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxubWFrZUNoaWxkTm9kZTpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnNwbGl0UmVjb3JkKHt9LHtzZXF1ZW5jZTpNLmJvb2xlYW4oKX0se30pKS5cbnJldHVybnMoTS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJykpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU3RyZWFtQ2VsbD0oY2VsbCk9PlxuY2VsbCYmXG50eXBlb2YgY2VsbD09PSdvYmplY3QnJiZcbkFycmF5LmlzQXJyYXkoY2VsbC52YWx1ZXMpJiZcbnR5cGVvZiBjZWxsLmJsb2NrSGVpZ2h0PT09J3N0cmluZycmJlxuL14wJHxeWzEtOV1bMC05XSokLy50ZXN0KGNlbGwuYmxvY2tIZWlnaHQpOyRozY9fb25jZS5pc1N0cmVhbUNlbGwoaXNTdHJlYW1DZWxsKTtcbmhhcmRlbihpc1N0cmVhbUNlbGwpO1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07JGjNj19vbmNlLmFzc2VydENhcERhdGEoYXNzZXJ0Q2FwRGF0YSk7XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwYXRoU2VnbWVudFBhdHRlcm49L15bYS16QS1aMC05Xy1dezEsMTAwfSQvO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGF0aFNlZ21lbnQ9KG5hbWUpPT57XG5wYXRoU2VnbWVudFBhdHRlcm4udGVzdChuYW1lKXx8XG5GYWlsIGBQYXRoIHNlZ21lbnQgbmFtZXMgbXVzdCBjb25zaXN0IG9mIDEgdG8gMTAwIGNoYXJhY3RlcnMgbGltaXRlZCB0byBBU0NJSSBhbHBoYW51bWVyaWNzLCB1bmRlcnNjb3JlcywgYW5kL29yIGRhc2hlczogJHtuYW1lfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UGF0aFNlZ21lbnQoYXNzZXJ0UGF0aFNlZ21lbnQpO1xuaGFyZGVuKGFzc2VydFBhdGhTZWdtZW50KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUNoYWluU3RvcmFnZU5vZGU9KHpvbmUpPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQ2hhaW5TdG9yYWdlTm9kZT16b25lLmV4b0NsYXNzKFxuJ0NoYWluU3RvcmFnZU5vZGUnLFxuQ2hhaW5TdG9yYWdlTm9kZUksXG4vKlxuXG5cblxuXG5cblxuICAgICAqL1xuKG1lc3NlbmdlcixwYXRoLHtzZXF1ZW5jZT1mYWxzZX09e30pPT57XG5hc3NlcnQudHlwZW9mKHBhdGgsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihzZXF1ZW5jZSwnYm9vbGVhbicpO1xucmV0dXJuIGhhcmRlbih7cGF0aCxtZXNzZW5nZXIsc2VxdWVuY2V9KTtcbiB9LFxue1xuZ2V0UGF0aCgpe1xucmV0dXJuIHRoaXMuc3RhdGUucGF0aDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JlS2V5KCl7XG5jb25zdHtwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbnJldHVybiBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOidnZXRTdG9yZUtleScsXG5hcmdzOltwYXRoXX0pO1xuXG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xubWFrZUNoaWxkTm9kZShuYW1lLGNoaWxkTm9kZU9wdGlvbnM9e30pe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnRQYXRoU2VnbWVudChuYW1lKTtcbmNvbnN0IG1lcmdlZE9wdGlvbnM9e3NlcXVlbmNlLC4uLmNoaWxkTm9kZU9wdGlvbnN9O1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlKFxubWVzc2VuZ2VyLFxuIGAke3BhdGh9LiR7bmFtZX1gLFxubWVyZ2VkT3B0aW9ucyk7XG5cbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHNldFZhbHVlKHZhbHVlKXtcbmNvbnN0e3NlcXVlbmNlLHBhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbnRyeTtcbmlmKCFzZXF1ZW5jZSYmIXZhbHVlKXtcbmVudHJ5PVtwYXRoXTtcbiB9ZWxzZXtcbmVudHJ5PVtwYXRoLHZhbHVlXTtcbiB9XG5hd2FpdCBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOnNlcXVlbmNlPydhcHBlbmQnOidzZXQnLFxuYXJnczpbZW50cnldfSk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xufSk7XG5cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlTm9kZTtcbiB9OyRozY9fb25jZS5wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSk7XG5cbmNvbnN0IG1ha2VIZWFwQ2hhaW5TdG9yYWdlTm9kZT1wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShtYWtlSGVhcFpvbmUoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZUNoYWluU3RvcmFnZVJvb3QoXG5oYW5kbGVTdG9yYWdlTWVzc2FnZSxcbnJvb3RQYXRoLFxucm9vdE9wdGlvbnM9e30pXG57XG5jb25zdCBtZXNzZW5nZXI9Y2IubWFrZUZ1bmN0aW9uQ2FsbGJhY2soaGFuZGxlU3RvcmFnZU1lc3NhZ2UpO1xuXG4vL1xuY29uc3Qgcm9vdE5vZGU9bWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlKG1lc3Nlbmdlcixyb290UGF0aCxyb290T3B0aW9ucyk7XG5yZXR1cm4gcm9vdE5vZGU7XG4gfVxuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZU51bGxTdG9yYWdlTm9kZT0oKT0+e1xuLy9cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbkZhcignTnVsbE1lc3NlbmdlcicsKCk9Pm51bGwpLFxuJ251bGwnKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIG1ha2VTdG9yYWdlTm9kZUNoaWxkKHN0b3JhZ2VOb2RlUmVmLGNoaWxkTmFtZSl7XG5jb25zdCBleGlzdGluZ1N0b3JhZ2VOb2RlPWF3YWl0IHN0b3JhZ2VOb2RlUmVmO1xuY29uc3Qgc3RvcmFnZU5vZGU9ZXhpc3RpbmdTdG9yYWdlTm9kZXx8bWFrZU51bGxTdG9yYWdlTm9kZSgpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGROYW1lKTtcbiB9XG5oYXJkZW4obWFrZVN0b3JhZ2VOb2RlQ2hpbGQpO1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXJpYWxpemVUb1N0b3JhZ2U9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5yZXR1cm4gYXN5bmModmFsdWUpPT57XG5jb25zdCBtYXJzaGFsbGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkobWFyc2hhbGxlZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG4gfTtcbiB9OyRozY9fb25jZS5tYWtlU2VyaWFsaXplVG9TdG9yYWdlKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNTdHJlYW1DZWxsIjpbImlzU3RyZWFtQ2VsbCJdLCJhc3NlcnRDYXBEYXRhIjpbImFzc2VydENhcERhdGEiXSwiYXNzZXJ0UGF0aFNlZ21lbnQiOlsiYXNzZXJ0UGF0aFNlZ21lbnQiXSwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiOlsicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwibWFrZUNoYWluU3RvcmFnZVJvb3QiOlsibWFrZUNoYWluU3RvcmFnZVJvb3QiXSwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiOlsibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiXSwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSI6WyJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALa9IV5rCAAAawgAACsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNPYmplY3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsY3JlYXRlLGZyb21FbnRyaWVzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5cyxhcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmNvbnN0IG93bk5hbWVzPS8qICAgICAgICAgICAgICAqL293bktleXMoZGVzY3MpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duTmFtZXMpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9OyRozY9fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7XG5oYXJkZW4oZ2V0TWV0aG9kTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFN0cmluZ01ldGhvZE5hbWVzPSh2YWwpPT5cbi8qICAgICAgICAgICAgICAgICAgICovXG5nZXRNZXRob2ROYW1lcyh2YWwpLmZpbHRlcigobmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0U3RyaW5nTWV0aG9kTmFtZXMoZ2V0U3RyaW5nTWV0aG9kTmFtZXMpO1xuY29uc3QgICAgICAgIGJpbmRBbGxNZXRob2RzPShvYmopPT5cbmhhcmRlbihcbmNyZWF0ZShcbm9iaixcbmZyb21FbnRyaWVzKFxuZ2V0TWV0aG9kTmFtZXMob2JqKS5tYXAoKG5hbWUpPT5bXG5uYW1lLFxue1xudmFsdWU6KC8qICAgICAgICAgICAgICAgICAgICAqLy4uLmFyZ3MpPT5cbmFwcGx5KG9ialtuYW1lXSxvYmosYXJncyksXG5lbnVtZXJhYmxlOnRydWV9XSkpKSk7JGjNj19vbmNlLmJpbmRBbGxNZXRob2RzKGJpbmRBbGxNZXRob2RzKTtcblxuXG5cblxuXG5oYXJkZW4oYmluZEFsbE1ldGhvZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiOlsiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwiYmluZEFsbE1ldGhvZHMiOlsiYmluZEFsbE1ldGhvZHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmgUfr4YdAACGHQAAKAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zZXMtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vc3RyZWFtIiwiamVzc2llLmpzIl0sImV4cG9ydHMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIiwiYWdncmVnYXRlVHJ5RmluYWxseSIsImFsbFZhbHVlcyIsImFzc2VydEFsbERlZmluZWQiLCJkZWVwbHlGdWxmaWxsZWRPYmplY3QiLCJmb3JldmVyIiwic3luY2hyb25pemVkVGVlIiwidW50aWxUcnVlIiwid2hpbGVUcnVlIiwid2l0aERlZmVycmVkQ2xlYW51cCIsInppcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3IsWCxkZWVwbHlGdWxmaWxsZWQsaXNPYmplY3QsbWFrZVByb21pc2VLaXQsbWFrZVF1ZXVlLGFzeW5jR2VuZXJhdGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkXCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3N0cmVhbVwiLCBbW1wibWFrZVF1ZXVlXCIsIFskaM2PX2EgPT4gKG1ha2VRdWV1ZSA9ICRozY9fYSldXV1dLFtcImplc3NpZS5qc1wiLCBbW1wiYXN5bmNHZW5lcmF0ZVwiLCBbJGjNj19hID0+IChhc3luY0dlbmVyYXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Zyb21FbnRyaWVzLGtleXMsdmFsdWVzfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwbHlGdWxmaWxsZWRPYmplY3Q9YXN5bmMob2JqKT0+e1xuaXNPYmplY3Qob2JqKXx8RmFpbCBgcGFyYW0gbXVzdCBiZSBhbiBvYmplY3RgO1xucmV0dXJuIGRlZXBseUZ1bGZpbGxlZChvYmopO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGRlZXBseUZ1bGZpbGxlZE9iamVjdCk7XG5jb25zdCBtYWtlQWdncmVnYXRlRXJyb3I9XG50eXBlb2YgQWdncmVnYXRlRXJyb3I9PT0nZnVuY3Rpb24nP1xuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT5BZ2dyZWdhdGVFcnJvcihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKTpcbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+e1xucmV0dXJuIG1ha2VFcnJvcihtZXNzYWdlPz8nbXVsdGlwbGUgZXJyb3JzJyx1bmRlZmluZWQse1xuLi4ub3B0aW9ucyxcbmVycm9yc30pO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VBbGxPckVycm9ycz1hc3luYyhpdGVtcyk9PntcbnJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoaXRlbXMpLnRoZW4oKHJlc3VsdHMpPT57XG5jb25zdCBlcnJvcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlc3VsdHMuZmlsdGVyKCh7c3RhdHVzfSk9PnN0YXR1cz09PSdyZWplY3RlZCcpLlxubWFwKChyZXN1bHQpPT5yZXN1bHQucmVhc29uKTtcbmlmKCFlcnJvcnMubGVuZ3RoKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0cy5tYXAoXG4ocmVzdWx0KT0+cmVzdWx0LnZhbHVlKSk7XG5cbiB9ZWxzZSBpZihlcnJvcnMubGVuZ3RoPT09MSl7XG50aHJvdyBlcnJvcnNbMF07XG4gfWVsc2V7XG50aHJvdyBtYWtlQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiB9XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLlByb21pc2VBbGxPckVycm9ycyhQcm9taXNlQWxsT3JFcnJvcnMpO1xuY29uc3QgICAgICAgIGFnZ3JlZ2F0ZVRyeUZpbmFsbHk9YXN5bmModHJpZXIsZmluYWxpemVyKT0+XG50cmllcigpLnRoZW4oXG5hc3luYyhyZXN1bHQpPT5maW5hbGl6ZXIoKS50aGVuKCgpPT5yZXN1bHQpLFxuYXN5bmModHJ5RXJyb3IpPT5cbmZpbmFsaXplcih0cnlFcnJvcikuXG50aGVuKFxuKCk9PnRyeUVycm9yLFxuKGZpbmFsaXplRXJyb3IpPT5tYWtlQWdncmVnYXRlRXJyb3IoW3RyeUVycm9yLGZpbmFsaXplRXJyb3JdKSkuXG5cbnRoZW4oKGVycm9yKT0+UHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFnZ3JlZ2F0ZVRyeUZpbmFsbHkoYWdncmVnYXRlVHJ5RmluYWxseSk7XG5jb25zdCAgICAgICAgd2l0aERlZmVycmVkQ2xlYW51cD1hc3luYyhmbik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2xlYW51cHNMSUZPPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRDbGVhbnVwPShjbGVhbnVwKT0+e1xuY2xlYW51cHNMSUZPLnVuc2hpZnQoY2xlYW51cCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmaW5hbGl6ZXI9YXN5bmMoZXJyKT0+e1xuLy9cbmNvbnN0IGNsZWFudXBSZXN1bHRzPWNsZWFudXBzTElGTy5tYXAoYXN5bmMoY2xlYW51cCk9PntcbmF3YWl0IG51bGw7XG5yZXR1cm4gY2xlYW51cChlcnIpO1xuIH0pO1xuYXdhaXQgUHJvbWlzZUFsbE9yRXJyb3JzKGNsZWFudXBSZXN1bHRzKTtcbiB9O1xucmV0dXJuIGFnZ3JlZ2F0ZVRyeUZpbmFsbHkoKCk9PmZuKGFkZENsZWFudXApLGZpbmFsaXplcik7XG4gfTtcblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLndpdGhEZWZlcnJlZENsZWFudXAod2l0aERlZmVycmVkQ2xlYW51cCk7XG5jb25zdCAgICAgICAgYXNzZXJ0QWxsRGVmaW5lZD0ob2JqKT0+e1xuY29uc3QgbWlzc2luZz1bXTtcbmZvcihjb25zdFtrZXksdmFsXW9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xuaWYodmFsPT09dW5kZWZpbmVkKXtcbm1pc3NpbmcucHVzaChrZXkpO1xuIH1cbiB9XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbkZhaWwgYG1pc3NpbmcgJHtxKG1pc3NpbmcpfWA7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmFzc2VydEFsbERlZmluZWQoYXNzZXJ0QWxsRGVmaW5lZCk7XG5jb25zdCBub3REb25lPWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbHdheXNEb25lPWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG5jb25zdCAgICAgICAgZm9yZXZlcj1hc3luY0dlbmVyYXRlKCgpPT5ub3REb25lKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZm9yZXZlcihmb3JldmVyKTtcbmNvbnN0ICAgICAgICB3aGlsZVRydWU9KHByb2R1Y2UpPT5cbmFzeW5jR2VuZXJhdGUoYXN5bmMoKT0+e1xuY29uc3QgdmFsdWU9YXdhaXQgcHJvZHVjZSgpO1xuaWYoIXZhbHVlKXtcbnJldHVybiBhbHdheXNEb25lO1xuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2Uud2hpbGVUcnVlKHdoaWxlVHJ1ZSk7XG5jb25zdCAgICAgICAgdW50aWxUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKHZhbHVlKXtcbnJldHVybiBoYXJkZW4oe1xuZG9uZTp0cnVlLFxudmFsdWV9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnVudGlsVHJ1ZSh1bnRpbFRydWUpO1xuY29uc3QgICAgICAgIHppcD0oeHMseXMpPT5oYXJkZW4oeHMubWFwKCh4LGkpPT5beCx5c1sraV1dKSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuemlwKHppcCk7XG5jb25zdCAgICAgICAgYWxsVmFsdWVzPWFzeW5jKG9iaik9PntcbmNvbnN0IHJlc29sdmVkPWF3YWl0IFByb21pc2UuYWxsKHZhbHVlcyhvYmopKTtcbi8vXG5yZXR1cm4gaGFyZGVuKGZyb21FbnRyaWVzKHppcChrZXlzKG9iaikscmVzb2x2ZWQpKSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFsbFZhbHVlcyhhbGxWYWx1ZXMpO1xuY29uc3QgICAgICAgIHN5bmNocm9uaXplZFRlZT0oc291cmNlU3RyZWFtLHJlYWRlckNvdW50KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lUmVzdWx0O1xuXG4vKlxuXG5cblxuICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlcz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVsbE5leHQ9YXN5bmMoKT0+e1xuY29uc3QgcmVxdWVzdHM9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlcy5tYXAoKHF1ZXVlKT0+cXVldWUuZ2V0KCkpKTtcbmNvbnN0IHJlamVjdGlvbnM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmVycz1bXTtcbmxldCBkb25lPWZhbHNlO1xuZm9yKGNvbnN0IHNldHRsZWRSZXN1bHQgb2YgcmVxdWVzdHMpe1xuaWYoc2V0dGxlZFJlc3VsdC5zdGF0dXM9PT0ncmVqZWN0ZWQnKXtcbnJlamVjdGlvbnMucHVzaChzZXR0bGVkUmVzdWx0LnJlYXNvbik7XG4gfWVsc2V7XG5kb25lfHw9ISFzZXR0bGVkUmVzdWx0LnZhbHVlLmRvbmU7XG5yZXNvbHZlcnMucHVzaChzZXR0bGVkUmVzdWx0LnZhbHVlLnZhbHVlKTtcbiB9XG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5pZihkb25lUmVzdWx0KXtcbnJlc3VsdD1Qcm9taXNlLnJlc29sdmUoZG9uZVJlc3VsdCk7XG4gfWVsc2UgaWYocmVqZWN0aW9ucy5sZW5ndGgpe1xuY29uc3QgZXJyb3I9bWFrZUVycm9yKFggYFRlZWQgc3RyZWFtIHRocmV3YCk7XG5hbm5vdGF0ZUVycm9yKGVycm9yLFggYFRlZWQgcmVqZWN0aW9uczogJHtyZWplY3Rpb25zfWApO1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnRocm93Py4oZXJyb3IpfHxcblByb21pc2UucmVzb2x2ZShzb3VyY2VTdHJlYW0ucmV0dXJuPy4oKSkudGhlbigoKT0+XG5Qcm9taXNlLnJlamVjdChlcnJvcikpO1xuXG4gfWVsc2UgaWYoZG9uZSl7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0ucmV0dXJuPy4oKXx8XG5Qcm9taXNlLnJlc29sdmUoe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9ZWxzZXtcbnJlc3VsdD1zb3VyY2VTdHJlYW0ubmV4dCgpO1xuIH1cbnJlc3VsdC50aGVuKFxuKHIpPT57XG5pZihyLmRvbmUpe1xuZG9uZVJlc3VsdD1yO1xuIH1cbiB9LFxuKCk9PntcbmRvbmVSZXN1bHQ9e2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9O1xuIH0pO1xuXG5mb3IoY29uc3QgcmVzb2x2ZSBvZiByZXNvbHZlcnMpe1xucmVzb2x2ZShyZXN1bHQpO1xuIH1cbnJldHVybiBwdWxsTmV4dCgpO1xuIH07XG5cbmNvbnN0IHJlYWRlcnM9QXJyYXkuZnJvbSh7bGVuZ3RoOnJlYWRlckNvdW50fSkubWFwKCgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWU9bWFrZVF1ZXVlKCk7XG5xdWV1ZXMucHVzaChxdWV1ZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkZXI9aGFyZGVuKHtcbiAgICAgIGFzeW5jIG5leHQoKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6ZmFsc2V9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyByZXR1cm4oKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6dHJ1ZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHRocm93KHJlYXNvbil7XG5jb25zdCByZWplY3Rpb249UHJvbWlzZS5yZWplY3QocmVhc29uKTtcbnF1ZXVlLnB1dChyZWplY3Rpb24pO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9LFxuLy9cbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiByZWFkZXI7XG4gfSxcbi8vXG4gICAgICBhc3luY1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpe1xuYXdhaXQgcmVhZGVyLnJldHVybigpO1xuIH19KTtcblxucmV0dXJuIHJlYWRlcjtcbiB9KTtcblxudm9pZCBwdWxsTmV4dCgpO1xucmV0dXJuIHJlYWRlcnM7XG4gfTskaM2PX29uY2Uuc3luY2hyb25pemVkVGVlKHN5bmNocm9uaXplZFRlZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWRPYmplY3QiOlsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0Il0sIlByb21pc2VBbGxPckVycm9ycyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiXSwiYWdncmVnYXRlVHJ5RmluYWxseSI6WyJhZ2dyZWdhdGVUcnlGaW5hbGx5Il0sIndpdGhEZWZlcnJlZENsZWFudXAiOlsid2l0aERlZmVycmVkQ2xlYW51cCJdLCJhc3NlcnRBbGxEZWZpbmVkIjpbImFzc2VydEFsbERlZmluZWQiXSwiZm9yZXZlciI6WyJmb3JldmVyIl0sIndoaWxlVHJ1ZSI6WyJ3aGlsZVRydWUiXSwidW50aWxUcnVlIjpbInVudGlsVHJ1ZSJdLCJ6aXAiOlsiemlwIl0sImFsbFZhbHVlcyI6WyJhbGxWYWx1ZXMiXSwic3luY2hyb25pemVkVGVlIjpbInN5bmNocm9uaXplZFRlZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHqlog/QIAAP0CAAAoAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVDaGVjay5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhc3QiLCJtdXN0TWF0Y2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG5jb25zdCAgICAgICAgY2FzdD0oc3BlY2ltZW4scGF0dCk9Pntcbi8vXG4vL1xuLy9cbm11c3RNYXRjaChzcGVjaW1lbixwYXR0KTtcbnJldHVybiBzcGVjaW1lbjtcbiB9OyRozY9fb25jZS5jYXN0KGNhc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJjYXN0IjpbImNhc3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAopUBEE4DAABOAwAAKQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiU3RvcmFnZU5vZGVTaGFwZSIsIlVuZ3VhcmRlZEhlbHBlckkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIFN0b3JhZ2VOb2RlU2hhcGU9TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5TdG9yYWdlTm9kZVNoYXBlKFN0b3JhZ2VOb2RlU2hhcGUpO1xuY29uc3QgICAgICAgIFVuZ3VhcmRlZEhlbHBlckk9TS5pbnRlcmZhY2UoXG4naGVscGVyJyxcbnt9LFxuLy9cbntzbG9wcHk6dHJ1ZX0pOyRozY9fb25jZS5Vbmd1YXJkZWRIZWxwZXJJKFVuZ3VhcmRlZEhlbHBlckkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiU3RvcmFnZU5vZGVTaGFwZSI6WyJTdG9yYWdlTm9kZVNoYXBlIl0sIlVuZ3VhcmRlZEhlbHBlckkiOlsiVW5ndWFyZGVkSGVscGVySSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAqAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbh0FqEgcAABIHAAAqAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3VwZ3JhZGUtYXBpLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSIsImlzQWJhbmRvbmVkRXJyb3IiLCJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIiwibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7aXNGcm96ZW59PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGU9aGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlOk0uc3RyaW5nKCksXG5pbmNhcm5hdGlvbk51bWJlcjpNLm51bWJlcigpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5VcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUpO1xuY29uc3QgICAgICAgIG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbj0odXBncmFkZU1lc3NhZ2UsdG9JbmNhcm5hdGlvbk51bWJlcik9PlxuaGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlLFxuaW5jYXJuYXRpb25OdW1iZXI6dG9JbmNhcm5hdGlvbk51bWJlcn0pOyRozY9fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTskaM2PX29uY2UuaXNVcGdyYWRlRGlzY29ubmVjdGlvbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcbmhhcmRlbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0FiYW5kb25lZEVycm9yPShyZWFzb24pPT5cbnJlYXNvbiE9bnVsbCYmLy9cbmlzRnJvemVuKHJlYXNvbikmJlxubWF0Y2hlcyhyZWFzb24sTS5lcnJvcigpKSYmXG4vL1xuLy9cbnJlYXNvbi5tZXNzYWdlPT09J3ZhdCB0ZXJtaW5hdGVkJzskaM2PX29uY2UuaXNBYmFuZG9uZWRFcnJvcihpc0FiYW5kb25lZEVycm9yKTtcbmhhcmRlbihpc0FiYW5kb25lZEVycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiOlsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSJdLCJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJpc0FiYW5kb25lZEVycm9yIjpbImlzQWJhbmRvbmVkRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArvhjAwcIAAAHCAAAMwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVOb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLHN1YnNjcmliZUxhdGVzdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyPXN1YnNjcmliZUxhdGVzdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcihtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdG9yPShhc3luY0l0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbnJldHVybiBuZXcgUHJvbWlzZSgoYWNrLG9ic2VydmVyRXJyb3IpPT57XG5jb25zdCByZWN1cj0oKT0+e1xuRS53aGVuKFxuRShhc3luY0l0ZXJhdG9yUCkubmV4dCgpLFxuKHt2YWx1ZSxkb25lfSk9PntcbmlmKGRvbmUpe1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoJiZpdGVyYXRpb25PYnNlcnZlci5maW5pc2godmFsdWUpO1xuYWNrKHVuZGVmaW5lZCk7XG4gfWVsc2V7XG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSYmXG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSh2YWx1ZSk7XG5yZWN1cigpO1xuIH1cbiB9LFxuKHJlYXNvbik9Pntcbml0ZXJhdGlvbk9ic2VydmVyLmZhaWwmJml0ZXJhdGlvbk9ic2VydmVyLmZhaWwocmVhc29uKTtcbmFjayh1bmRlZmluZWQpO1xuIH0pLlxuY2F0Y2gob2JzZXJ2ZXJFcnJvcik7XG4gfTtcbnJlY3VyKCk7XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5vYnNlcnZlSXRlcmF0b3Iob2JzZXJ2ZUl0ZXJhdG9yKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlSXRlcmF0aW9uPShhc3luY0l0ZXJhYmxlUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbnJldHVybiBvYnNlcnZlSXRlcmF0b3IoaXRlcmF0b3JQLGl0ZXJhdGlvbk9ic2VydmVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm9ic2VydmVJdGVyYXRpb24ob2JzZXJ2ZUl0ZXJhdGlvbik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZU5vdGlmaWVyPShub3RpZmllclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT5cbm9ic2VydmVJdGVyYXRpb24oc3Vic2NyaWJlTGF0ZXN0KG5vdGlmaWVyUCksaXRlcmF0aW9uT2JzZXJ2ZXIpOyRozY9fb25jZS5vYnNlcnZlTm90aWZpZXIob2JzZXJ2ZU5vdGlmaWVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl0sIm9ic2VydmVJdGVyYXRvciI6WyJvYnNlcnZlSXRlcmF0b3IiXSwib2JzZXJ2ZUl0ZXJhdGlvbiI6WyJvYnNlcnZlSXRlcmF0aW9uIl0sIm9ic2VydmVOb3RpZmllciI6WyJvYnNlcnZlTm90aWZpZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtRbSkN0HAADdBwAAJAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmUuanMiLCIuL25vdGlmaWVyLmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi90b3BpYy5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyS2l0IiwibWFrZU5vdGlmaWVyS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJzdWJzY3JpYmVMYXRlc3QiLCJzdWJzY3JpYmVMYXRlc3QiLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW11dLFtcIi4vbm90aWZpZXIuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlci5qc1wiLCBbXV0sW1wiLi90b3BpYy5qc1wiLCBbXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbXV0sW1wiLi9zdG9yZXN1Yi5qc1wiLCBbXV0sW1wiLi9zdG9yZWQtbm90aWZpZXIuanNcIiwgW11dLFtcIi4vdHlwZXMtaW5kZXguanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3B1Ymxpc2gta2l0LmpzIjpbWyJtYWtlUHVibGlzaEtpdCIsIm1ha2VQdWJsaXNoS2l0Il0sWyJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiXSxbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sWyJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUVhY2hUb3BpY0kiXSxbIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIiwiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSxbIlN1YnNjcmliZXJTaGFwZSIsIlN1YnNjcmliZXJTaGFwZSJdXSwiLi9zdWJzY3JpYmUuanMiOltbInN1YnNjcmliZUVhY2giLCJzdWJzY3JpYmVFYWNoIl0sWyJzdWJzY3JpYmVMYXRlc3QiLCJzdWJzY3JpYmVMYXRlc3QiXV0sIi4vbm90aWZpZXIuanMiOltbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllciJdLFsibWFrZU5vdGlmaWVyS2l0IiwibWFrZU5vdGlmaWVyS2l0Il0sWyJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIl0sWyJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl1dLCIuL3N1YnNjcmliZXIuanMiOltbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uIl0sWyJtYWtlU3Vic2NyaXB0aW9uS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCJdXSwiLi90b3BpYy5qcyI6W1sibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyIsIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXV0sIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiOltbIm9ic2VydmVOb3RpZmllciIsIm9ic2VydmVOb3RpZmllciJdLFsib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIl0sWyJvYnNlcnZlSXRlcmF0aW9uIiwib2JzZXJ2ZUl0ZXJhdGlvbiJdLFsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiLCJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA2VuiwnEQAABxEAAAJwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSIsIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIiwibWFrZU5vdGlmaWVyS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLEZhcixtYWtlUHVibGlzaEtpdCxzdWJzY3JpYmVMYXRlc3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXI9KHNoYXJhYmxlSW50ZXJuYWxzUCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5zdWJzY3JpYmVMYXRlc3Qoc2hhcmFibGVJbnRlcm5hbHNQKSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50KT0+XG5FKHNoYXJhYmxlSW50ZXJuYWxzUCkuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG5nZXRTaGFyYWJsZU5vdGlmaWVySW50ZXJuYWxzOmFzeW5jKCk9PnNoYXJhYmxlSW50ZXJuYWxzUCxcbi8qXG5cblxuXG4gICAgICovXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtub3RpZmllcn0pfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcihtYWtlTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyPShzdWJzY3JpYmVyKT0+e1xuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1oYXJkZW4oe1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9PlxuRShzdWJzY3JpYmVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJLaXQ9KC4uLmluaXRpYWxTdGF0ZUFycik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5jb25zdCBub3RpZmllcj1tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihzdWJzY3JpYmVyKTtcblxuY29uc3QgdXBkYXRlcj1GYXIoJ3VwZGF0ZXInLHtcbnVwZGF0ZVN0YXRlOihzdGF0ZSk9PnB1Ymxpc2hlci5wdWJsaXNoKHN0YXRlKSxcbmZpbmlzaDooY29tcGxldGlvbik9PnB1Ymxpc2hlci5maW5pc2goY29tcGxldGlvbiksXG5mYWlsOihyZWFzb24pPT5wdWJsaXNoZXIuZmFpbChyZWFzb24pfSk7XG5cblxuYXNzZXJ0KGluaXRpYWxTdGF0ZUFyci5sZW5ndGg8PTEsJ3RvbyBtYW55IGFyZ3VtZW50cycpO1xuaWYoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aD09PTEpe1xudXBkYXRlci51cGRhdGVTdGF0ZShpbml0aWFsU3RhdGVBcnJbMF0pO1xuIH1cblxuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtub3RpZmllcix1cGRhdGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcktpdChtYWtlTm90aWZpZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlPShhc3luY0l0ZXJhYmxlUCk9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG9wdE5leHRQcm9taXNlO1xubGV0IGN1cnJlbnRVcGRhdGVDb3VudD0wbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBjdXJyZW50UmVzcG9uc2U7XG5sZXQgZmluYWw9ZmFsc2U7XG5cbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9RmFyKCdiYXNlTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50PS0xbil7XG5pZih1cGRhdGVDb3VudDxjdXJyZW50VXBkYXRlQ291bnQpe1xuaWYoY3VycmVudFJlc3BvbnNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG4gfWVsc2UgaWYodXBkYXRlQ291bnQhPT1jdXJyZW50VXBkYXRlQ291bnQpe1xudGhyb3cgRXJyb3IoXG4nZ2V0VXBkYXRlU2luY2UgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHVwZGF0ZUNvdW50LicpO1xuXG4gfVxuXG4vL1xuaWYoZmluYWwpe1xuYXNzZXJ0KGN1cnJlbnRSZXNwb25zZSE9PXVuZGVmaW5lZCk7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuaWYoIW9wdE5leHRQcm9taXNlKXtcbmNvbnN0IG5leHRJdGVyUmVzdWx0UD1FKGl0ZXJhdG9yUCkubmV4dCgpO1xub3B0TmV4dFByb21pc2U9RS53aGVuKFxubmV4dEl0ZXJSZXN1bHRQLFxuKHtkb25lLHZhbHVlfSk9PntcbmFzc2VydCghZmluYWwpO1xuaWYoZG9uZSl7XG5maW5hbD10cnVlO1xuIH1cbmN1cnJlbnRVcGRhdGVDb3VudCs9MW47XG5jdXJyZW50UmVzcG9uc2U9aGFyZGVuKHtcbnZhbHVlLFxudXBkYXRlQ291bnQ6ZG9uZT91bmRlZmluZWQ6Y3VycmVudFVwZGF0ZUNvdW50fSk7XG5cbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSxcbihfcmVhc29uKT0+e1xuZmluYWw9dHJ1ZTtcbmN1cnJlbnRSZXNwb25zZT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubmV4dEl0ZXJSZXN1bHRQO1xub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9KTtcblxuIH1cbnJldHVybiBvcHROZXh0UHJvbWlzZTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi8vXG4vL1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTm90aWZpZXIiOlsibWFrZU5vdGlmaWVyIl0sIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIjpbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl0sIm1ha2VOb3RpZmllcktpdCI6WyJtYWtlTm90aWZpZXJLaXQiXSwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiOlsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdHozoS0rAAAtKwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxFLEZhcixtYWtlUHJvbWlzZUtpdCxNLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxjYW5CZUR1cmFibGUscHJlcGFyZUV4b0NsYXNzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcbmNvbnN0IG1ha2VRdWlldFJlamVjdGlvbj0ocmVhc29uKT0+e1xuY29uc3QgcmVqZWN0aW9uPWhhcmRlbihQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbnZvaWQgRS53aGVuKHJlamVjdGlvbixzaW5rLHNpbmspO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9O1xuY29uc3QgdG9vRmFyUmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbihcbmhhcmRlbihFcnJvcignQ2Fubm90IHJlYWQgcGFzdCBlbmQgb2YgaXRlcmF0aW9uLicpKSk7XG5cblxuY29uc3QgICAgICAgIFB1Ymxpc2hlckk9TS5pbnRlcmZhY2UoJ1B1Ymxpc2hlcicse1xucHVibGlzaDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmluaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCl9KTtcblxuXG4vL1xuJGjNj19vbmNlLlB1Ymxpc2hlckkoUHVibGlzaGVySSk7Y29uc3QgVXBkYXRlQ291bnRTaGFwZT1NLm9yKE0uYmlnaW50KCksTS5udW1iZXIoKSk7JGjNj19vbmNlLlVwZGF0ZUNvdW50U2hhcGUoVXBkYXRlQ291bnRTaGFwZSk7XG5jb25zdCAgICAgICAgU3Vic2NyaWJlckk9TS5pbnRlcmZhY2UoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOk0uY2FsbCgpLm9wdGlvbmFsKE0uYmlnaW50KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0VXBkYXRlU2luY2U6TS5jYWxsKCkub3B0aW9uYWwoVXBkYXRlQ291bnRTaGFwZSkucmV0dXJucyhNLnByb21pc2UoKSl9KTskaM2PX29uY2UuU3Vic2NyaWJlckkoU3Vic2NyaWJlckkpO1xuXG5jb25zdCAgICAgICAgcHVibGlzaEtpdElLaXQ9aGFyZGVuKHtcbnB1Ymxpc2hlcjpQdWJsaXNoZXJJLFxuc3Vic2NyaWJlcjpTdWJzY3JpYmVySX0pOyRozY9fb25jZS5wdWJsaXNoS2l0SUtpdChwdWJsaXNoS2l0SUtpdCk7XG5cblxuY29uc3QgICAgICAgIEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGU9TS5pbnRlcmZhY2UoXG4nRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InLFxue1xuZm9yazpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLC8vXG5uZXh0Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0uYW55KCkpfSk7JGjNj19vbmNlLkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUoRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSXRlcmFibGVFYWNoVG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUVhY2hUb3BpYycse1xuc3Vic2NyaWJlQWZ0ZXI6XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoU3Vic2NyaWJlckkpLm1ldGhvZEd1YXJkcy5zdWJzY3JpYmVBZnRlcixcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicpKX0pOyRozY9fb25jZS5JdGVyYWJsZUVhY2hUb3BpY0koSXRlcmFibGVFYWNoVG9waWNJKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUxhdGVzdFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVMYXRlc3RUb3BpYycse1xuZ2V0VXBkYXRlU2luY2U6XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoU3Vic2NyaWJlckkpLm1ldGhvZEd1YXJkcy5nZXRVcGRhdGVTaW5jZSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicpKX0pO1xuXG5cblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLkl0ZXJhYmxlTGF0ZXN0VG9waWNJKEl0ZXJhYmxlTGF0ZXN0VG9waWNJKTtcbmNvbnN0IHdlYWtNZW1vaXplVW5hcnk9KGZuKT0+e1xuY29uc3QgY2FjaGU9bmV3IFdlYWtNYXAoKTtcbnJldHVybihhcmcpPT57XG4vKiAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9hcmc9YXJnO1xuaWYoY2FjaGUuaGFzKG9hcmcpKXtcbnJldHVybiBjYWNoZS5nZXQob2FyZyk7XG4gfVxuY29uc3QgcmVzdWx0PWZuKGFyZyk7XG5jYWNoZS5zZXQob2FyZyxyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ9KHJlY29yZCk9PntcbmNvbnN0e1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnR9PVxucmVjb3JkO1xuaWYoZG9uZSl7XG4vL1xucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6cHVibGlzaENvdW50fSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQdWJsaXNoS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxQO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFI7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG5cbmxldCBjdXJyZW50UHVibGlzaENvdW50PTBuO1xubGV0IGN1cnJlbnRQPXRhaWxQO1xuY29uc3QgYWR2YW5jZUN1cnJlbnQ9KGRvbmUsdmFsdWUscmVqZWN0aW9uKT0+e1xuaWYodGFpbFI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuXG5jdXJyZW50UHVibGlzaENvdW50Kz0xbjtcbmN1cnJlbnRQPXRhaWxQO1xuY29uc3QgcmVzb2x2ZUN1cnJlbnQ9dGFpbFI7XG5cbmlmKGRvbmUpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuIH1cblxuaWYocmVqZWN0aW9uKXtcbnJlc29sdmVDdXJyZW50KHJlamVjdGlvbik7XG4gfWVsc2V7XG5yZXNvbHZlQ3VycmVudChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuIH07XG5cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD13ZWFrTWVtb2l6ZVVuYXJ5KFxubWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZCk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qgc3Vic2NyaWJlcj1GYXIoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQ9LTFuKT0+e1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+e1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVibGlzaGVyPUZhcignUHVibGlzaGVyJyx7XG5wdWJsaXNoOih2YWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KGZhbHNlLHZhbHVlKTtcbiB9LFxuZmluaXNoOihmaW5hbFZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSxmaW5hbFZhbHVlKTtcbiB9LFxuZmFpbDoocmVhc29uKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSx1bmRlZmluZWQsbWFrZVF1aWV0UmVqZWN0aW9uKHJlYXNvbikpO1xuIH19KTtcblxucmV0dXJuIGhhcmRlbih7cHVibGlzaGVyLHN1YnNjcmliZXJ9KTtcbiB9OyRozY9fb25jZS5tYWtlUHVibGlzaEtpdChtYWtlUHVibGlzaEtpdCk7XG5oYXJkZW4obWFrZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCBEdXJhYmxlUHVibGlzaEtpdFN0YXRlU2hhcGU9aGFyZGVuKHtcbnZhbHVlRHVyYWJpbGl0eTpNLmFueSgpLFxucHVibGlzaENvdW50Ok0uYW55KCksXG5zdGF0dXM6TS5hbnkoKSxcbmhhc1ZhbHVlOk0uYW55KCksXG52YWx1ZTpNLmFueSgpfSk7XG5cblxuLy9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGU9KG9wdGlvbnM9e30pPT57XG5jb25zdHt2YWx1ZUR1cmFiaWxpdHk9J21hbmRhdG9yeSd9PW9wdGlvbnM7XG5hc3NlcnQuZXF1YWwodmFsdWVEdXJhYmlsaXR5LCdtYW5kYXRvcnknKTtcbnJldHVybntcbi8vXG52YWx1ZUR1cmFiaWxpdHksXG5cbi8vXG5wdWJsaXNoQ291bnQ6MG4sXG5zdGF0dXM6J2xpdmUnLC8vXG5cbi8vXG4vL1xuLy9cbmhhc1ZhbHVlOmZhbHNlLFxudmFsdWU6dW5kZWZpbmVkfTtcblxuIH07XG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0RXBoZW1lcmFsS2V5PShmYWNldHMpPT5mYWNldHMucHVibGlzaGVyO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUN1cnJlbnRQPShzdGF0ZSxmYWNldHMsdGFpbCk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5jb25zdCBjdXJyZW50UD1mb3VuZERhdGEmJmZvdW5kRGF0YS5jdXJyZW50UDtcbmlmKGN1cnJlbnRQKXtcbnJldHVybiBjdXJyZW50UDtcbiB9XG5cbmNvbnN0e3B1Ymxpc2hDb3VudCxzdGF0dXMsaGFzVmFsdWUsdmFsdWV9PXN0YXRlO1xuaWYoIWhhc1ZhbHVlKXtcbmFzc2VydChzdGF0dXM9PT0nbGl2ZScpO1xucmV0dXJuIHRhaWw7XG4gfVxuaWYoc3RhdHVzPT09J2xpdmUnfHxzdGF0dXM9PT0nZmluaXNoZWQnKXtcbmNvbnN0IGNlbGw9aGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmU6c3RhdHVzIT09J2xpdmUnfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWx9KTtcblxucmV0dXJuIEUucmVzb2x2ZShjZWxsKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmFpbGVkJyl7XG5yZXR1cm4gbWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPShzdGF0ZSxmYWNldHMpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuaWYoZm91bmREYXRhKXtcbnJldHVybiBmb3VuZERhdGE7XG4gfVxuXG5jb25zdHtzdGF0dXN9PXN0YXRlO1xubGV0IHRhaWxQO1xubGV0IHRhaWxSO1xuaWYoc3RhdHVzPT09J2xpdmUnKXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZpbmlzaGVkJ3x8c3RhdHVzPT09J2ZhaWxlZCcpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4vL1xuY29uc3Qgb2JqPWhhcmRlbih7Y3VycmVudFA6dW5kZWZpbmVkLHRhaWxQLHRhaWxSfSk7XG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KGVwaGVtZXJhbEtleSxvYmopO1xucmV0dXJuIG9iajtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0PShjb250ZXh0LHZhbHVlLHRhcmdldFN0YXR1cz0nbGl2ZScpPT57XG5jb25zdHtzdGF0ZSxmYWNldHN9PWNvbnRleHQ7XG5jb25zdHt2YWx1ZUR1cmFiaWxpdHksc3RhdHVzfT1zdGF0ZTtcbmlmKHN0YXR1cyE9PSdsaXZlJyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHVwZGF0ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGlvbi4nKTtcbiB9XG5jb25zdCBkb25lPXRhcmdldFN0YXR1cyE9PSdsaXZlJztcbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eT09PSdtYW5kYXRvcnknKXtcbmNhbkJlRHVyYWJsZSh2YWx1ZSl8fEZhaWwgYENhbm5vdCBhY2NlcHQgbm9uLWR1cmFibGUgdmFsdWU6ICR7dmFsdWV9YDtcbiB9XG5jb25zdHt0YWlsUDpvbGRUYWlsUCx0YWlsUjpyZXNvbHZlT2xkVGFpbH09XG5wcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhKHN0YXRlLGZhY2V0cyk7XG5hc3NlcnQudHlwZW9mKHJlc29sdmVPbGRUYWlsLCdmdW5jdGlvbicpO1xuXG5jb25zdCBwdWJsaXNoQ291bnQ9c3RhdGUucHVibGlzaENvdW50KzFuO1xuc3RhdGUucHVibGlzaENvdW50PXB1Ymxpc2hDb3VudDtcblxubGV0IHRhaWxQO1xubGV0IHRhaWxSO1xuaWYoZG9uZSl7XG5zdGF0ZS5zdGF0dXM9dGFyZ2V0U3RhdHVzO1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9XG5cbmxldCBjdXJyZW50UDtcbmlmKHRhcmdldFN0YXR1cz09PSdmYWlsZWQnKXtcbnN0YXRlLmhhc1ZhbHVlPXRydWU7XG5zdGF0ZS52YWx1ZT12YWx1ZTtcbmNvbnN0IHJlamVjdGlvbj1tYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xucmVzb2x2ZU9sZFRhaWwocmVqZWN0aW9uKTtcbiB9ZWxzZXtcbi8vXG4vL1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5IT09J2lnbm9yZWQnJiZjYW5CZUR1cmFibGUodmFsdWUpKXtcbnN0YXRlLmhhc1ZhbHVlPXRydWU7XG5zdGF0ZS52YWx1ZT12YWx1ZTtcbiB9ZWxzZXtcbnN0YXRlLmhhc1ZhbHVlPWZhbHNlO1xuc3RhdGUudmFsdWU9dW5kZWZpbmVkO1xuLy9cbmN1cnJlbnRQPW9sZFRhaWxQO1xuIH1cblxucmVzb2x2ZU9sZFRhaWwoXG5oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnQsXG50YWlsOnRhaWxQfSkpO1xuXG5cbiB9XG5cbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoXG5nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKSxcbmhhcmRlbih7Y3VycmVudFAsdGFpbFAsdGFpbFJ9KSk7XG5cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdD0oYmFnZ2FnZSxraW5kTmFtZSk9Pntcbi8vXG4vL1xuY29uc3QgbWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkPW1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ7XG5cbi8qXG5cbiAgICovXG5yZXR1cm4gcHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxucHVibGlzaEtpdElLaXQsXG5pbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZSxcbntcbi8vXG4vL1xucHVibGlzaGVyOntcbnB1Ymxpc2godmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsdmFsdWUpO1xuIH0sXG5maW5pc2goZmluYWxWYWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyxmaW5hbFZhbHVlLCdmaW5pc2hlZCcpO1xuIH0sXG5mYWlsKHJlYXNvbil7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyxyZWFzb24sJ2ZhaWxlZCcpO1xuIH19LFxuXG5cbi8vXG4vL1xuc3Vic2NyaWJlcjp7XG5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQ9LTFuKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmNvbnN0e3B1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50fT1zdGF0ZTtcbmNvbnN0e2N1cnJlbnRQLHRhaWxQfT1wcm92aWRlRHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhKFxuc3RhdGUsXG5mYWNldHMpO1xuXG5pZihwdWJsaXNoQ291bnQ9PT1jdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiB0YWlsUDtcbiB9ZWxzZSBpZihwdWJsaXNoQ291bnQ8Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gY3VycmVudFB8fHByb3ZpZGVDdXJyZW50UChzdGF0ZSxmYWNldHMsdGFpbFApO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpe1xuY29uc3R7XG5mYWNldHM6e3N1YnNjcmliZXJ9fT1cbnRoaXM7XG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLnRoZW4obWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkKTtcbiB9XG51cGRhdGVDb3VudD1CaWdJbnQodXBkYXRlQ291bnQpO1xucmV0dXJuKFxuc3Vic2NyaWJlclxuLy9cbi8vXG4vL1xuLnN1YnNjcmliZUFmdGVyKHVwZGF0ZUNvdW50KVxuLy9cbi8vXG4udGhlbigoKT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSgpKSk7XG5cbiB9fX0sXG5cblxue1xuc3RhdGVTaGFwZTpEdXJhYmxlUHVibGlzaEtpdFN0YXRlU2hhcGV9KTtcblxuXG4gfTskaM2PX29uY2UucHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCk7XG5oYXJkZW4ocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcblxuY29uc3QgICAgICAgIFN1YnNjcmliZXJTaGFwZT1NLnJlbW90YWJsZSgnU3Vic2NyaWJlcicpOyRozY9fb25jZS5TdWJzY3JpYmVyU2hhcGUoU3Vic2NyaWJlclNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlB1Ymxpc2hlckkiOlsiUHVibGlzaGVySSJdLCJVcGRhdGVDb3VudFNoYXBlIjpbIlVwZGF0ZUNvdW50U2hhcGUiXSwiU3Vic2NyaWJlckkiOlsiU3Vic2NyaWJlckkiXSwicHVibGlzaEtpdElLaXQiOlsicHVibGlzaEtpdElLaXQiXSwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sIkl0ZXJhYmxlRWFjaFRvcGljSSI6WyJJdGVyYWJsZUVhY2hUb3BpY0kiXSwiSXRlcmFibGVMYXRlc3RUb3BpY0kiOlsiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSwibWFrZVB1Ymxpc2hLaXQiOlsibWFrZVB1Ymxpc2hLaXQiXSwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IjpbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLCJTdWJzY3JpYmVyU2hhcGUiOlsiU3Vic2NyaWJlclNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKidGFwRCAAAEQgAAC4AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiQGVuZG8vZmFyIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdG9yZWROb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRBbGxEZWZpbmVkLG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UsRSxGYXIsb2JzZXJ2ZU5vdGlmaWVyOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiYXNzZXJ0QWxsRGVmaW5lZFwiLCBbJGjNj19hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlU2VyaWFsaXplVG9TdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW1tcIm9ic2VydmVOb3RpZmllclwiLCBbJGjNj19hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWROb3RpZmllcj0obm90aWZpZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe25vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxub2JzZXJ2ZU5vdGlmaWVyKG5vdGlmaWVyLHtcbnVwZGF0ZVN0YXRlKHZhbHVlKXtcbm1hcnNoYWxsVG9TdG9yYWdlKHZhbHVlKS5jYXRjaCgocmVhc29uKT0+XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gdXBkYXRlU3RhdGUnLHJlYXNvbikpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZE5vdGlmaWVyIGZhaWxlZCB0byBpdGVyYXRlJyxyZWFzb24pO1xuIH19KS5cbmNhdGNoKChyZWFzb24pPT57XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBoYWx0ZWQgaXRlcmF0aW9uJyxyZWFzb24pO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JlZE5vdGlmaWVyPUZhcignU3RvcmVkTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PkUobm90aWZpZXIpLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZWROb3RpZmllcjtcbiB9OyRozY9fb25jZS5tYWtlU3RvcmVkTm90aWZpZXIobWFrZVN0b3JlZE5vdGlmaWVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTdG9yZWROb3RpZmllciI6WyJtYWtlU3RvcmVkTm90aWZpZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApxMCM+0VAADtFQAAJwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZXN1Yi5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlci5qcyIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIiwibWFrZVN0b3JlZFB1Ymxpc2hLaXQiLCJtYWtlU3RvcmVkUHVibGlzaGVyS2l0IiwibWFrZVN0b3JlZFN1YnNjcmliZXIiLCJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VNYXJzaGFsLGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxvYnNlcnZlSXRlcmF0aW9uLG1ha2VQdWJsaXNoS2l0LG1ha2VTdWJzY3JpcHRpb25LaXQsc3Vic2NyaWJlRWFjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW1tcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtbXCJtYWtlU3Vic2NyaXB0aW9uS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VTdWJzY3JpcHRpb25LaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmb3JFYWNoUHVibGljYXRpb25SZWNvcmQ9YXN5bmMoc3Vic2NyaWJlcixjb25zdW1lVmFsdWUpPT57XG4vL1xuLy9cbmNvbnN0IGl0ZXJhdG9yPXN1YnNjcmliZUVhY2goc3Vic2NyaWJlcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbmxldCBmaW5pc2hlZD1mYWxzZTtcbmF3YWl0IG51bGw7XG53aGlsZSghZmluaXNoZWQpe1xuY29uc3R7dmFsdWUsZG9uZX09YXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuYXdhaXQgY29uc3VtZVZhbHVlKHZhbHVlKTtcbmZpbmlzaGVkPSEhZG9uZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChmb3JFYWNoUHVibGljYXRpb25SZWNvcmQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRTdWJzY3JpYmVyPShzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxuLy9cbmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChzdWJzY3JpYmVyLG1hcnNoYWxsVG9TdG9yYWdlKS5jYXRjaCgoZXJyKT0+e1xuLy9cbi8vXG5jb25zb2xlLmVycm9yKCdTdG9yZWRTdWJzY3JpYmVyIGZhaWxlZCB0byBpdGVyYXRlJyxlcnIpO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50KT0+c3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpLFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRTdG9yZUtleTooKT0+RShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU3RvcmVkU3Vic2NyaWJlcihtYWtlU3RvcmVkU3Vic2NyaWJlcik7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmlwdGlvbj0oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH0sXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSkpPT5cblxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8vXG5sZXQgcHVibGlzaEZhaWxlZD1mYWxzZTtcbmxldCBwdWJsaXNoRXhjZXB0aW9uO1xuXG5jb25zdCBmYWlsPShlcnIpPT57XG5wdWJsaXNoRmFpbGVkPXRydWU7XG5wdWJsaXNoRXhjZXB0aW9uPWVycjtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHB1Ymxpc2hWYWx1ZT0ob2JqKT0+e1xuYXNzZXJ0KHN0b3JhZ2VOb2RlKTtcbmlmKHB1Ymxpc2hGYWlsZWQpe1xuLy9cbnRocm93IHB1Ymxpc2hFeGNlcHRpb247XG4gfVxuXG4vL1xuRShtYXJzaGFsbGVyKS5cbnRvQ2FwRGF0YShvYmopLlxudGhlbigoc2VyaWFsaXplZCk9PntcbmNvbnN0IGVuY29kZWQ9SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoZW5jb2RlZCk7XG4gfSkuXG5jYXRjaChmYWlsKTtcbiB9O1xuXG5pZihzdG9yYWdlTm9kZSl7XG4vL1xub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpcHRpb24se1xudXBkYXRlU3RhdGU6cHVibGlzaFZhbHVlLFxuZmluaXNoOnB1Ymxpc2hWYWx1ZX0pLlxuY2F0Y2goZmFpbCk7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaXB0aW9uJyx7XG4vL1xuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+e1xuaWYoIXN0b3JhZ2VOb2RlKXtcbnJldHVybiBoYXJkZW4oe3N1YnNjcmlwdGlvbn0pO1xuIH1cbmNvbnN0IHN0b3JlS2V5PWF3YWl0IEUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCk7XG5yZXR1cm4gaGFyZGVuKHsuLi5zdG9yZUtleSxzdWJzY3JpcHRpb259KTtcbiB9LFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXIsXG5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFsczooKT0+XG5zdWJzY3JpcHRpb24uZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHMoKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnN1YnNjcmlwdGlvbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpcHRpb24uc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KX0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZFN1YnNjcmlwdGlvbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hlcktpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcixjaGlsZFBhdGgpPT57XG5jb25zdHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259PW1ha2VTdWJzY3JpcHRpb25LaXQoKTtcblxuaWYoc3RvcmFnZU5vZGUmJmNoaWxkUGF0aCl7XG5zdG9yYWdlTm9kZT1FKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkUGF0aCk7XG4gfVxuXG4vL1xuY29uc3Qgc3Vic2NyaWJlcj1tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyKTtcblxuXG5yZXR1cm57XG5wdWJsaXNoZXI6cHVibGljYXRpb24sXG5zdWJzY3JpYmVyfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hlcktpdChtYWtlU3RvcmVkUHVibGlzaGVyS2l0KTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkUHVibGlzaEtpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5yZXR1cm57XG5wdWJsaXNoZXIsXG4vL1xuc3Vic2NyaWJlcjptYWtlU3RvcmVkU3Vic2NyaWJlcihzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpfTtcblxuIH07JGjNj19vbmNlLm1ha2VTdG9yZWRQdWJsaXNoS2l0KG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiOlsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIl0sIm1ha2VTdG9yZWRTdWJzY3JpYmVyIjpbIm1ha2VTdG9yZWRTdWJzY3JpYmVyIl0sIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iOlsibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJtYWtlU3RvcmVkUHVibGlzaGVyS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiXSwibWFrZVN0b3JlZFB1Ymxpc2hLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFQde8yESAAAhEgAAKAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIl0sImV4cG9ydHMiOlsic3Vic2NyaWJlIiwic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUxhdGVzdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLEZhaWwsYW5ub3RhdGVFcnJvcixFLEZhcixpc09iamVjdCxpc1VwZ3JhZGVEaXNjb25uZWN0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzXCIsIFtbXCJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uXCIsIFskaM2PX2EgPT4gKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmVjb25uZWN0QXNOZWVkZWQ9YXN5bmMoZ2V0dGVyLHNlZWQ9W10pPT57XG5sZXQgZGlzY29ubmVjdGlvbjtcbmxldCBsYXN0VmVyc2lvbj0tSW5maW5pdHk7XG4vL1xuYXdhaXQgbnVsbDtcbmZvcihsZXQgaT0wOztpKz0xKXtcbnRyeXtcbmNvbnN0IHJlc3VsdFA9aTxzZWVkLmxlbmd0aD9zZWVkW2ldOmdldHRlcigpO1xuY29uc3QgcmVzdWx0PWF3YWl0IHJlc3VsdFA7XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaChlcnIpe1xuaWYoaXNVcGdyYWRlRGlzY29ubmVjdGlvbihlcnIpKXtcbmlmKCFkaXNjb25uZWN0aW9uKXtcbmRpc2Nvbm5lY3Rpb249ZXJyO1xuIH1cbmNvbnN0e2luY2FybmF0aW9uTnVtYmVyOnZlcnNpb259PWVycjtcbmlmKHZlcnNpb24+bGFzdFZlcnNpb24pe1xuLy9cbi8vXG4vL1xubGFzdFZlcnNpb249dmVyc2lvbjtcbmNvbnRpbnVlO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5pZihpc09iamVjdChlcnIpJiZkaXNjb25uZWN0aW9uJiZkaXNjb25uZWN0aW9uIT09ZXJyKXtcbnRyeXtcbmFubm90YXRlRXJyb3IoXG5lcnIsXG5YIGBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBkaXNjb25uZWN0aW9uOiAke2Rpc2Nvbm5lY3Rpb259YCk7XG5cbiB9Y2F0Y2goX2Vycil7XG4vL1xuIH1cbiB9XG50aHJvdyBlcnI7XG4gfVxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmU9KGl0UCk9PlxuRmFyKCdBc3luY0l0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBpdD1FKGl0UClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5jb25zdCBzZWxmPUZhcignQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT5FKGl0KS5uZXh0KCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuc3Vic2NyaWJlKHN1YnNjcmliZSk7XG5jb25zdCBtYWtlRWFjaEl0ZXJhdG9yPSh0b3BpYyxuZXh0Q2VsbFApPT57XG4vL1xuLy9cbmNvbnN0IHNlbGY9RmFyKCdFYWNoSXRlcmF0b3InLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OigpPT57XG5jb25zdHtcbmhlYWQ6cmVzdWx0UCxcbnB1Ymxpc2hDb3VudDpwdWJsaXNoQ291bnRQLFxudGFpbDp0YWlsUH09XG5FLmdldChuZXh0Q2VsbFApO1xuXG4vL1xuLy9cbmNvbnN0IGdldFN1Y2Nlc3Nvcj1hc3luYygpPT57XG5jb25zdCBwdWJsaXNoQ291bnQ9YXdhaXQgcHVibGlzaENvdW50UDtcbmFzc2VydC50eXBlb2YocHVibGlzaENvdW50LCdiaWdpbnQnKTtcbmNvbnN0IHN1Y2Nlc3Nvcj1hd2FpdCBFKHRvcGljKS5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpO1xuY29uc3QgbmV3UHVibGlzaENvdW50PXN1Y2Nlc3Nvci5wdWJsaXNoQ291bnQ7XG5pZihuZXdQdWJsaXNoQ291bnQhPT1wdWJsaXNoQ291bnQrMW4pe1xuRmFpbCBgZWFjaEl0ZXJhdG9yIGJyb2tlbiBieSBnYXAgZnJvbSBwdWJsaXNoQ291bnQgJHtwdWJsaXNoQ291bnR9IHRvICR7bmV3UHVibGlzaENvdW50fWA7XG4gfVxucmV0dXJuIHN1Y2Nlc3NvcjtcbiB9O1xuXG4vL1xuLy9cbm5leHRDZWxsUD1yZWNvbm5lY3RBc05lZWRlZChnZXRTdWNjZXNzb3IsW3RhaWxQXSk7XG5cbi8vXG4vL1xuLy9cbi8vXG52b2lkIEUud2hlbihwdWJsaXNoQ291bnRQLHNpbmssc2luayk7XG52b2lkIEUud2hlbihuZXh0Q2VsbFAsc2luayxzaW5rKTtcbnJldHVybiByZXN1bHRQO1xuIH0sXG5mb3JrOigpPT5tYWtlRWFjaEl0ZXJhdG9yKHRvcGljLG5leHRDZWxsUCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVFYWNoPSh0b3BpYyk9PntcbmNvbnN0IGl0ZXJhYmxlPUZhcignRWFjaEl0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBmaXJzdENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKCgpPT5FKHRvcGljKS5zdWJzY3JpYmVBZnRlcigpKTtcbnJldHVybiBtYWtlRWFjaEl0ZXJhdG9yKHRvcGljLGZpcnN0Q2VsbFApO1xuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLnN1YnNjcmliZUVhY2goc3Vic2NyaWJlRWFjaCk7XG5oYXJkZW4oc3Vic2NyaWJlRWFjaCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjbG9uZUxhdGVzdEl0ZXJhdG9yPSh0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KT0+e1xubGV0IG11dGV4PVByb21pc2UucmVzb2x2ZSgpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVSZXF1ZXN0TmV4dFJlc3VsdD1hc3luYygpPT57XG5pZih0ZXJtaW5hbFJlc3VsdCl7XG4vL1xuLy9cbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5cbi8vXG4vL1xuY29uc3R7dmFsdWUsdXBkYXRlQ291bnR9PWF3YWl0IHJlY29ubmVjdEFzTmVlZGVkKCgpPT5cbkUodG9waWMpLmdldFVwZGF0ZVNpbmNlKGxvY2FsVXBkYXRlQ291bnQpKTtcblxuLy9cbmxvY2FsVXBkYXRlQ291bnQ9dXBkYXRlQ291bnQ7XG5cbi8vXG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG50ZXJtaW5hbFJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9O1xuXG5jb25zdCBzZWxmPUZhcignTGF0ZXN0SXRlcmF0b3InLHtcbmZvcms6KCk9PmNsb25lTGF0ZXN0SXRlcmF0b3IodG9waWMsbG9jYWxVcGRhdGVDb3VudCx0ZXJtaW5hbFJlc3VsdCksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG5leHRSZXN1bHQ9bXV0ZXgudGhlbihtYXliZVJlcXVlc3ROZXh0UmVzdWx0KTtcbm11dGV4PW5leHRSZXN1bHQudGhlbihzaW5rLHNpbmspO1xuLy9cblxucmV0dXJuIG5leHRSZXN1bHQ7XG4gfX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlTGF0ZXN0SXRlcmF0b3I9KHRvcGljKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlTGF0ZXN0PSh0b3BpYyk9PntcbmNvbnN0IGl0ZXJhYmxlPUZhcignTGF0ZXN0SXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Pm1ha2VMYXRlc3RJdGVyYXRvcih0b3BpYyl9KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLnN1YnNjcmliZUxhdGVzdChzdWJzY3JpYmVMYXRlc3QpO1xuaGFyZGVuKHN1YnNjcmliZUxhdGVzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdWJzY3JpYmUiOlsic3Vic2NyaWJlIl0sInN1YnNjcmliZUVhY2giOlsic3Vic2NyaWJlRWFjaCJdLCJzdWJzY3JpYmVMYXRlc3QiOlsic3Vic2NyaWJlTGF0ZXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIdoe1/RBwAA0QcAACkAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3RvcGljLmpzIl0sImV4cG9ydHMiOlsibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsc3Vic2NyaWJlRWFjaCxtYWtlUHVibGlzaEtpdCxtYWtlUGlubmVkSGlzdG9yeVRvcGljOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChtYWtlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIi4vdG9waWMuanNcIiwgW1tcIm1ha2VQaW5uZWRIaXN0b3J5VG9waWNcIiwgWyRozY9fYSA9PiAobWFrZVBpbm5lZEhpc3RvcnlUb3BpYyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVN1YnNjcmlwdGlvbj0odG9waWMpPT57XG5jb25zdCBzdWJzY3JpcHRpb249RmFyKCdTdWJzY3JpcHRpb24nLHtcbi4uLnN1YnNjcmliZUVhY2godG9waWMpLFxuc3Vic2NyaWJlQWZ0ZXI6YXN5bmMocHVibGlzaENvdW50KT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHM6YXN5bmMoKT0+dG9waWMsXG5cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe3N1YnNjcmlwdGlvbn0pfSk7XG5cbnJldHVybiBzdWJzY3JpcHRpb247XG4gfTskaM2PX29uY2UubWFrZVN1YnNjcmlwdGlvbihtYWtlU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3Vic2NyaXB0aW9uKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb25LaXQ9KCk9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG4vL1xuLy9cblxuY29uc3QgcGlubmVkSGlzdG9yeVRvcGljPW1ha2VQaW5uZWRIaXN0b3J5VG9waWMoc3Vic2NyaWJlcik7XG5jb25zdCBzdWJzY3JpcHRpb249bWFrZVN1YnNjcmlwdGlvbihwaW5uZWRIaXN0b3J5VG9waWMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVibGljYXRpb249RmFyKCdwdWJsaWNhdGlvbicse1xudXBkYXRlU3RhdGU6KG5vbkZpbmFsVmFsdWUpPT5wdWJsaXNoZXIucHVibGlzaChub25GaW5hbFZhbHVlKSxcbmZpbmlzaDooY29tcGxldGlvbik9PnB1Ymxpc2hlci5maW5pc2goY29tcGxldGlvbiksXG5mYWlsOihyZWFzb24pPT5wdWJsaXNoZXIuZmFpbChyZWFzb24pfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cHVibGljYXRpb24sc3Vic2NyaXB0aW9ufSk7XG4gfTskaM2PX29uY2UubWFrZVN1YnNjcmlwdGlvbktpdChtYWtlU3Vic2NyaXB0aW9uS2l0KTtcbmhhcmRlbihtYWtlU3Vic2NyaXB0aW9uS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTdWJzY3JpcHRpb24iOlsibWFrZVN1YnNjcmlwdGlvbiJdLCJtYWtlU3Vic2NyaXB0aW9uS2l0IjpbIm1ha2VTdWJzY3JpcHRpb25LaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAR1oa2u0DAADtAwAAJAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90b3BpYy5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBpbm5lZEhpc3RvcnlUb3BpYz0odG9waWMpPT57XG4vL1xuXG4vL1xuY29uc3QgcGlubmVkUHViTGlzdD10b3BpYy5zdWJzY3JpYmVBZnRlcigpO1xuXG5yZXR1cm4gRmFyKCdQaW5uZWRIaXN0b3J5VG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudD0tMW4pPT57XG5pZihwdWJsaXNoQ291bnQ9PT0tMW4pe1xucmV0dXJuIHBpbm5lZFB1Ykxpc3Q7XG4gfVxucmV0dXJuIHRvcGljLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG4gfSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4gdG9waWMuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VQaW5uZWRIaXN0b3J5VG9waWMobWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG5oYXJkZW4obWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyEDQBpQNAACUDQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzXCIsIFtdXSxbXCJAZW5kby9leG9cIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeU1hcC5qc1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc1wiLCBbXV0sW1wiLi90eXBlcy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtdXN0TWF0Y2g9dHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOltbInByb3ZpZGVMYXp5IiwicHJvdmlkZUxhenkiXV0sIkBlbmRvL3BhdHRlcm5zIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdLFsiY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXSxbImNvZXJjZVRvQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXSxbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsic2V0VW5pb24iLCJzZXRVbmlvbiJdLFsic2V0RGlzam9pbnRVbmlvbiIsInNldERpc2pvaW50VW5pb24iXSxbInNldEludGVyc2VjdGlvbiIsInNldEludGVyc2VjdGlvbiJdLFsic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50U3VidHJhY3QiXSxbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdLFsiTSIsIk0iXSxbImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciJdLFsiaXNQYXR0ZXJuIiwiaXNQYXR0ZXJuIl0sWyJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UGF0dGVybiJdLFsibWF0Y2hlcyIsIm1hdGNoZXMiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl1dLCJAZW5kby9leG8iOltbImluaXRFbXB0eSIsImluaXRFbXB0eSJdLFsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyJdLFsiZGVmaW5lRXhvQ2xhc3NLaXQiLCJkZWZpbmVFeG9DbGFzc0tpdCJdLFsibWFrZUV4byIsIm1ha2VFeG8iXV0sIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyI6W1sibWFrZUxlZ2FjeU1hcCIsIm1ha2VMZWdhY3lNYXAiXV0sIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiOltbIm1ha2VMZWdhY3lXZWFrTWFwIiwibWFrZUxlZ2FjeVdlYWtNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADwIquuNQUAADUFAAAsAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5TWFwPSh0YWc9J2tleScpPT57XG5jb25zdCBtPW5ldyBNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hbS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5tLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gbm90IGZvdW5kOiAke2tleX1gO1xucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbm0uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5yZXR1cm4gbS5nZXQoa2V5KTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLmRlbGV0ZShrZXkpO1xuIH0sXG5rZXlzOigpPT5tLmtleXMoKSxcbnZhbHVlczooKT0+bS52YWx1ZXMoKSxcbmVudHJpZXM6KCk9Pm0uZW50cmllcygpLFxuZ2V0U2l6ZTooKT0+bS5zaXplLFxuY2xlYXI6KCk9Pm0uY2xlYXIoKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUxlZ2FjeU1hcChtYWtlTGVnYWN5TWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lNYXAiOlsibWFrZUxlZ2FjeU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC6xE3t9wQAAPcEAAAwAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5V2Vha01hcD0odGFnPSdrZXknKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd209bmV3IFdlYWtNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hd20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9Plxud20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIHdtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL3dtLmdldChrZXkpKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uZGVsZXRlKGtleSk7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUxlZ2FjeVdlYWtNYXAobWFrZUxlZ2FjeVdlYWtNYXApO1xuaGFyZGVuKG1ha2VMZWdhY3lXZWFrTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lXZWFrTWFwIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADtePIKcEAAAnBAAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIiwibWFrZVNjYWxhck1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGFzc2VydFBhc3NhYmxlLGZpbHRlckl0ZXJhYmxlLG1hcEl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weU1hcCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjNj19hID0+IChtYXBJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBTdG9yZU1ldGhvZHM9KFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbnRhZz0na2V5Jyk9Plxue1xuY29uc3R7YXNzZXJ0VXBkYXRlT25BZGQsYXNzZXJ0VXBkYXRlT25EZWxldGUsaXRlcmFibGVLZXlzfT1cbm1ha2VDdXJyZW50S2V5c0tpdChcbigpPT5qc21hcC5rZXlzKCksXG4oayk9PmpzbWFwLmhhcyhrKSxcbmNvbXBhcmVSYW5rLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbnRhZyk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCBrZXlzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbnJldHVybiBpdGVyYWJsZUtleXM7XG4gfVxuY29uc3QgZmlsdGVyPShrKT0+e1xuaWYoa2V5UGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoayxrZXlQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmlmKHZhbHVlUGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoanNtYXAuZ2V0KGspLHZhbHVlUGF0dCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiB0cnVlO1xuIH07XG5yZXR1cm4gZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLGZpbHRlcik7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCB2YWx1ZXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1hcEl0ZXJhYmxlKGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpLChrKT0+LyogICAgICAgICAgICAqL2pzbWFwLmdldChrKSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZW50cmllcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT5bXG5rLFxuLyogICAgICAgICAgICAqL2pzbWFwLmdldChrKV0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbnRhZyksXG5cbmtleXMsXG52YWx1ZXMsXG5lbnRyaWVzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFrZUNvcHlNYXAoZW50cmllcyhrZXlQYXR0LHZhbHVlUGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQ/XG5qc21hcC5zaXplOlxuWy4uLmtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbmpzbWFwLmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSl7XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VNYXBTdG9yZU1ldGhvZHMobWFrZU1hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhck1hcFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcgTWFwKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ21hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdtYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIE1hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZU1hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyTWFwU3RvcmUobWFrZVNjYWxhck1hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcFN0b3JlTWV0aG9kcyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJNYXBTdG9yZSI6WyJtYWtlU2NhbGFyTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmCzfJc0LAADNCwAAMQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyIsIi4vc2NhbGFyV2Vha1NldFN0b3JlLmpzIiwiLi9zdG9yZS11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsZmlsdGVySXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5U2V0LG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImZpbHRlckl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRozY9fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjNj19hID0+IChtYWtlQ29weVNldCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHNcIiwgWyRozY9fYSA9PiAobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRozY9fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU2V0U3RvcmVNZXRob2RzPShcbmpzc2V0LFxuYXNzZXJ0S2V5T2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3R7YXNzZXJ0VXBkYXRlT25BZGQsYXNzZXJ0VXBkYXRlT25EZWxldGUsaXRlcmFibGVLZXlzfT1cbm1ha2VDdXJyZW50S2V5c0tpdChcbigpPT5qc3NldC5rZXlzKCksXG4oayk9Pmpzc2V0LmhhcyhrKSxcbmNvbXBhcmVSYW5rLFxuYXNzZXJ0S2V5T2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGUsXG5rZXlOYW1lKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBrZXlzPShrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9cbml0ZXJhYmxlS2V5czpcbmZpbHRlckl0ZXJhYmxlKGl0ZXJhYmxlS2V5cywoayk9Pm1hdGNoZXMoayxrZXlQYXR0KSk7XG5cbnJldHVybiBoYXJkZW4oe1xuLi4ubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMoXG5qc3NldCxcbmFzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG5rZXlOYW1lKSxcblxuXG5rZXlzLFxuXG52YWx1ZXM6a2V5cyxcblxuc25hcHNob3Q6KGtleVBhdHQ9dW5kZWZpbmVkKT0+bWFrZUNvcHlTZXQoa2V5cyhrZXlQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkP2pzc2V0LnNpemU6Wy4uLmtleXMoa2V5UGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCl7XG5qc3NldC5jbGVhcigpO1xuIH1cbmZvcihjb25zdCBrZXkgb2Yga2V5cyhrZXlQYXR0KSl7XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVNldFN0b3JlTWV0aG9kcyhtYWtlU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyBTZXQoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S2V5T2tUb0FkZD0oa2V5KT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdzZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VTZXRTdG9yZU1ldGhvZHMoanNzZXQsYXNzZXJ0S2V5T2tUb0FkZCx1bmRlZmluZWQsdGFnKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhclNldFN0b3JlKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhclNldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyU2V0U3RvcmUiOlsibWFrZVNjYWxhclNldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOkOOdywDQAAsA0AADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLEZhcixhc3NlcnRQYXNzYWJsZSxwYXNzU3R5bGVPZixnZXRDb3B5TWFwRW50cmllcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixpc0NvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcImlzQ29weU1hcFwiLCBbJGjNj19hID0+IChpc0NvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFqc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5cbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNtYXAuaGFzKGtleSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovanNtYXAuZ2V0KGtleSkpO1xuIH0sXG5cbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGVudHJpZXMpPT57XG5pZih0eXBlb2YgZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oZW50cmllcykmJmlzQ29weU1hcChlbnRyaWVzKSl7XG4vL1xuZW50cmllcz1nZXRDb3B5TWFwRW50cmllcyhlbnRyaWVzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtlbnRyaWVzfWA7XG4gfVxuIH1cbmZvcihjb25zdFtrZXksdmFsdWVdb2YvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovZW50cmllcyl7XG4vL1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha01hcFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcobG9uZ0xpdmVkP1dlYWtNYXA6TWFwKSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCd3ZWFrTWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha01hcFN0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtNYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUobWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVH0nFXMKAABzCgAANQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLHBhc3NTdHlsZU9mLGdldENvcHlTZXRLZXlzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weVNldDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5U2V0XCIsIFskaM2PX2EgPT4gKGlzQ29weVNldCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzPShcbmpzc2V0LFxuYXNzZXJ0S2V5T2tUb0FkZCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzc2V0LmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc3NldC5oYXMoa2V5KTtcbiB9LFxuXG5hZGQ6KGtleSk9PntcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuaWYoYXNzZXJ0S2V5T2tUb0RlbGV0ZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRLZXlPa1RvRGVsZXRlKGtleSk7XG4gfVxuanNzZXQuZGVsZXRlKGtleSk7XG4gfSxcblxuYWRkQWxsOihrZXlzKT0+e1xuaWYodHlwZW9mIGtleXNbU3ltYm9sLml0ZXJhdG9yXSE9PSdmdW5jdGlvbicpe1xuaWYoT2JqZWN0LmlzRnJvemVuKGtleXMpJiZpc0NvcHlTZXQoa2V5cykpe1xuLy9cbmtleXM9Z2V0Q29weVNldEtleXMoa2V5cyk7XG4gfWVsc2V7XG5GYWlsIGBwcm92aWRlZCBkYXRhIHNvdXJjZSBpcyBub3QgaXRlcmFibGU6ICR7a2V5c31gO1xuIH1cbiB9XG5mb3IoY29uc3Qga2V5IG9mLyogICAgICAgICAgICAgICAgICAgICAgKi9rZXlzKXtcbmFzc2VydEtleU9rVG9BZGQoa2V5KTtcbmpzc2V0LmFkZChrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha1NldFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcobG9uZ0xpdmVkP1dlYWtTZXQ6U2V0KSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha1N0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtTZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHnbC4erDgAAqw4AAC4AAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImFwcGVuZFRvU3RvcmVkQXJyYXkiLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJtYWtlQXRvbWljUHJvdmlkZXIiLCJtYWtlQ3VycmVudEtleXNLaXQiLCJwcm92aWRlTGF6eSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRmFyLE0sbWF0Y2hlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0PShzKT0+bWF0Y2hlcyhzLE0uc2V0KCkpO1xuXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaXNDb3B5U2V0KGlzQ29weVNldCk7XG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+bWF0Y2hlcyhtLE0ubWFwKCkpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5jb25zdCAgICAgICAgbWFrZUN1cnJlbnRLZXlzS2l0PShcbmdldFJhd0tleXMsXG5jaGVja0hhcyxcbmNvbXBhcmUsXG5hc3NlcnRPa1RvQWRkLFxuYXNzZXJ0T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5sZXQgdXBkYXRlQ291bnQ9MDtcbmxldCBzb3J0ZWRLZXlzTWVtbztcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25BZGQ9KGssdj11bmRlZmluZWQpPT57XG5hc3NlcnRPa1RvQWRkKGssdik7XG51cGRhdGVDb3VudCs9MTtcbnNvcnRlZEtleXNNZW1vPXVuZGVmaW5lZDtcbiB9O1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkRlbGV0ZT0oayk9PmFzc2VydE9rVG9EZWxldGUmJmFzc2VydE9rVG9EZWxldGUoayk7XG5cbmNvbnN0IGdldFNvcnRlZEtleXM9KCk9PntcbmlmKHNvcnRlZEtleXNNZW1vPT09dW5kZWZpbmVkKXtcbnNvcnRlZEtleXNNZW1vPWhhcmRlbihbLi4uZ2V0UmF3S2V5cygpXS5zb3J0KGNvbXBhcmUpKTtcbiB9XG5yZXR1cm4gc29ydGVkS2V5c01lbW87XG4gfTtcblxuY29uc3QgaXRlcmFibGVLZXlzPUZhcignSXRlcmFibGUgb2Yga2V5cycse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGdlbmVyYXRpb249dXBkYXRlQ291bnQ7XG5nZXRTb3J0ZWRLZXlzKCk7XG5jb25zdCBsZW49c29ydGVkS2V5c01lbW8ubGVuZ3RoO1xubGV0IGk9MDtcbnJldHVybiBGYXIoJ0l0ZXJhdG9yIG9mIGtleXMnLHtcbm5leHQ6KCk9PntcbmdlbmVyYXRpb249PT11cGRhdGVDb3VudHx8RmFpbCBgU3RvcmUgJHtxKGtleU5hbWUpfSBjdXJzb3Igc3RhbGVgO1xuLy9cbi8vXG5mb3IoOzspe1xuaWYoaTxsZW4pe1xuY29uc3QgdmFsdWU9c29ydGVkS2V5c01lbW9baV07XG5pKz0xO1xuaWYoY2hlY2tIYXModmFsdWUpKXtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxuaXRlcmFibGVLZXlzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlQ3VycmVudEtleXNLaXQobWFrZUN1cnJlbnRLZXlzS2l0KTtcbmhhcmRlbihtYWtlQ3VycmVudEtleXNLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlTGF6eT0obWFwU3RvcmUsa2V5LG1ha2VWYWx1ZSk9PntcbmlmKCFtYXBTdG9yZS5oYXMoa2V5KSl7XG5tYXBTdG9yZS5pbml0KGtleSxtYWtlVmFsdWUoa2V5KSk7XG4gfVxucmV0dXJuIG1hcFN0b3JlLmdldChrZXkpO1xuIH07JGjNj19vbmNlLnByb3ZpZGVMYXp5KHByb3ZpZGVMYXp5KTtcbmhhcmRlbihwcm92aWRlTGF6eSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBdG9taWNQcm92aWRlcj0oc3RvcmUpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBlbmRpbmc9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlQXN5bmM9KGtleSxtYWtlVmFsdWUsZmluaXNoVmFsdWUpPT57XG5pZihzdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0b3JlLmdldChrZXkpKTtcbiB9XG5pZighcGVuZGluZy5oYXMoa2V5KSl7XG5jb25zdCB2YWxQPW1ha2VWYWx1ZShrZXkpLlxudGhlbigodik9PntcbnN0b3JlLmluaXQoa2V5LHYpO1xucmV0dXJuIHY7XG4gfSkuXG50aGVuKCh2KT0+e1xuaWYoZmluaXNoVmFsdWUpe1xucmV0dXJuIGZpbmlzaFZhbHVlKGtleSx2KS50aGVuKCgpPT52KTtcbiB9XG5yZXR1cm4gdjtcbiB9KS5cbmZpbmFsbHkoKCk9PntcbnBlbmRpbmcuZGVsZXRlKGtleSk7XG4gfSk7XG5wZW5kaW5nLnNldChrZXksdmFsUCk7XG4gfVxuY29uc3QgdmFsUD1wZW5kaW5nLmdldChrZXkpO1xuYXNzZXJ0KHZhbFApO1xucmV0dXJuIHZhbFA7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cHJvdmlkZUFzeW5jfSk7XG4gfTskaM2PX29uY2UubWFrZUF0b21pY1Byb3ZpZGVyKG1ha2VBdG9taWNQcm92aWRlcik7XG5oYXJkZW4obWFrZUF0b21pY1Byb3ZpZGVyKTtcbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhcHBlbmRUb1N0b3JlZEFycmF5PShtYXBTdG9yZSxrZXksaXRlbSk9PntcbmlmKG1hcFN0b3JlLmhhcyhrZXkpKXtcbmNvbnN0IGV4dGFudD1tYXBTdG9yZS5nZXQoa2V5KTtcbm1hcFN0b3JlLnNldChrZXksaGFyZGVuKFsuLi5leHRhbnQsaXRlbV0pKTtcbiB9ZWxzZXtcbm1hcFN0b3JlLmluaXQoa2V5LGhhcmRlbihbaXRlbV0pKTtcbiB9XG4gfTskaM2PX29uY2UuYXBwZW5kVG9TdG9yZWRBcnJheShhcHBlbmRUb1N0b3JlZEFycmF5KTtcbmhhcmRlbihhcHBlbmRUb1N0b3JlZEFycmF5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiaXNDb3B5TWFwIjpbImlzQ29weU1hcCJdLCJtYWtlQ3VycmVudEtleXNLaXQiOlsibWFrZUN1cnJlbnRLZXlzS2l0Il0sInByb3ZpZGVMYXp5IjpbInByb3ZpZGVMYXp5Il0sIm1ha2VBdG9taWNQcm92aWRlciI6WyJtYWtlQXRvbWljUHJvdmlkZXIiXSwiYXBwZW5kVG9TdG9yZWRBcnJheSI6WyJhcHBlbmRUb1N0b3JlZEFycmF5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAN94EGYiAgAAIgIAABwAAABAYWdvcmljL3RpbWUtdjAuMy4yL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3RpbWVNYXRoLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdGltZU1hdGguanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3RpbWVNYXRoLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAxnWLOcRMAAHETAAAjAAAAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdGltZU1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIlRpbWVNYXRoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxGYWlsLHEsbXVzdE1hdGNoLFJlbGF0aXZlVGltZVJlY29yZFNoYXBlLFRpbWVzdGFtcFJlY29yZFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiVGltZXN0YW1wUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoVGltZXN0YW1wUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFncmVlZFRpbWVyQnJhbmQ9KGxlZnRCcmFuZCxyaWdodEJyYW5kKT0+e1xuaWYobGVmdEJyYW5kPT09dW5kZWZpbmVkKXtcbmlmKHJpZ2h0QnJhbmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9ZWxzZXtcbnJldHVybiByaWdodEJyYW5kO1xuIH1cbiB9ZWxzZSBpZihyaWdodEJyYW5kPT09dW5kZWZpbmVkKXtcbnJldHVybiBsZWZ0QnJhbmQ7XG4gfWVsc2V7XG5sZWZ0QnJhbmQ9PT1yaWdodEJyYW5kfHxcbkZhaWwgYFRpbWVyQnJhbmRzIG11c3QgbWF0Y2g6ICR7cShsZWZ0QnJhbmQpfSB2cyAke3EocmlnaHRCcmFuZCl9YDtcbnJldHVybiBsZWZ0QnJhbmQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNoYXJlZFRpbWVyQnJhbmQ9KGxlZnQscmlnaHQpPT57XG5jb25zdCBsZWZ0QnJhbmQ9dHlwZW9mIGxlZnQ9PT0nYmlnaW50Jz91bmRlZmluZWQ6bGVmdC50aW1lckJyYW5kO1xuY29uc3QgcmlnaHRCcmFuZD10eXBlb2YgcmlnaHQ9PT0nYmlnaW50Jz91bmRlZmluZWQ6cmlnaHQudGltZXJCcmFuZDtcbnJldHVybiBhZ3JlZWRUaW1lckJyYW5kKGxlZnRCcmFuZCxyaWdodEJyYW5kKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYWJzTGlrZT0obGVmdCxyaWdodCxhYnNWYWx1ZSk9Pntcbk5hdChhYnNWYWx1ZSk7XG5jb25zdCB0aW1lckJyYW5kPXNoYXJlZFRpbWVyQnJhbmQobGVmdCxyaWdodCk7XG5pZih0aW1lckJyYW5kKXtcbnJldHVybiBoYXJkZW4oe1xudGltZXJCcmFuZCxcbmFic1ZhbHVlfSk7XG5cbiB9ZWxzZXtcbnJldHVybiBhYnNWYWx1ZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJlbExpa2U9KGxlZnQscmlnaHQscmVsVmFsdWUpPT57XG5OYXQocmVsVmFsdWUpO1xuY29uc3QgdGltZXJCcmFuZD1zaGFyZWRUaW1lckJyYW5kKGxlZnQscmlnaHQpO1xuaWYodGltZXJCcmFuZCl7XG5yZXR1cm4gaGFyZGVuKHtcbnRpbWVyQnJhbmQsXG5yZWxWYWx1ZX0pO1xuXG4gfWVsc2V7XG5yZXR1cm4gcmVsVmFsdWU7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cblxuY29uc3QgYWJzVmFsdWU9KGFicyk9PntcbmlmKHR5cGVvZiBhYnM9PT0nYmlnaW50Jyl7XG5yZXR1cm4gTmF0KGFicyk7XG4gfVxubXVzdE1hdGNoKGFicyxUaW1lc3RhbXBSZWNvcmRTaGFwZSwndGltZXN0YW1wJyk7XG5yZXR1cm4gTmF0KGFicy5hYnNWYWx1ZSk7XG4gfTtcblxuY29uc3QgcmVsVmFsdWU9KHJlbCk9PntcbmlmKHR5cGVvZiByZWw9PT0nYmlnaW50Jyl7XG5yZXR1cm4gTmF0KHJlbCk7XG4gfVxubXVzdE1hdGNoKHJlbCxSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSwncmVsYXRpdmUnKTtcbnJldHVybiBOYXQocmVsLnJlbFZhbHVlKTtcbiB9O1xuXG5jb25zdCBtYWtlVGltZXN0YW1wUmVjb3JkPShhYnMsdGltZXJCcmFuZCk9PlxuaGFyZGVuKHthYnNWYWx1ZTphYnMsdGltZXJCcmFuZH0pO1xuY29uc3QgbWFrZVJlbGF0aXZlVGltZVJlY29yZD0ocmVsLHRpbWVyQnJhbmQpPT5cbmhhcmRlbih7cmVsVmFsdWU6cmVsLHRpbWVyQnJhbmR9KTtcblxuY29uc3QgY29lcmNlVGltZXN0YW1wUmVjb3JkPSh0cyxicmFuZCk9PntcbmJyYW5kfHxGYWlsIGBtdXN0IGhhdmUgYSBicmFuZGA7XG5pZih0eXBlb2YgdHM9PT0nbnVtYmVyJyl7XG50cz1OYXQodHMpO1xuIH1cbmlmKHR5cGVvZiB0cz09PSdiaWdpbnQnKXtcbnJldHVybiBtYWtlVGltZXN0YW1wUmVjb3JkKHRzLGJyYW5kKTtcbiB9ZWxzZXtcbmNvbnN0e3RpbWVyQnJhbmR9PXRzO1xubXVzdE1hdGNoKHRzLFRpbWVzdGFtcFJlY29yZFNoYXBlLCd0aW1lc3RhbXAnKTtcbmFncmVlZFRpbWVyQnJhbmQodGltZXJCcmFuZCxicmFuZCk7XG5yZXR1cm4gdHM7XG4gfVxuIH07XG5cbmNvbnN0IGNvZXJjZVJlbGF0aXZlVGltZVJlY29yZD0ocnQsYnJhbmQpPT57XG5icmFuZHx8RmFpbCBgbXVzdCBoYXZlIGEgYnJhbmRgO1xuaWYodHlwZW9mIHJ0PT09J251bWJlcicpe1xucnQ9TmF0KHJ0KTtcbiB9XG5pZih0eXBlb2YgcnQ9PT0nYmlnaW50Jyl7XG5yZXR1cm4gbWFrZVJlbGF0aXZlVGltZVJlY29yZChydCxicmFuZCk7XG4gfWVsc2V7XG5jb25zdHt0aW1lckJyYW5kfT1ydDtcbm11c3RNYXRjaChydCxSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSwncmVsYXRpdmVUaW1lJyk7XG5hZ3JlZWRUaW1lckJyYW5kKHRpbWVyQnJhbmQsYnJhbmQpO1xucmV0dXJuIHJ0O1xuIH1cbiB9O1xuXG5jb25zdCBhZGRBYnNSZWw9KGFicyxyZWwpPT5cbmFic0xpa2UoYWJzLHJlbCxhYnNWYWx1ZShhYnMpK3JlbFZhbHVlKHJlbCkpO1xuXG5jb25zdCBhZGRSZWxSZWw9KHJlbDEscmVsMik9PlxucmVsTGlrZShyZWwxLHJlbDIscmVsVmFsdWUocmVsMSkrcmVsVmFsdWUocmVsMikpO1xuXG5jb25zdCBzdWJ0cmFjdEFic0Ficz0oYWJzMSxhYnMyKT0+XG5yZWxMaWtlKGFiczEsYWJzMixhYnNWYWx1ZShhYnMxKS1hYnNWYWx1ZShhYnMyKSk7XG5cbmNvbnN0IGNsYW1wZWRTdWJ0cmFjdEFic0Ficz0oYWJzMSxhYnMyKT0+e1xuY29uc3QgdmFsMT1hYnNWYWx1ZShhYnMxKTtcbmNvbnN0IHZhbDI9YWJzVmFsdWUoYWJzMik7XG5yZXR1cm4gcmVsTGlrZShhYnMxLGFiczIsdmFsMT52YWwyP3ZhbDEtdmFsMjowbik7XG4gfTtcblxuY29uc3Qgc3VidHJhY3RBYnNSZWw9KGFicyxyZWwpPT5cbmFic0xpa2UoYWJzLHJlbCxhYnNWYWx1ZShhYnMpLXJlbFZhbHVlKHJlbCkpO1xuXG5jb25zdCBzdWJ0cmFjdFJlbFJlbD0ocmVsMSxyZWwyKT0+XG5yZWxMaWtlKHJlbDEscmVsMixyZWxWYWx1ZShyZWwxKS1yZWxWYWx1ZShyZWwyKSk7XG5cbmNvbnN0IGlzUmVsWmVybz0ocmVsKT0+cmVsVmFsdWUocmVsKT09PTBuO1xuXG5jb25zdCBtdWx0aXBseVJlbE5hdD0ocmVsLG5hdCk9PnJlbExpa2UocmVsLG5hdCxyZWxWYWx1ZShyZWwpKm5hdCk7XG5cbmNvbnN0IGRpdmlkZVJlbE5hdD0ocmVsLG5hdCk9PnJlbExpa2UocmVsLG5hdCxyZWxWYWx1ZShyZWwpL25hdCk7XG5cbmNvbnN0IGRpdmlkZVJlbFJlbD0ocmVsMSxyZWwyKT0+e1xuc2hhcmVkVGltZXJCcmFuZChyZWwxLHJlbDIpOy8vXG5yZXR1cm4gcmVsVmFsdWUocmVsMSkvcmVsVmFsdWUocmVsMik7XG4gfTtcblxuY29uc3QgbW9kQWJzUmVsPShhYnMsc3RlcCk9PlxucmVsTGlrZShhYnMsc3RlcCxhYnNWYWx1ZShhYnMpJXJlbFZhbHVlKHN0ZXApKTtcblxuY29uc3QgbW9kUmVsUmVsPShyZWwsc3RlcCk9PlxucmVsTGlrZShyZWwsc3RlcCxyZWxWYWx1ZShyZWwpJXJlbFZhbHVlKHN0ZXApKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVWYWx1ZXM9KGxlZnQscmlnaHQsdjEsdjIpPT57XG5zaGFyZWRUaW1lckJyYW5kKGxlZnQscmlnaHQpO1xuaWYodjE8djIpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYodjE9PT12Mil7XG5yZXR1cm4gMDtcbiB9ZWxzZXtcbmFzc2VydCh2MT52Mik7XG5yZXR1cm4gMTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUaW1lTWF0aD1oYXJkZW4oe1xuYWJzVmFsdWUsXG5yZWxWYWx1ZSxcbmNvZXJjZVRpbWVzdGFtcFJlY29yZCxcbmNvZXJjZVJlbGF0aXZlVGltZVJlY29yZCxcbi8vXG5hZGRBYnNSZWwsXG4vL1xuYWRkUmVsUmVsLFxuc3VidHJhY3RBYnNBYnMsXG5jbGFtcGVkU3VidHJhY3RBYnNBYnMsXG5zdWJ0cmFjdEFic1JlbCxcbnN1YnRyYWN0UmVsUmVsLFxuaXNSZWxaZXJvLFxubXVsdGlwbHlSZWxOYXQsXG5kaXZpZGVSZWxOYXQsXG5kaXZpZGVSZWxSZWwsXG5tb2RBYnNSZWwsXG5tb2RSZWxSZWwsXG5jb21wYXJlQWJzOihhYnMxLGFiczIpPT5cbmNvbXBhcmVWYWx1ZXMoYWJzMSxhYnMyLGFic1ZhbHVlKGFiczEpLGFic1ZhbHVlKGFiczIpKSxcbmNvbXBhcmVSZWw6KHJlbDEscmVsMik9PlxuY29tcGFyZVZhbHVlcyhyZWwxLHJlbDIscmVsVmFsdWUocmVsMSkscmVsVmFsdWUocmVsMikpfSk7JGjNj19vbmNlLlRpbWVNYXRoKFRpbWVNYXRoKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlRpbWVNYXRoIjpbIlRpbWVNYXRoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABoG4QkLCQAACwkAACUAAABAYWdvcmljL3RpbWUtdjAuMy4yL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUiLCJSZWxhdGl2ZVRpbWVTaGFwZSIsIlJlbGF0aXZlVGltZVZhbHVlU2hhcGUiLCJUaW1lckJyYW5kU2hhcGUiLCJUaW1lclNlcnZpY2VTaGFwZSIsIlRpbWVzdGFtcFJlY29yZFNoYXBlIiwiVGltZXN0YW1wU2hhcGUiLCJUaW1lc3RhbXBWYWx1ZVNoYXBlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE07JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cblxuY29uc3QgICAgICAgIFRpbWVyQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnVGltZXJCcmFuZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5UaW1lckJyYW5kU2hhcGUoVGltZXJCcmFuZFNoYXBlKTtcbmNvbnN0ICAgICAgICBUaW1lc3RhbXBWYWx1ZVNoYXBlPU0ubmF0KCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVzdGFtcFZhbHVlU2hhcGUoVGltZXN0YW1wVmFsdWVTaGFwZSk7XG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lVmFsdWVTaGFwZT1NLm5hdCgpOy8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlJlbGF0aXZlVGltZVZhbHVlU2hhcGUoUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSk7XG5jb25zdCAgICAgICAgVGltZXN0YW1wUmVjb3JkU2hhcGU9e1xudGltZXJCcmFuZDpUaW1lckJyYW5kU2hhcGUsXG5hYnNWYWx1ZTpUaW1lc3RhbXBWYWx1ZVNoYXBlfTskaM2PX29uY2UuVGltZXN0YW1wUmVjb3JkU2hhcGUoVGltZXN0YW1wUmVjb3JkU2hhcGUpO1xuXG5oYXJkZW4oVGltZXN0YW1wUmVjb3JkU2hhcGUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIFJlbGF0aXZlVGltZVJlY29yZFNoYXBlPXtcbnRpbWVyQnJhbmQ6VGltZXJCcmFuZFNoYXBlLFxucmVsVmFsdWU6UmVsYXRpdmVUaW1lVmFsdWVTaGFwZX07JGjNj19vbmNlLlJlbGF0aXZlVGltZVJlY29yZFNoYXBlKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlKTtcblxuaGFyZGVuKFJlbGF0aXZlVGltZVJlY29yZFNoYXBlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIFRpbWVzdGFtcFNoYXBlPU0ub3IoVGltZXN0YW1wUmVjb3JkU2hhcGUsVGltZXN0YW1wVmFsdWVTaGFwZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuVGltZXN0YW1wU2hhcGUoVGltZXN0YW1wU2hhcGUpO1xuY29uc3QgICAgICAgIFJlbGF0aXZlVGltZVNoYXBlPU0ub3IoXG5SZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSxcblJlbGF0aXZlVGltZVZhbHVlU2hhcGUpOyRozY9fb25jZS5SZWxhdGl2ZVRpbWVTaGFwZShSZWxhdGl2ZVRpbWVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFRpbWVyU2VydmljZVNoYXBlPU0ucmVtb3RhYmxlKCdUaW1lclNlcnZpY2UnKTskaM2PX29uY2UuVGltZXJTZXJ2aWNlU2hhcGUoVGltZXJTZXJ2aWNlU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGltZXJCcmFuZFNoYXBlIjpbIlRpbWVyQnJhbmRTaGFwZSJdLCJUaW1lc3RhbXBWYWx1ZVNoYXBlIjpbIlRpbWVzdGFtcFZhbHVlU2hhcGUiXSwiUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSI6WyJSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlIl0sIlRpbWVzdGFtcFJlY29yZFNoYXBlIjpbIlRpbWVzdGFtcFJlY29yZFNoYXBlIl0sIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlIjpbIlJlbGF0aXZlVGltZVJlY29yZFNoYXBlIl0sIlRpbWVzdGFtcFNoYXBlIjpbIlRpbWVzdGFtcFNoYXBlIl0sIlJlbGF0aXZlVGltZVNoYXBlIjpbIlJlbGF0aXZlVGltZVNoYXBlIl0sIlRpbWVyU2VydmljZVNoYXBlIjpbIlRpbWVyU2VydmljZVNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACYAAABAYWdvcmljL3RpbWUtdjAuMy4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABf/mwKAWAACgFgAAKAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJpZ25vcmVDb250ZXh0IiwibWFrZUV4b1V0aWxzIiwicHJlcGFyZUV4byIsInByZXBhcmVFeG9DbGFzcyIsInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVTaW5nbGV0b24iLCJwcm92aWRlS2luZEhhbmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHkscHJvdmlkZSxnbG9iYWxWYXREYXRhOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJWYXREYXRhXCIsIFskaM2PX2EgPT4gKGdsb2JhbFZhdERhdGEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaM2PX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUV4b1V0aWxzKG1ha2VFeG9VdGlscyk7XG5cbmNvbnN0IGdsb2JhbEV4b1V0aWxzPW1ha2VFeG9VdGlscyhnbG9iYWxWYXREYXRhKTtcblxuY29uc3QgICAgICAge1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcbnByZXBhcmVTaW5nbGV0b259PVxuZ2xvYmFsRXhvVXRpbHM7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzcyhkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzc0tpdChwcmVwYXJlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRozY9fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVLaW5kSGFuZGxlKHByb3ZpZGVLaW5kSGFuZGxlKTskaM2PX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRozY9fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuPUWMKgIAACoCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtdXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtdXSxbXCIuL2V4by11dGlscy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvc3RvcmUiOltbIk0iLCJNIl0sWyJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2NhbGFyU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjpbWyJtYWtlS2luZEhhbmRsZSIsIm1ha2VLaW5kSGFuZGxlIl0sWyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSxbIndhdGNoUHJvbWlzZSIsIndhdGNoUHJvbWlzZSJdLFsibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLFsibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLFsiY2FuQmVEdXJhYmxlIiwiY2FuQmVEdXJhYmxlIl0sWyJwaWNrRmFjZXQiLCJwaWNrRmFjZXQiXSxbInBhcnRpYWxBc3NpZ24iLCJwYXJ0aWFsQXNzaWduIl0sWyJwcm92aWRlIiwicHJvdmlkZSJdLFsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sWyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl0sWyJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZCJdLFsiZGVmaW5lS2luZE11bHRpIiwiZGVmaW5lS2luZE11bHRpIl0sWyJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kIl0sWyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdXSwiLi9leG8tdXRpbHMuanMiOltbImRlZmluZVZpcnR1YWxFeG9DbGFzcyIsImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLFsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sWyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCIsImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4b0NsYXNzIiwicHJlcGFyZUV4b0NsYXNzIl0sWyJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiXSxbInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvIl0sWyJwcmVwYXJlU2luZ2xldG9uIiwicHJlcGFyZVNpbmdsZXRvbiJdLFsiaWdub3JlQ29udGV4dCIsImlnbm9yZUNvbnRleHQiXSxbInByb3ZpZGVLaW5kSGFuZGxlIiwicHJvdmlkZUtpbmRIYW5kbGUiXSxbInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmQiXSxbInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlS2luZE11bHRpIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAMEXLprBYAAKwWAAAwAAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJWYXREYXRhIiwiY2FuQmVEdXJhYmxlIiwiZGVmaW5lRHVyYWJsZUtpbmQiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lS2luZCIsImRlZmluZUtpbmRNdWx0aSIsIm1ha2VLaW5kSGFuZGxlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU3RvcmVVdGlscyIsInBhcnRpYWxBc3NpZ24iLCJwaWNrRmFjZXQiLCJwcm92aWRlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBWYXREYXRhR2xvYmFsO1xuaWYoJ1ZhdERhdGEnaW4gZ2xvYmFsVGhpcyl7XG5nbG9iYWxUaGlzLlZhdERhdGF8fEZhaWwgYFZhdERhdGEgZGVmaW5lZCBpbiBnbG9iYWwgYXMgbnVsbCBvciB1bmRlZmluZWRgO1xuLy9cblZhdERhdGFHbG9iYWw9LyogICAgICAgICAgICAgICovZ2xvYmFsVGhpcy5WYXREYXRhO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuY29uc3QgdW5hdmFpbGFibGU9KCk9PkZhaWwgYFZhdERhdGEgdW5hdmFpbGFibGVgO1xuVmF0RGF0YUdsb2JhbD17XG5kZWZpbmVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lS2luZE11bHRpOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpOnVuYXZhaWxhYmxlLFxubWFrZUtpbmRIYW5kbGU6dW5hdmFpbGFibGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXI6dW5hdmFpbGFibGUsXG53YXRjaFByb21pc2U6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbmNhbkJlRHVyYWJsZTp1bmF2YWlsYWJsZX07XG5cbiB9XG5cbmNvbnN0IFZhdERhdGFFeHBvcnQ9VmF0RGF0YUdsb2JhbDskaM2PX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaM2PX29uY2UuZGVmaW5lS2luZChkZWZpbmVLaW5kKTskaM2PX29uY2UuZGVmaW5lS2luZE11bHRpKGRlZmluZUtpbmRNdWx0aSk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShkZWZpbmVEdXJhYmxlS2luZE11bHRpKTtcblxuY29uc3QgICAgICAge1xubWFrZUtpbmRIYW5kbGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXIsXG53YXRjaFByb21pc2UsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSxcbmNhbkJlRHVyYWJsZX09XG5WYXREYXRhR2xvYmFsO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUtpbmRIYW5kbGUobWFrZUtpbmRIYW5kbGUpOyRozY9fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdNYXBTdG9yZShtYWtlU2NhbGFyQmlnTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobWFrZVNjYWxhckJpZ1NldFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKTskaM2PX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjNj19vbmNlLnBpY2tGYWNldChwaWNrRmFjZXQpO1xuaGFyZGVuKHBpY2tGYWNldCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJ0aWFsQXNzaWduPSh0YXJnZXQsc291cmNlKT0+e1xuT2JqZWN0LmFzc2lnbih0YXJnZXQsc291cmNlKTtcbiB9OyRozY9fb25jZS5wYXJ0aWFsQXNzaWduKHBhcnRpYWxBc3NpZ24pO1xuaGFyZGVuKHBhcnRpYWxBc3NpZ24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIHByb3ZpZGU9XG4vL1xuLypcblxuXG5cblxuXG4gICAqL3Byb3ZpZGVMYXp5O1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVVdGlscyhtYWtlU3RvcmVVdGlscyk7XG5cbmNvbnN0IGdsb2JhbFN0b3JlVXRpbHM9bWFrZVN0b3JlVXRpbHMoVmF0RGF0YUdsb2JhbCk7XG5jb25zdCAgICAgICB7XG5wcm92aWRlRHVyYWJsZU1hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVNldFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmV9PVxuZ2xvYmFsU3RvcmVVdGlsczskaM2PX29uY2UucHJvdmlkZUR1cmFibGVNYXBTdG9yZShwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVNldFN0b3JlKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJWYXREYXRhIjpbIlZhdERhdGFFeHBvcnQiXSwiZGVmaW5lS2luZCI6WyJkZWZpbmVLaW5kIl0sImRlZmluZUtpbmRNdWx0aSI6WyJkZWZpbmVLaW5kTXVsdGkiXSwiZGVmaW5lRHVyYWJsZUtpbmQiOlsiZGVmaW5lRHVyYWJsZUtpbmQiXSwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSI6WyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl0sIm1ha2VLaW5kSGFuZGxlIjpbIm1ha2VLaW5kSGFuZGxlIl0sInByb3ZpZGVQcm9taXNlV2F0Y2hlciI6WyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLCJjYW5CZUR1cmFibGUiOlsiY2FuQmVEdXJhYmxlIl0sInBpY2tGYWNldCI6WyJwaWNrRmFjZXQiXSwicGFydGlhbEFzc2lnbiI6WyJwYXJ0aWFsQXNzaWduIl0sInByb3ZpZGUiOlsicHJvdmlkZSJdLCJtYWtlU3RvcmVVdGlscyI6WyJtYWtlU3RvcmVVdGlscyJdLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJmiqMSSEwAAkhMAACgAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jbGVhblByb3Bvc2FsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJNQVhfS0VZV09SRF9MRU5HVEgiLCJhc3NlcnRLZXl3b3JkTmFtZSIsImNsZWFuS2V5d29yZHMiLCJjbGVhblByb3Bvc2FsIiwiY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCIsImNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxxLEZhaWwsQW1vdW50TWF0aCxnZXRBc3NldEtpbmQsb2JqZWN0TWFwLGFzc2VydFJlY29yZCxhc3NlcnRLZXksYXNzZXJ0UGF0dGVybixtdXN0TWF0Y2gsaXNLZXksRnVsbFByb3Bvc2FsU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dLFtcImdldEFzc2V0S2luZFwiLCBbJGjNj19hID0+IChnZXRBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0UmVjb3JkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlY29yZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiaXNLZXlcIiwgWyRozY9fYSA9PiAoaXNLZXkgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkZ1bGxQcm9wb3NhbFNoYXBlXCIsIFskaM2PX2EgPT4gKEZ1bGxQcm9wb3NhbFNoYXBlID0gJGjNj19hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCAgICAgICAgTUFYX0tFWVdPUkRfTEVOR1RIPTEwMDskaM2PX29uY2UuTUFYX0tFWVdPUkRfTEVOR1RIKE1BWF9LRVlXT1JEX0xFTkdUSCk7XG5cbmNvbnN0IGZpcnN0Q2FwQVNDSUk9L15bQS1aXVthLXpBLVowLTlfJF0qJC87XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXl3b3JkTmFtZT0oa2V5d29yZCk9PntcbmFzc2VydC50eXBlb2Yoa2V5d29yZCwnc3RyaW5nJyk7XG5rZXl3b3JkLmxlbmd0aDw9TUFYX0tFWVdPUkRfTEVOR1RIfHxcbkZhaWwgYGtleXdvcmQgJHtxKGtleXdvcmQpfSBleGNlZWRlZCBtYXhpbXVtIGxlbmd0aCAke3EoXG5NQVhfS0VZV09SRF9MRU5HVEgpXG4gfSBjaGFyYWN0ZXJzOyBnb3QgJHtrZXl3b3JkLmxlbmd0aH1gO1xuZmlyc3RDYXBBU0NJSS50ZXN0KGtleXdvcmQpfHxcbkZhaWwgYGtleXdvcmQgJHtxKFxua2V5d29yZClcbiB9IG11c3QgYmUgYW4gYXNjaWkgaWRlbnRpZmllciBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UuYDtcbmtleXdvcmQhPT0nTmFOJyYma2V5d29yZCE9PSdJbmZpbml0eSd8fFxuRmFpbCBga2V5d29yZCAke3Eoa2V5d29yZCl9IG11c3Qgbm90IGJlIGEgbnVtYmVyJ3MgbmFtZWA7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0S2V5d29yZE5hbWUoYXNzZXJ0S2V5d29yZE5hbWUpO1xuY29uc3QgICAgICAgIGNsZWFuS2V5d29yZHM9KHVuY2xlYW5LZXl3b3JkUmVjb3JkKT0+e1xuaGFyZGVuKHVuY2xlYW5LZXl3b3JkUmVjb3JkKTtcbmFzc2VydFJlY29yZCh1bmNsZWFuS2V5d29yZFJlY29yZCwna2V5d29yZFJlY29yZCcpO1xuY29uc3Qga2V5d29yZHM9b3duS2V5cyh1bmNsZWFuS2V5d29yZFJlY29yZCk7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IGtleXdvcmQgb2Yga2V5d29yZHMpe1xuYXNzZXJ0S2V5d29yZE5hbWUoa2V5d29yZCk7XG4gfVxuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICova2V5d29yZHMpO1xuIH07JGjNj19vbmNlLmNsZWFuS2V5d29yZHMoY2xlYW5LZXl3b3Jkcyk7XG5cbmNvbnN0ICAgICAgICBjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZD0oXG5hbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpPT5cbntcbmNsZWFuS2V5d29yZHMoYWxsZWdlZEFtb3VudEtleXdvcmRSZWNvcmQpO1xuLy9cbnJldHVybiBvYmplY3RNYXAoYWxsZWdlZEFtb3VudEtleXdvcmRSZWNvcmQsKGFtb3VudCk9Pntcbi8vXG4vL1xuaWYoaXNLZXkoYW1vdW50KSl7XG5jb25zdCBicmFuZEFzc2V0S2luZD1nZXRBc3NldEtpbmRCeUJyYW5kKGFtb3VudC5icmFuZCk7XG5jb25zdCBhc3NldEtpbmQ9Z2V0QXNzZXRLaW5kKGFtb3VudCk7XG4vL1xuLy9cbmFzc2V0S2luZD09PWJyYW5kQXNzZXRLaW5kfHxcbkZhaWwgYFRoZSBhbW91bnQgJHthbW91bnR9IGRpZCBub3QgaGF2ZSB0aGUgYXNzZXRLaW5kIG9mIHRoZSBicmFuZCAke2JyYW5kQXNzZXRLaW5kfWA7XG5yZXR1cm4gQW1vdW50TWF0aC5jb2VyY2UoYW1vdW50LmJyYW5kLGFtb3VudCk7XG4gfWVsc2V7XG5hc3NlcnRQYXR0ZXJuKGFtb3VudCk7XG5yZXR1cm4gYW1vdW50O1xuIH1cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQoY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQpO1xuY29uc3QgICAgICAgIGNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQ9KFxuYWxsZWdlZEFtb3VudEtleXdvcmRSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKT0+XG57XG5jb25zdCByZXN1bHQ9Y29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQoXG5hbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5hc3NlcnRLZXkocmVzdWx0KTtcbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQoY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCk7XG5jb25zdCBhc3NlcnRFeGl0PShleGl0KT0+XG5vd25LZXlzKGV4aXQpLmxlbmd0aD09PTF8fEZhaWwgYGV4aXQgJHtleGl0fSBzaG91bGQgb25seSBoYXZlIG9uZSBrZXlgO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydEtleXdvcmROb3RJbkJvdGg9KHdhbnQsZ2l2ZSk9PntcbmNvbnN0IHdhbnRLZXl3b3JkU2V0PW5ldyBTZXQob3duS2V5cyh3YW50KSk7XG5jb25zdCBnaXZlS2V5d29yZHM9b3duS2V5cyhnaXZlKTtcblxuZm9yKGNvbnN0IGtleXdvcmQgb2YgZ2l2ZUtleXdvcmRzKXtcbiF3YW50S2V5d29yZFNldC5oYXMoa2V5d29yZCl8fFxuRmFpbCBgYSBrZXl3b3JkIGNhbm5vdCBiZSBpbiBib3RoICd3YW50JyBhbmQgJ2dpdmUnYDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjbGVhblByb3Bvc2FsPShwcm9wb3NhbCxnZXRBc3NldEtpbmRCeUJyYW5kKT0+e1xuYXNzZXJ0UmVjb3JkKHByb3Bvc2FsLCdwcm9wb3NhbCcpO1xuLy9cbmNvbnN0e1xud2FudD1oYXJkZW4oe30pLFxuZ2l2ZT1oYXJkZW4oe30pLFxuZXhpdD1oYXJkZW4oe29uRGVtYW5kOm51bGx9KSxcbi4uLnJlc3R9PVxucHJvcG9zYWw7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgJHtwcm9wb3NhbH0gLSBNdXN0IG9ubHkgaGF2ZSB3YW50OiwgZ2l2ZTosIGV4aXQ6IHByb3BlcnRpZXM6ICR7cmVzdH1gO1xuXG5jb25zdCBjbGVhbmVkV2FudD1jb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZChcbndhbnQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuY29uc3QgY2xlYW5lZEdpdmU9Y29lcmNlQW1vdW50S2V5d29yZFJlY29yZChnaXZlLGdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5jb25zdCBjbGVhbmVkUHJvcG9zYWw9aGFyZGVuKHtcbndhbnQ6Y2xlYW5lZFdhbnQsXG5naXZlOmNsZWFuZWRHaXZlLFxuZXhpdH0pO1xuXG5tdXN0TWF0Y2goY2xlYW5lZFByb3Bvc2FsLEZ1bGxQcm9wb3NhbFNoYXBlLCdwcm9wb3NhbCcpO1xuYXNzZXJ0RXhpdChleGl0KTtcbmFzc2VydEtleXdvcmROb3RJbkJvdGgoY2xlYW5lZFdhbnQsY2xlYW5lZEdpdmUpO1xucmV0dXJuIGNsZWFuZWRQcm9wb3NhbDtcbiB9OyRozY9fb25jZS5jbGVhblByb3Bvc2FsKGNsZWFuUHJvcG9zYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTUFYX0tFWVdPUkRfTEVOR1RIIjpbIk1BWF9LRVlXT1JEX0xFTkdUSCJdLCJhc3NlcnRLZXl3b3JkTmFtZSI6WyJhc3NlcnRLZXl3b3JkTmFtZSJdLCJjbGVhbktleXdvcmRzIjpbImNsZWFuS2V5d29yZHMiXSwiY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQiOlsiY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQiXSwiY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCI6WyJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkIl0sImNsZWFuUHJvcG9zYWwiOlsiY2xlYW5Qcm9wb3NhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACyuS5mewkAAHsJAAA3AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9hbGxvY2F0aW9uTWF0aC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJhZGRUb0FsbG9jYXRpb24iLCJzdWJ0cmFjdEZyb21BbGxvY2F0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBkb09wZXJhdGlvbj0oYWxsb2NhdGlvbixhbW91bnRLZXl3b3JkUmVjb3JkLG9wZXJhdGlvbkZuKT0+e1xuY29uc3QgYWxsS2V5d29yZHM9T2JqZWN0LmtleXMoey4uLmFsbG9jYXRpb24sLi4uYW1vdW50S2V5d29yZFJlY29yZH0pO1xuXG5jb25zdCBlbnRyaWVzPWFsbEtleXdvcmRzLlxubWFwKChrZXl3b3JkKT0+e1xuY29uc3QgcmVzdWx0PW9wZXJhdGlvbkZuKFxuYWxsb2NhdGlvbltrZXl3b3JkXSxcbmFtb3VudEtleXdvcmRSZWNvcmRba2V5d29yZF0sXG5rZXl3b3JkKTtcblxucmV0dXJuW2tleXdvcmQscmVzdWx0XTtcbiB9KS5cbmZpbHRlcigoW19rZXl3b3JkLHJlc3VsdF0pPT5yZXN1bHQhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGQ9KGFtb3VudCxhbW91bnRUb0FkZCxfa2V5d29yZCk9Pntcbi8vXG5pZihhbW91bnQmJmFtb3VudFRvQWRkKXtcbnJldHVybiBBbW91bnRNYXRoLmFkZChhbW91bnQsYW1vdW50VG9BZGQpO1xuIH1cbi8vXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgKi9hbW91bnR8fGFtb3VudFRvQWRkKTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YnRyYWN0PShhbW91bnQsYW1vdW50VG9TdWJ0cmFjdCxrZXl3b3JkKT0+e1xuLy9cbmlmKGFtb3VudFRvU3VidHJhY3Q9PT11bmRlZmluZWR8fEFtb3VudE1hdGguaXNFbXB0eShhbW91bnRUb1N1YnRyYWN0KSl7XG4vL1xuLy9cbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL2Ftb3VudCk7XG4gfWVsc2V7XG5pZihhbW91bnQ9PT11bmRlZmluZWQpe1xuLy9cbi8vXG50aHJvdyBGYWlsIGBUaGUgYW1vdW50IGNvdWxkIG5vdCBiZSBzdWJ0cmFjdGVkIGZyb20gdGhlIGFsbG9jYXRpb24gYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBkaWQgbm90IGhhdmUgYW4gYW1vdW50IHVuZGVyIHRoZSBrZXl3b3JkICR7cShcbmtleXdvcmQpXG4gfS5gO1xuIH1cbkFtb3VudE1hdGguaXNHVEUoYW1vdW50LGFtb3VudFRvU3VidHJhY3QpfHxcbkZhaWwgYFRoZSBhbW91bnQgdG8gYmUgc3VidHJhY3RlZCAke2Ftb3VudFRvU3VidHJhY3R9IHdhcyBncmVhdGVyIHRoYW4gdGhlIGFsbG9jYXRpb24ncyBhbW91bnQgJHthbW91bnR9IGZvciB0aGUga2V5d29yZCAke3EoXG5rZXl3b3JkKVxuIH1gO1xucmV0dXJuIEFtb3VudE1hdGguc3VidHJhY3QoYW1vdW50LGFtb3VudFRvU3VidHJhY3QpO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWRkVG9BbGxvY2F0aW9uPShhbGxvY2F0aW9uLGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gZG9PcGVyYXRpb24oYWxsb2NhdGlvbixhbW91bnRLZXl3b3JkUmVjb3JkLGFkZCk7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5hZGRUb0FsbG9jYXRpb24oYWRkVG9BbGxvY2F0aW9uKTtcbmNvbnN0ICAgICAgICBzdWJ0cmFjdEZyb21BbGxvY2F0aW9uPShhbGxvY2F0aW9uLGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gZG9PcGVyYXRpb24oYWxsb2NhdGlvbixhbW91bnRLZXl3b3JkUmVjb3JkLHN1YnRyYWN0KTtcbiB9OyRozY9fb25jZS5zdWJ0cmFjdEZyb21BbGxvY2F0aW9uKHN1YnRyYWN0RnJvbUFsbG9jYXRpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYWRkVG9BbGxvY2F0aW9uIjpbImFkZFRvQWxsb2NhdGlvbiJdLCJzdWJ0cmFjdEZyb21BbGxvY2F0aW9uIjpbInN1YnRyYWN0RnJvbUFsbG9jYXRpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvn/OxeYEAADmBAAAOQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvZXZhbENvbnRyYWN0Q29kZS5qc3siaW1wb3J0cyI6WyJAZW5kby9pbXBvcnQtYnVuZGxlIiwiLi4vaGFuZGxlV2FybmluZy5qcyJdLCJleHBvcnRzIjpbImV2YWxDb250cmFjdEJ1bmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbXBvcnRCdW5kbGUsaGFuZGxlUFdhcm5pbmc7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9pbXBvcnQtYnVuZGxlXCIsIFtbXCJpbXBvcnRCdW5kbGVcIiwgWyRozY9fYSA9PiAoaW1wb3J0QnVuZGxlID0gJGjNj19hKV1dXV0sW1wiLi4vaGFuZGxlV2FybmluZy5qc1wiLCBbW1wiaGFuZGxlUFdhcm5pbmdcIiwgWyRozY9fYSA9PiAoaGFuZGxlUFdhcm5pbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5jb25zdCBldmFsQ29udHJhY3RCdW5kbGU9KGJ1bmRsZSxhZGRpdGlvbmFsRW5kb3dtZW50cz17fSk9Pntcbi8vXG5jb25zdCBsb3VkZXJDb25zb2xlPXtcbi4uLmNvbnNvbGUsXG5sb2c6Y29uc29sZS5pbmZvfTtcblxuXG5jb25zdCBkZWZhdWx0RW5kb3dtZW50cz17XG5jb25zb2xlOmxvdWRlckNvbnNvbGUsXG4vL1xuYXNzZXJ0Omdsb2JhbFRoaXMuYXNzZXJ0LFxuVmF0RGF0YTpnbG9iYWxUaGlzLlZhdERhdGF9O1xuXG5cbmNvbnN0IGZ1bGxFbmRvd21lbnRzPU9iamVjdC5jcmVhdGUobnVsbCx7XG4uLi5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhkZWZhdWx0RW5kb3dtZW50cyksXG4uLi5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhhZGRpdGlvbmFsRW5kb3dtZW50cyl9KTtcblxuXG4vL1xuLy9cblxuY29uc3QgaW5zdGFsbGF0aW9uPWltcG9ydEJ1bmRsZShidW5kbGUse1xuZW5kb3dtZW50czpmdWxsRW5kb3dtZW50c30pO1xuXG5oYW5kbGVQV2FybmluZyhpbnN0YWxsYXRpb24pO1xucmV0dXJuIGluc3RhbGxhdGlvbjtcbiB9OyRozY9fb25jZS5ldmFsQ29udHJhY3RCdW5kbGUoZXZhbENvbnRyYWN0QnVuZGxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImV2YWxDb250cmFjdEJ1bmRsZSI6WyJldmFsQ29udHJhY3RCdW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbAmG8BYNAAAWDQAALQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvZXhpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3RpbWUiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1ha2VFeGl0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEUscHJlcGFyZUV4b0NsYXNzLHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsTSxpbml0RW1wdHksVGltZXN0YW1wU2hhcGUsaXNPbkRlbWFuZEV4aXRSdWxlLGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlLGlzV2FpdmVkRXhpdFJ1bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVTZXRTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJUaW1lc3RhbXBTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBTaGFwZSA9ICRozY9fYSldXV1dLFtcIi4uL3R5cGVHdWFyZHMuanNcIiwgW1tcImlzT25EZW1hbmRFeGl0UnVsZVwiLCBbJGjNj19hID0+IChpc09uRGVtYW5kRXhpdFJ1bGUgPSAkaM2PX2EpXV0sW1wiaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGVcIiwgWyRozY9fYSA9PiAoaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUgPSAkaM2PX2EpXV0sW1wiaXNXYWl2ZWRFeGl0UnVsZVwiLCBbJGjNj19hID0+IChpc1dhaXZlZEV4aXRSdWxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBFeGl0T2JqZWN0ST1NLmludGVyZmFjZSgnRXhpdE9iamVjdCcse2V4aXQ6TS5jYWxsKCkucmV0dXJucygpfSk7XG5jb25zdCBXYWtlckk9TS5pbnRlcmZhY2UoJ1dha2VyJyx7XG53YWtlOk0uY2FsbChUaW1lc3RhbXBTaGFwZSkucmV0dXJucygpLFxuc2NoZWR1bGU6TS5jYWxsKCkucmV0dXJucygpfSk7XG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgbWFrZU1ha2VFeGl0ZXI9KGJhZ2dhZ2UpPT57XG5jb25zdCBhY3RpdmVXYWtlcnM9cHJvdmlkZUR1cmFibGVTZXRTdG9yZShiYWdnYWdlLCdhY3RpdmVXYWtlcnMnKTtcblxuY29uc3QgbWFrZUV4aXRhYmxlPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4nRXhpdE9iamVjdCcsXG5FeGl0T2JqZWN0SSxcbih6Y2ZTZWF0KT0+KHt6Y2ZTZWF0fSksXG57XG5leGl0KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnN0YXRlLnpjZlNlYXQuZXhpdCgpO1xuc3RhdGUuemNmU2VhdD11bmRlZmluZWQ7XG4gfX0sXG5cbntcbnN0YXRlU2hhcGU6aGFyZGVuKHtcbnpjZlNlYXQ6TS5hbnkoKX0pfSk7XG5cblxuXG5jb25zdCBtYWtlV2FpdmVkPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4nRXhpdFdhaXZlZCcsXG5FeGl0T2JqZWN0SSxcbmluaXRFbXB0eSxcbntcbmV4aXQoKXtcbi8vXG50aHJvdyBFcnJvcihcbiBgT25seSBzZWF0cyB3aXRoIHRoZSBleGl0IHJ1bGUgXCJvbkRlbWFuZFwiIGNhbiBleGl0IGF0IHdpbGxgKTtcblxuIH19KTtcblxuXG5jb25zdCBtYWtlV2FrZXI9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidXYWtlcicsXG5XYWtlckksXG4oemNmU2VhdCxhZnRlckRlYWRsaW5lKT0+KHt6Y2ZTZWF0LGFmdGVyRGVhZGxpbmV9KSxcbntcbndha2UoX3doZW4pe1xuY29uc3R7c3RhdGUsc2VsZn09dGhpcztcblxuYWN0aXZlV2FrZXJzLmRlbGV0ZShzZWxmKTtcbi8vXG4vL1xuaWYoIXN0YXRlLnpjZlNlYXQuaGFzRXhpdGVkKCkpe1xuc3RhdGUuemNmU2VhdC5leGl0KCk7XG4gfVxuIH0sXG5zY2hlZHVsZSgpe1xuY29uc3R7c3RhdGUsc2VsZn09dGhpcztcblxuRShzdGF0ZS5hZnRlckRlYWRsaW5lLnRpbWVyKS5cbnNldFdha2V1cChzdGF0ZS5hZnRlckRlYWRsaW5lLmRlYWRsaW5lLHNlbGYpLlxuY2F0Y2goKHJlYXNvbik9PntcbmNvbnNvbGUuZXJyb3IoXG4gYFRoZSBzZWF0IGNvdWxkIG5vdCBiZSBtYWRlIHdpdGggdGhlIHByb3ZpZGVkIHRpbWVyICR7c3RhdGUuYWZ0ZXJEZWFkbGluZS50aW1lcn0gYW5kIGRlYWRsaW5lICR7c3RhdGUuYWZ0ZXJEZWFkbGluZS5kZWFkbGluZX1gKTtcblxuY29uc29sZS5lcnJvcihyZWFzb24pO1xuc3RhdGUuemNmU2VhdC5mYWlsKHJlYXNvbik7XG50aHJvdyByZWFzb247XG4gfSk7XG4gfX0pO1xuXG5cblxuLy9cbmZvcihjb25zdCB3YWtlciBvZiBhY3RpdmVXYWtlcnMudmFsdWVzKCkpe1xud2FrZXIuc2NoZWR1bGUoKTtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5yZXR1cm4ocHJvcG9zYWwsemNmU2VhdCk9PntcbmNvbnN0e2V4aXR9PXByb3Bvc2FsO1xuXG5pZihpc09uRGVtYW5kRXhpdFJ1bGUoZXhpdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gbWFrZUV4aXRhYmxlKHpjZlNlYXQpO1xuIH1cblxuaWYoaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUoZXhpdCkpe1xuY29uc3Qgd2FrZXI9bWFrZVdha2VyKHpjZlNlYXQsZXhpdC5hZnRlckRlYWRsaW5lKTtcbmFjdGl2ZVdha2Vycy5hZGQod2FrZXIpO1xuLy9cbndha2VyLnNjaGVkdWxlKCk7XG4gfVxuXG5pZihpc1dhaXZlZEV4aXRSdWxlKGV4aXQpfHxpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZShleGl0KSl7XG5yZXR1cm4gbWFrZVdhaXZlZCgpO1xuIH1cblxudGhyb3cgRmFpbCBgZXhpdCBraW5kIHdhcyBub3QgcmVjb2duaXplZDogJHtxKGV4aXQpfWA7XG4gfTtcbiB9OyRozY9fb25jZS5tYWtlTWFrZUV4aXRlcihtYWtlTWFrZUV4aXRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFrZUV4aXRlciI6WyJtYWtlTWFrZUV4aXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEim5acgEAAHIBAAA3AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9pbnRlcm5hbC10eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEgCgVmrCgAAqwoAADwAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L29mZmVySGFuZGxlclN0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi4vbWFrZUhhbmRsZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VPZmZlckhhbmRsZXJTdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsVG9GYXJGdW5jdGlvbixjYW5CZUR1cmFibGUscHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsZGVmaW5lRHVyYWJsZUhhbmRsZTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIlRvRmFyRnVuY3Rpb25cIiwgWyRozY9fYSA9PiAoVG9GYXJGdW5jdGlvbiA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuLi9tYWtlSGFuZGxlLmpzXCIsIFtbXCJkZWZpbmVEdXJhYmxlSGFuZGxlXCIsIFskaM2PX2EgPT4gKGRlZmluZUR1cmFibGVIYW5kbGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG5jb25zdCAgICAgICAgbWFrZU9mZmVySGFuZGxlclN0b3JhZ2U9KHpjZkJhZ2dhZ2UpPT57XG5jb25zdCBtYWtlSW52aXRhdGlvbkhhbmRsZT1kZWZpbmVEdXJhYmxlSGFuZGxlKHpjZkJhZ2dhZ2UsJ0ludml0YXRpb24nKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlVG9FcGhlbWVyYWxIYW5kbGVyPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoXG4naW52aXRhdGlvbkhhbmRsZVRvRXBoZW1lcmFsSGFuZGxlcicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlVG9EdXJhYmxlSGFuZGxlcj1wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4naW52aXRhdGlvbkhhbmRsZVRvRHVyYWJsZUhhbmRsZXInKTtcblxuXG5jb25zdCBzdG9yZU9mZmVySGFuZGxlcj0ob2ZmZXJIYW5kbGVyKT0+e1xuaWYodHlwZW9mIG9mZmVySGFuZGxlcj09PSdmdW5jdGlvbicpe1xub2ZmZXJIYW5kbGVyPVRvRmFyRnVuY3Rpb24oJ29mZmVySGFuZGxlcicsb2ZmZXJIYW5kbGVyKTtcbiB9XG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlVG9IYW5kbGVyPWNhbkJlRHVyYWJsZShvZmZlckhhbmRsZXIpP1xuaW52aXRhdGlvbkhhbmRsZVRvRHVyYWJsZUhhbmRsZXI6XG5pbnZpdGF0aW9uSGFuZGxlVG9FcGhlbWVyYWxIYW5kbGVyO1xuXG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlPW1ha2VJbnZpdGF0aW9uSGFuZGxlKCk7XG5pbnZpdGF0aW9uSGFuZGxlVG9IYW5kbGVyLmluaXQoaW52aXRhdGlvbkhhbmRsZSxvZmZlckhhbmRsZXIpO1xucmV0dXJuIGludml0YXRpb25IYW5kbGU7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRha2VPZmZlckhhbmRsZXI9KFxuaW52aXRhdGlvbkhhbmRsZSxcbmRldGFpbHM9J29mZmVySGFuZGxlciBtYXkgbm90IGhhdmUgc3Vydml2ZWQgdXBncmFkZScpPT5cbntcbmxldCBpbnZpdGF0aW9uSGFuZGxlVG9IYW5kbGVyO1xuaWYoaW52aXRhdGlvbkhhbmRsZVRvRHVyYWJsZUhhbmRsZXIuaGFzKGludml0YXRpb25IYW5kbGUpKXtcbmludml0YXRpb25IYW5kbGVUb0hhbmRsZXI9aW52aXRhdGlvbkhhbmRsZVRvRHVyYWJsZUhhbmRsZXI7XG4gfWVsc2V7XG5hc3NlcnQoaW52aXRhdGlvbkhhbmRsZVRvRXBoZW1lcmFsSGFuZGxlci5oYXMoaW52aXRhdGlvbkhhbmRsZSksZGV0YWlscyk7XG5pbnZpdGF0aW9uSGFuZGxlVG9IYW5kbGVyPWludml0YXRpb25IYW5kbGVUb0VwaGVtZXJhbEhhbmRsZXI7XG4gfVxuY29uc3Qgb2ZmZXJIYW5kbGVyPWludml0YXRpb25IYW5kbGVUb0hhbmRsZXIuZ2V0KGludml0YXRpb25IYW5kbGUpO1xuaW52aXRhdGlvbkhhbmRsZVRvSGFuZGxlci5kZWxldGUoaW52aXRhdGlvbkhhbmRsZSk7XG5yZXR1cm4gb2ZmZXJIYW5kbGVyO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xuc3RvcmVPZmZlckhhbmRsZXIsXG50YWtlT2ZmZXJIYW5kbGVyfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZShtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZSI6WyJtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACLpZWa+gUAAPoFAAA0AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJpc09mZmVyU2FmZSIsInNhdGlzZmllc1dhbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNPZmZlclNhZmUsICduYW1lJywge3ZhbHVlOiBcImlzT2ZmZXJTYWZlXCJ9KTskaM2PX29uY2UuaXNPZmZlclNhZmUoaXNPZmZlclNhZmUpOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2F0aXNmaWVzSW50ZXJuYWw9KGdpdmVPcldhbnQ9e30sYWxsb2NhdGlvbik9PntcbmNvbnN0IGlzR1RFQnlLZXl3b3JkPShba2V5d29yZCxyZXF1aXJlZEFtb3VudF0pPT57XG4vL1xuLy9cbmlmKGFsbG9jYXRpb25ba2V5d29yZF09PT11bmRlZmluZWQpe1xucmV0dXJuIDA7XG4gfVxuY29uc3QgYWxsb2NhdGlvbkFtb3VudD1hbGxvY2F0aW9uW2tleXdvcmRdO1xucmV0dXJuIEFtb3VudE1hdGguaXNHVEUoYWxsb2NhdGlvbkFtb3VudCxyZXF1aXJlZEFtb3VudCk/MTowO1xuIH07XG5yZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2l2ZU9yV2FudCkuZXZlcnkoaXNHVEVCeUtleXdvcmQpPzE6MDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYXRpc2ZpZXNXYW50PShwcm9wb3NhbCxhbGxvY2F0aW9uKT0+XG5zYXRpc2ZpZXNJbnRlcm5hbChwcm9wb3NhbC53YW50LGFsbG9jYXRpb24pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuc2F0aXNmaWVzV2FudChzYXRpc2ZpZXNXYW50KTtcbmNvbnN0IHNhdGlzZmllc0dpdmU9KHByb3Bvc2FsLGFsbG9jYXRpb24pPT5cbnNhdGlzZmllc0ludGVybmFsKHByb3Bvc2FsLmdpdmUsYWxsb2NhdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzT2ZmZXJTYWZlKHByb3Bvc2FsLGFsbG9jYXRpb24pe1xucmV0dXJuKFxuc2F0aXNmaWVzR2l2ZShwcm9wb3NhbCxhbGxvY2F0aW9uKT4wfHxcbnNhdGlzZmllc1dhbnQocHJvcG9zYWwsYWxsb2NhdGlvbik+MCk7XG5cbiB9XG5cbmhhcmRlbihpc09mZmVyU2FmZSk7XG5oYXJkZW4oc2F0aXNmaWVzV2FudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzYXRpc2ZpZXNXYW50IjpbInNhdGlzZmllc1dhbnQiXSwiaXNPZmZlclNhZmUiOlsiaXNPZmZlclNhZmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKz52JhEMAAARDAAAMwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvcmVhbGxvY2F0ZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi9yaWdodHNDb25zZXJ2YXRpb24uanMiLCIuL2FsbG9jYXRpb25NYXRoLmpzIl0sImV4cG9ydHMiOlsibWFrZUFsbG9jYXRpb25NYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlU2NhbGFyTWFwU3RvcmUsYXNzZXJ0UmlnaHRzQ29uc2VydmVkLGFkZFRvQWxsb2NhdGlvbixzdWJ0cmFjdEZyb21BbGxvY2F0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiLi9yaWdodHNDb25zZXJ2YXRpb24uanNcIiwgW1tcImFzc2VydFJpZ2h0c0NvbnNlcnZlZFwiLCBbJGjNj19hID0+IChhc3NlcnRSaWdodHNDb25zZXJ2ZWQgPSAkaM2PX2EpXV1dXSxbXCIuL2FsbG9jYXRpb25NYXRoLmpzXCIsIFtbXCJhZGRUb0FsbG9jYXRpb25cIiwgWyRozY9fYSA9PiAoYWRkVG9BbGxvY2F0aW9uID0gJGjNj19hKV1dLFtcInN1YnRyYWN0RnJvbUFsbG9jYXRpb25cIiwgWyRozY9fYSA9PiAoc3VidHJhY3RGcm9tQWxsb2NhdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQWxsb2NhdGlvbk1hcD0odHJhbnNmZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFsbG9jYXRpb25zPW1ha2VTY2FsYXJNYXBTdG9yZSgpO1xuXG5jb25zdCBnZXRBbGxvY2F0aW9ucz0oc2VhdCk9PntcbmlmKGFsbG9jYXRpb25zLmhhcyhzZWF0KSl7XG5yZXR1cm4gYWxsb2NhdGlvbnMuZ2V0KHNlYXQpO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGFpcj1bW10sW11dO1xuYWxsb2NhdGlvbnMuaW5pdChzZWF0LHBhaXIpO1xucmV0dXJuIHBhaXI7XG4gfTtcblxuY29uc3QgZGVjcmVtZW50QWxsb2NhdGlvbj0oc2VhdCxkZWNyZW1lbnQpPT57XG5jb25zdFtpbmNyLGRlY3JdPWdldEFsbG9jYXRpb25zKHNlYXQpO1xuXG5jb25zdCBuZXdEZWNyPVsuLi5kZWNyLGRlY3JlbWVudF07XG5hbGxvY2F0aW9ucy5zZXQoc2VhdCxbaW5jcixuZXdEZWNyXSk7XG4gfTtcblxuY29uc3QgaW5jcmVtZW50QWxsb2NhdGlvbj0oc2VhdCxpbmNyZW1lbnQpPT57XG5jb25zdFtpbmNyLGRlY3JdPWdldEFsbG9jYXRpb25zKHNlYXQpO1xuXG5jb25zdCBuZXdJbmNyPVsuLi5pbmNyLGluY3JlbWVudF07XG5hbGxvY2F0aW9ucy5zZXQoc2VhdCxbbmV3SW5jcixkZWNyXSk7XG4gfTtcblxuZm9yKGNvbnN0W2Zyb21TZWF0LHRvU2VhdCxmcm9tQW1vdW50cyx0b0Ftb3VudHNdb2YgdHJhbnNmZXJzKXtcbmlmKGZyb21TZWF0KXtcbmlmKCFmcm9tQW1vdW50cyl7XG50aHJvdyBGYWlsIGBUcmFuc2ZlciBmcm9tICR7ZnJvbVNlYXR9IG11c3Qgc2F5IGhvdyBtdWNoYDtcbiB9XG5kZWNyZW1lbnRBbGxvY2F0aW9uKGZyb21TZWF0LGZyb21BbW91bnRzKTtcbmlmKHRvU2VhdCl7XG4vL1xuaWYodG9BbW91bnRzKXtcbi8vXG5hc3NlcnRSaWdodHNDb25zZXJ2ZWQoXG5PYmplY3QudmFsdWVzKGZyb21BbW91bnRzKSxcbk9iamVjdC52YWx1ZXModG9BbW91bnRzKSk7XG5cbmluY3JlbWVudEFsbG9jYXRpb24odG9TZWF0LHRvQW1vdW50cyk7XG4gfWVsc2V7XG4vL1xuaW5jcmVtZW50QWxsb2NhdGlvbih0b1NlYXQsZnJvbUFtb3VudHMpO1xuIH1cbiB9ZWxzZXtcbi8vXG4hdG9BbW91bnRzfHxcbkZhaWwgYFRyYW5zZmVyIHdpdGhvdXQgdG9TZWF0IGNhbm5vdCBoYXZlIHRvQW1vdW50cyAke3RvQW1vdW50c31gO1xuIH1cbiB9ZWxzZXtcbnRvU2VhdHx8RmFpbCBgVHJhbnNmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiBmcm9tU2VhdCBvciB0b1NlYXRgO1xuLy9cbiFmcm9tQW1vdW50c3x8XG5GYWlsIGBUcmFuc2ZlciB3aXRob3V0IGZyb21TZWF0IGNhbm5vdCBoYXZlIGZyb21BbW91bnRzICR7ZnJvbUFtb3VudHN9YDtcbnRvQW1vdW50c3x8RmFpbCBgVHJhbnNmZXIgdG8gJHt0b1NlYXR9IG11c3Qgc2F5IGhvdyBtdWNoYDtcbmluY3JlbWVudEFsbG9jYXRpb24odG9TZWF0LHRvQW1vdW50cyk7XG4gfVxuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0aW5nQWxsb2NhdGlvbnM9W107XG5mb3IoY29uc3Rbc2VhdCxbaW5jckxpc3QsZGVjckxpc3RdXW9mIGFsbG9jYXRpb25zLmVudHJpZXMoKSl7XG5sZXQgbmV3QWxsb2M9c2VhdC5nZXRDdXJyZW50QWxsb2NhdGlvbigpO1xuZm9yKGNvbnN0IGluY3Igb2YgaW5jckxpc3Qpe1xubmV3QWxsb2M9YWRkVG9BbGxvY2F0aW9uKG5ld0FsbG9jLGluY3IpO1xuIH1cbmZvcihjb25zdCBkZWNyIG9mIGRlY3JMaXN0KXtcbm5ld0FsbG9jPXN1YnRyYWN0RnJvbUFsbG9jYXRpb24obmV3QWxsb2MsZGVjcik7XG4gfVxucmVzdWx0aW5nQWxsb2NhdGlvbnMucHVzaChbc2VhdCxuZXdBbGxvY10pO1xuIH1cbnJldHVybiByZXN1bHRpbmdBbGxvY2F0aW9ucztcbiB9OyRozY9fb25jZS5tYWtlQWxsb2NhdGlvbk1hcChtYWtlQWxsb2NhdGlvbk1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQWxsb2NhdGlvbk1hcCI6WyJtYWtlQWxsb2NhdGlvbk1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACs+Bv6sQkAALEJAAA7AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9yaWdodHNDb25zZXJ2YXRpb24uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvZXJ0cCIsIi4uL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmlnaHRzQ29uc2VydmVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLG1ha2VTY2FsYXJNYXBTdG9yZSxBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIi4uL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhc3NlcnRSaWdodHNDb25zZXJ2ZWQsICduYW1lJywge3ZhbHVlOiBcImFzc2VydFJpZ2h0c0NvbnNlcnZlZFwifSk7JGjNj19vbmNlLmFzc2VydFJpZ2h0c0NvbnNlcnZlZChhc3NlcnRSaWdodHNDb25zZXJ2ZWQpOyAgIFxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3VtQnlCcmFuZD0oYW1vdW50cyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdW1zQnlCcmFuZD1tYWtlU2NhbGFyTWFwU3RvcmUoJ2JyYW5kJyk7XG5mb3IoY29uc3QgYW1vdW50IG9mIGFtb3VudHMpe1xuY29uc3R7YnJhbmR9PWFtb3VudDtcbmlmKCFzdW1zQnlCcmFuZC5oYXMoYnJhbmQpKXtcbnN1bXNCeUJyYW5kLmluaXQoYnJhbmQsYW1vdW50KTtcbiB9ZWxzZXtcbmNvbnN0IHN1bVNvRmFyPXN1bXNCeUJyYW5kLmdldChicmFuZCk7XG5zdW1zQnlCcmFuZC5zZXQoYnJhbmQsQW1vdW50TWF0aC5hZGQoc3VtU29GYXIsYW1vdW50KSk7XG4gfVxuIH1cbnJldHVybiBzdW1zQnlCcmFuZDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydEVxdWFsUGVyQnJhbmQ9KGxlZnRTdW1zQnlCcmFuZCxyaWdodFN1bXNCeUJyYW5kKT0+e1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGdldFN1bXM9KGJyYW5kKT0+e1xubGV0IGxlZnRTdW07XG5sZXQgcmlnaHRTdW07XG5pZihsZWZ0U3Vtc0J5QnJhbmQuaGFzKGJyYW5kKSl7XG5sZWZ0U3VtPWxlZnRTdW1zQnlCcmFuZC5nZXQoYnJhbmQpO1xuIH1cbmlmKHJpZ2h0U3Vtc0J5QnJhbmQuaGFzKGJyYW5kKSl7XG5yaWdodFN1bT1yaWdodFN1bXNCeUJyYW5kLmdldChicmFuZCk7XG4gfVxuaWYobGVmdFN1bT09PXVuZGVmaW5lZCl7XG5hc3NlcnQocmlnaHRTdW0pO1xubGVmdFN1bT1BbW91bnRNYXRoLm1ha2VFbXB0eUZyb21BbW91bnQocmlnaHRTdW0pO1xuIH1cbmlmKHJpZ2h0U3VtPT09dW5kZWZpbmVkKXtcbnJpZ2h0U3VtPUFtb3VudE1hdGgubWFrZUVtcHR5RnJvbUFtb3VudChsZWZ0U3VtKTtcbiB9XG5yZXR1cm57bGVmdFN1bSxyaWdodFN1bX07XG4gfTtcblxuY29uc3QgYWxsQnJhbmRzPW5ldyBTZXQoW1xuLi4ubGVmdFN1bXNCeUJyYW5kLmtleXMoKSxcbi4uLnJpZ2h0U3Vtc0J5QnJhbmQua2V5cygpXSk7XG5cblxuZm9yKGNvbnN0IGJyYW5kIG9mIGFsbEJyYW5kcyl7XG5jb25zdHtsZWZ0U3VtLHJpZ2h0U3VtfT1nZXRTdW1zKGJyYW5kKTtcbkFtb3VudE1hdGguaXNFcXVhbChsZWZ0U3VtLHJpZ2h0U3VtKXx8XG5GYWlsIGByaWdodHMgd2VyZSBub3QgY29uc2VydmVkIGZvciBicmFuZCAke2JyYW5kfSAke2xlZnRTdW0udmFsdWV9ICE9ICR7cmlnaHRTdW0udmFsdWV9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFJpZ2h0c0NvbnNlcnZlZChwcmV2aW91c0Ftb3VudHMsbmV3QW1vdW50cyl7XG5jb25zdCBzdW1zUHJldkFtb3VudHM9c3VtQnlCcmFuZChwcmV2aW91c0Ftb3VudHMpO1xuY29uc3Qgc3Vtc05ld0Ftb3VudHM9c3VtQnlCcmFuZChuZXdBbW91bnRzKTtcbmFzc2VydEVxdWFsUGVyQnJhbmQoc3Vtc1ByZXZBbW91bnRzLHN1bXNOZXdBbW91bnRzKTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnRSaWdodHNDb25zZXJ2ZWQiOlsiYXNzZXJ0UmlnaHRzQ29uc2VydmVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMS+fFNuBQAAbgUAADMAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiWmNmSSIsIlpjZk1pbnRJIiwiWmNmU2VhdFNoYXBlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLElzc3VlclJlY29yZFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIi4uL3R5cGVHdWFyZHMuanNcIiwgW1tcIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoSXNzdWVyUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0ICAgICAgICBaY2ZTZWF0U2hhcGU9TS5yZW1vdGFibGUoJ3pjZlNlYXQnKTskaM2PX29uY2UuWmNmU2VhdFNoYXBlKFpjZlNlYXRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBaY2ZNaW50ST1NLmludGVyZmFjZSgnWmNmTWludCcse1xuZ2V0SXNzdWVyUmVjb3JkOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyUmVjb3JkU2hhcGUpLFxubWludEdhaW5zOk0uY2FsbChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpLlxub3B0aW9uYWwoWmNmU2VhdFNoYXBlKS5cbnJldHVybnMoWmNmU2VhdFNoYXBlKSxcbmJ1cm5Mb3NzZXM6TS5jYWxsKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxaY2ZTZWF0U2hhcGUpLnJldHVybnMoKX0pOyRozY9fb25jZS5aY2ZNaW50SShaY2ZNaW50SSk7XG5cblxuY29uc3QgICAgICAgIFpjZkk9TS5pbnRlcmZhY2UoXG4nWkNGJyxcbntcbm1ha2VJbnZpdGF0aW9uOk0uY2FsbChNLnJhdygpLE0uc3RyaW5nKCkpLlxub3B0aW9uYWwoTS5yZWNvcmQoKSxNLnBhdHRlcm4oKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnNldFRlc3RKaWc6TS5jYWxsKCkub3B0aW9uYWwoTS5yYXcoKSkucmV0dXJucygpfSxcblxue1xuZGVmYXVsdEd1YXJkczoncGFzc2FibGUnfSk7JGjNj19vbmNlLlpjZkkoWmNmSSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJaY2ZTZWF0U2hhcGUiOlsiWmNmU2VhdFNoYXBlIl0sIlpjZk1pbnRJIjpbIlpjZk1pbnRJIl0sIlpjZkkiOlsiWmNmSSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAIwpyyTAEAAEwBAAA2AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC90eXBlcy1hbWJpZW50LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPkeL6YfCQAAHwkAADAAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3ZhdFJvb3QuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2ZhciIsIi4uL2ludGVybmFsLXR5cGVzLmpzIiwiLi96Y2ZaeWdvdGUuanMiXSwiZXhwb3J0cyI6WyJidWlsZFJvb3RPYmplY3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsRSxtYWtlWkNGWnlnb3RlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCIuLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV0sW1wiLi96Y2ZaeWdvdGUuanNcIiwgW1tcIm1ha2VaQ0ZaeWdvdGVcIiwgWyRozY9fYSA9PiAobWFrZVpDRlp5Z290ZSA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1aWxkUm9vdE9iamVjdCwgJ25hbWUnLCB7dmFsdWU6IFwiYnVpbGRSb290T2JqZWN0XCJ9KTskaM2PX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBidWlsZFJvb3RPYmplY3QocG93ZXJzLHZhdFBhcmFtZXRlcnMsYmFnZ2FnZSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e3Rlc3RKaWdTZXR0ZXJ9PXBvd2VycztcbmNvbnN0e2NvbnRyYWN0QnVuZGxlQ2FwfT12YXRQYXJhbWV0ZXJzO1xuY29udHJhY3RCdW5kbGVDYXB8fFxuRmFpbCBgZXhwZWN0ZWQgdmF0UGFyYW1ldGVycy5jb250cmFjdEJ1bmRsZUNhcCAke3ZhdFBhcmFtZXRlcnN9YDtcbmxldHt6b2VTZXJ2aWNlLGludml0YXRpb25Jc3N1ZXJ9PXZhdFBhcmFtZXRlcnM7XG5jb25zdCBmaXJzdFRpbWU9IWJhZ2dhZ2UuaGFzKCdEaWRTdGFydCcpO1xuaWYoZmlyc3RUaW1lKXtcbmJhZ2dhZ2UuaW5pdCgnRGlkU3RhcnQnLCdEaWRTdGFydCcpO1xuYmFnZ2FnZS5pbml0KCd6b2VTZXJ2aWNlJyx6b2VTZXJ2aWNlKTtcbmJhZ2dhZ2UuaW5pdCgnaW52aXRhdGlvbklzc3VlcicsaW52aXRhdGlvbklzc3Vlcik7XG4gfWVsc2V7XG4hem9lU2VydmljZXx8RmFpbCBgT24gcmVzdGFydCB6b2VTZXJ2aWNlIG11c3Qgbm90IGJlIGluIHZhdFBhcmFtZXRlcnNgO1xuem9lU2VydmljZT1iYWdnYWdlLmdldCgnem9lU2VydmljZScpO1xuXG4haW52aXRhdGlvbklzc3Vlcnx8XG5GYWlsIGBPbiByZXN0YXJ0IGludml0YXRpb25Jc3N1ZXIgbXVzdCBub3QgYmUgaW4gdmF0UGFyYW1ldGVyc2A7XG5pbnZpdGF0aW9uSXNzdWVyPWJhZ2dhZ2UuZ2V0KCdpbnZpdGF0aW9uSXNzdWVyJyk7XG4gfVxuXG4vL1xuY29uc3QgemNmWnlnb3RlPWF3YWl0IG1ha2VaQ0ZaeWdvdGUoXG5wb3dlcnMsXG56b2VTZXJ2aWNlLFxuaW52aXRhdGlvbklzc3VlcixcbnRlc3RKaWdTZXR0ZXIsXG5jb250cmFjdEJ1bmRsZUNhcCxcbmJhZ2dhZ2UpO1xuXG5cbi8vXG5cbmlmKCFmaXJzdFRpbWUpe1xucmV0dXJuIEUud2hlbihFKHpjZlp5Z290ZSkucmVzdGFydENvbnRyYWN0KHZhdFBhcmFtZXRlcnMucHJpdmF0ZUFyZ3MpLCgpPT5cbkZhcigndXBncmFkZWQgY29udHJhY3RSdW5uZXInLHt9KSk7XG5cbiB9XG5cbnJldHVybiBGYXIoJ2NvbnRyYWN0UnVubmVyJyx7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbnN0YXJ0WmNmOihcbnpvZUluc3RhbmNlQWRtaW4sXG5pbnN0YW5jZVJlY29yZEZyb21ab2UsXG5pc3N1ZXJTdG9yYWdlRnJvbVpvZSxcbnByaXZhdGVBcmdzPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgICovXG5yZXR1cm4gRSh6Y2ZaeWdvdGUpLnN0YXJ0Q29udHJhY3QoXG56b2VJbnN0YW5jZUFkbWluLFxuaW5zdGFuY2VSZWNvcmRGcm9tWm9lLFxuaXNzdWVyU3RvcmFnZUZyb21ab2UsXG5wcml2YXRlQXJncyk7XG5cbiB9fSk7XG5cbiB9XG5cbmhhcmRlbihidWlsZFJvb3RPYmplY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYnVpbGRSb290T2JqZWN0IjpbImJ1aWxkUm9vdE9iamVjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABLw556QRIAAEESAAAwAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC96Y2ZNaW50LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi4vY2xlYW5Qcm9wb3NhbC5qcyIsIi4uL2lzc3VlclJlY29yZC5qcyIsIi4vYWxsb2NhdGlvbk1hdGguanMiLCIuLi9pbnRlcm5hbC10eXBlcy5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiLCIuL3R5cGVzLWFtYmllbnQuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlWmNNaW50Iiwic3VtQW1vdW50S2V5d29yZFJlY29yZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUsQW1vdW50TWF0aCxwcmVwYXJlRXhvQ2xhc3MsY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCxhc3NlcnRGdWxsSXNzdWVyUmVjb3JkLG1ha2VJc3N1ZXJSZWNvcmQsYWRkVG9BbGxvY2F0aW9uLHN1YnRyYWN0RnJvbUFsbG9jYXRpb24sWmNmTWludEk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXV1dLFtcIi4uL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmRcIiwgWyRozY9fYSA9PiAoY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCA9ICRozY9fYSldXV1dLFtcIi4uL2lzc3VlclJlY29yZC5qc1wiLCBbW1wiYXNzZXJ0RnVsbElzc3VlclJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRGdWxsSXNzdWVyUmVjb3JkID0gJGjNj19hKV1dLFtcIm1ha2VJc3N1ZXJSZWNvcmRcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclJlY29yZCA9ICRozY9fYSldXV1dLFtcIi4vYWxsb2NhdGlvbk1hdGguanNcIiwgW1tcImFkZFRvQWxsb2NhdGlvblwiLCBbJGjNj19hID0+IChhZGRUb0FsbG9jYXRpb24gPSAkaM2PX2EpXV0sW1wic3VidHJhY3RGcm9tQWxsb2NhdGlvblwiLCBbJGjNj19hID0+IChzdWJ0cmFjdEZyb21BbGxvY2F0aW9uID0gJGjNj19hKV1dXV0sW1wiLi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiWmNmTWludElcIiwgWyRozY9fYSA9PiAoWmNmTWludEkgPSAkaM2PX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWFtYmllbnQuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdW1BbW91bnRLZXl3b3JkUmVjb3JkPShhbXIsaXNzdWVyUmVjb3JkKT0+e1xuY29uc3QgZW1wdHk9QW1vdW50TWF0aC5tYWtlRW1wdHkoXG5pc3N1ZXJSZWNvcmQuYnJhbmQsXG5pc3N1ZXJSZWNvcmQuYXNzZXRLaW5kKTtcblxucmV0dXJuIE9iamVjdC52YWx1ZXMoYW1yKS5yZWR1Y2UoXG4odG90YWwsYW1vdW50VG9BZGQpPT5cbkFtb3VudE1hdGguYWRkKHRvdGFsLGFtb3VudFRvQWRkLGlzc3VlclJlY29yZC5icmFuZCksXG5lbXB0eSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zdW1BbW91bnRLZXl3b3JkUmVjb3JkKHN1bUFtb3VudEtleXdvcmRSZWNvcmQpO1xuY29uc3QgICAgICAgIHByZXBhcmVaY01pbnQ9KFxuemNmQmFnZ2FnZSxcbnJlY29yZElzc3VlcixcbmdldEFzc2V0S2luZEJ5QnJhbmQsXG5tYWtlRW1wdHlTZWF0S2l0LFxucmVhbGxvY2F0b3IpPT5cbntcbmNvbnN0IG1ha2VaY01pbnRJbnRlcm5hbD1wcmVwYXJlRXhvQ2xhc3MoXG56Y2ZCYWdnYWdlLFxuJ3pjZk1pbnQnLFxuWmNmTWludEksXG4vKlxuXG5cblxuXG4gICAgICovXG4oa2V5d29yZCx6b2VNaW50LGlzc3VlclJlY29yZCk9PntcbmNvbnN0e1xuYnJhbmQ6bWludHlCcmFuZCxcbmlzc3VlcjptaW50eUlzc3VlcixcbmRpc3BsYXlJbmZvOm1pbnR5RGlzcGxheUluZm99PVxuaXNzdWVyUmVjb3JkO1xuXG5jb25zdCBtaW50eUlzc3VlclJlY29yZD1tYWtlSXNzdWVyUmVjb3JkKFxubWludHlCcmFuZCxcbm1pbnR5SXNzdWVyLFxubWludHlEaXNwbGF5SW5mbyk7XG5cbnJlY29yZElzc3VlcihrZXl3b3JkLG1pbnR5SXNzdWVyUmVjb3JkKTtcblxucmV0dXJue2tleXdvcmQsem9lTWludCxtaW50eUlzc3VlclJlY29yZH07XG4gfSxcbntcbmdldElzc3VlclJlY29yZCgpe1xucmV0dXJuIHRoaXMuc3RhdGUubWludHlJc3N1ZXJSZWNvcmQ7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1pbnRHYWlucyhnYWlucyx6Y2ZTZWF0PW1ha2VFbXB0eVNlYXRLaXQoKS56Y2ZTZWF0KXtcbmNvbnN0e21pbnR5SXNzdWVyUmVjb3JkLHpvZU1pbnR9PXRoaXMuc3RhdGU7XG5nYWlucz1jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKGdhaW5zLGdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5jb25zdCB0b3RhbFRvTWludD1zdW1BbW91bnRLZXl3b3JkUmVjb3JkKGdhaW5zLG1pbnR5SXNzdWVyUmVjb3JkKTtcblxuIXpjZlNlYXQuaGFzRXhpdGVkKCl8fFxuRmFpbCBgemNmU2VhdCBtdXN0IGJlIGFjdGl2ZSB0byBtaW50IGdhaW5zIGZvciB0aGUgemNmU2VhdGA7XG5jb25zdCBhbGxvY2F0aW9uUGx1c0dhaW5zPWFkZFRvQWxsb2NhdGlvbihcbnpjZlNlYXQuZ2V0Q3VycmVudEFsbG9jYXRpb24oKSxcbmdhaW5zKTtcblxuXG4vL1xuLy9cbmlmKHpjZlNlYXQuaGFzU3RhZ2VkQWxsb2NhdGlvbigpKXtcbnpjZlNlYXQuaW5jcmVtZW50QnkoZ2FpbnMpO1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbnpjZlNlYXQuaXNPZmZlclNhZmUoYWxsb2NhdGlvblBsdXNHYWlucyl8fFxuRmFpbCBgVGhlIGFsbG9jYXRpb24gYWZ0ZXIgbWludGluZyBnYWlucyAke2FsbG9jYXRpb25QbHVzR2FpbnN9IGZvciB0aGUgemNmU2VhdCB3YXMgbm90IG9mZmVyIHNhZmVgO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG52b2lkIEUoem9lTWludCkubWludEFuZEVzY3Jvdyh0b3RhbFRvTWludCk7XG5yZWFsbG9jYXRvci5yZWFsbG9jYXRlKHpjZlNlYXQsYWxsb2NhdGlvblBsdXNHYWlucyk7XG5yZXR1cm4gemNmU2VhdDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbmJ1cm5Mb3NzZXMobG9zc2VzLHpjZlNlYXQpe1xuY29uc3R7bWludHlJc3N1ZXJSZWNvcmQsem9lTWludH09dGhpcy5zdGF0ZTtcbmxvc3Nlcz1jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKGxvc3NlcyxnZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuY29uc3QgdG90YWxUb0J1cm49c3VtQW1vdW50S2V5d29yZFJlY29yZChsb3NzZXMsbWludHlJc3N1ZXJSZWNvcmQpO1xuXG4hemNmU2VhdC5oYXNFeGl0ZWQoKXx8XG5GYWlsIGB6Y2ZTZWF0IG11c3QgYmUgYWN0aXZlIHRvIGJ1cm4gbG9zc2VzIGZyb20gdGhlIHpjZlNlYXRgO1xuY29uc3QgYWxsb2NhdGlvbk1pbnVzTG9zc2VzPXN1YnRyYWN0RnJvbUFsbG9jYXRpb24oXG56Y2ZTZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCksXG5sb3NzZXMpO1xuXG5cbi8vXG56Y2ZTZWF0LmlzT2ZmZXJTYWZlKGFsbG9jYXRpb25NaW51c0xvc3Nlcyl8fFxuRmFpbCBgVGhlIGFsbG9jYXRpb24gYWZ0ZXIgYnVybmluZyBsb3NzZXMgJHthbGxvY2F0aW9uTWludXNMb3NzZXN9IGZvciB0aGUgemNmU2VhdCB3YXMgbm90IG9mZmVyIHNhZmVgO1xuXG4vL1xuLy9cbmlmKHpjZlNlYXQuaGFzU3RhZ2VkQWxsb2NhdGlvbigpKXtcbnpjZlNlYXQuZGVjcmVtZW50QnkobG9zc2VzKTtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVhbGxvY2F0b3IucmVhbGxvY2F0ZSh6Y2ZTZWF0LGFsbG9jYXRpb25NaW51c0xvc3Nlcyk7XG52b2lkIEUoem9lTWludCkud2l0aGRyYXdBbmRCdXJuKHRvdGFsVG9CdXJuKTtcbiB9fSk7XG5cblxuXG4vKlxuXG5cblxuXG4gICAqL1xucmV0dXJuIGFzeW5jKGtleXdvcmQsem9lTWludFApPT57XG5jb25zdFt6b2VNaW50LGlzc3VlclJlY29yZF09YXdhaXQgUHJvbWlzZS5hbGwoW1xuem9lTWludFAsXG5FKHpvZU1pbnRQKS5nZXRJc3N1ZXJSZWNvcmQoKV0pO1xuXG5hc3NlcnRGdWxsSXNzdWVyUmVjb3JkKGlzc3VlclJlY29yZCk7XG4vL1xucmV0dXJuIG1ha2VaY01pbnRJbnRlcm5hbChrZXl3b3JkLHpvZU1pbnQsaXNzdWVyUmVjb3JkKTtcbiB9O1xuIH07JGjNj19vbmNlLnByZXBhcmVaY01pbnQocHJlcGFyZVpjTWludCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdW1BbW91bnRLZXl3b3JkUmVjb3JkIjpbInN1bUFtb3VudEtleXdvcmRSZWNvcmQiXSwicHJlcGFyZVpjTWludCI6WyJwcmVwYXJlWmNNaW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFx65lubMAAAmzAAADAAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3pjZlNlYXQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3N0b3JlIiwiLi9vZmZlclNhZmV0eS5qcyIsIi4vcmlnaHRzQ29uc2VydmF0aW9uLmpzIiwiLi9hbGxvY2F0aW9uTWF0aC5qcyIsIi4uL2NsZWFuUHJvcG9zYWwuanMiLCIuLi90eXBlR3VhcmRzLmpzIiwiLi9yZWFsbG9jYXRlLmpzIiwiLi4vY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzIl0sImV4cG9ydHMiOlsiY3JlYXRlU2VhdE1hbmFnZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYW5ub3RhdGVFcnJvcixGYWlsLEUsbWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGUscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxBbW91bnRNYXRoLGluaXRFbXB0eSxNLGlzT2ZmZXJTYWZlLGFzc2VydFJpZ2h0c0NvbnNlcnZlZCxhZGRUb0FsbG9jYXRpb24sc3VidHJhY3RGcm9tQWxsb2NhdGlvbixjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkLEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxTZWF0RGF0YVNoYXBlLFNlYXRTaGFwZSxtYWtlQWxsb2NhdGlvbk1hcCxUcmFuc2ZlclBhcnRTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV0sW1wicHJvdmlkZVwiLCBbJGjNj19hID0+IChwcm92aWRlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCIuL29mZmVyU2FmZXR5LmpzXCIsIFtbXCJpc09mZmVyU2FmZVwiLCBbJGjNj19hID0+IChpc09mZmVyU2FmZSA9ICRozY9fYSldXV1dLFtcIi4vcmlnaHRzQ29uc2VydmF0aW9uLmpzXCIsIFtbXCJhc3NlcnRSaWdodHNDb25zZXJ2ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmlnaHRzQ29uc2VydmVkID0gJGjNj19hKV1dXV0sW1wiLi9hbGxvY2F0aW9uTWF0aC5qc1wiLCBbW1wiYWRkVG9BbGxvY2F0aW9uXCIsIFskaM2PX2EgPT4gKGFkZFRvQWxsb2NhdGlvbiA9ICRozY9fYSldXSxbXCJzdWJ0cmFjdEZyb21BbGxvY2F0aW9uXCIsIFskaM2PX2EgPT4gKHN1YnRyYWN0RnJvbUFsbG9jYXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuLi9jbGVhblByb3Bvc2FsLmpzXCIsIFtbXCJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQgPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlNlYXREYXRhU2hhcGVcIiwgWyRozY9fYSA9PiAoU2VhdERhdGFTaGFwZSA9ICRozY9fYSldXSxbXCJTZWF0U2hhcGVcIiwgWyRozY9fYSA9PiAoU2VhdFNoYXBlID0gJGjNj19hKV1dXV0sW1wiLi9yZWFsbG9jYXRlLmpzXCIsIFtbXCJtYWtlQWxsb2NhdGlvbk1hcFwiLCBbJGjNj19hID0+IChtYWtlQWxsb2NhdGlvbk1hcCA9ICRozY9fYSldXV1dLFtcIi4uL2NvbnRyYWN0U3VwcG9ydC9hdG9taWNUcmFuc2Zlci5qc1wiLCBbW1wiVHJhbnNmZXJQYXJ0U2hhcGVcIiwgWyRozY9fYSA9PiAoVHJhbnNmZXJQYXJ0U2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjcmVhdGVTZWF0TWFuYWdlcj0oXG56b2VJbnN0YW5jZUFkbWluLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCxcbnNodXRkb3duV2l0aEZhaWx1cmUsXG56Y2ZCYWdnYWdlKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYWN0aXZlWkNGU2VhdHM9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoemNmQmFnZ2FnZSwnYWN0aXZlWkNGU2VhdHMnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB6Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucz1wcm92aWRlRHVyYWJsZU1hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbid6Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucycpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHpjZlNlYXRUb1NlYXRIYW5kbGU9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoXG56Y2ZCYWdnYWdlLFxuJ3pjZlNlYXRUb1NlYXRIYW5kbGUnKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaGFzRXhpdGVkPSh6Y2ZTZWF0KT0+IWFjdGl2ZVpDRlNlYXRzLmhhcyh6Y2ZTZWF0KTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QWN0aXZlPSh6Y2ZTZWF0KT0+e1xuYWN0aXZlWkNGU2VhdHMuaGFzKHpjZlNlYXQpfHxGYWlsIGBzZWF0IGhhcyBiZWVuIGV4aXRlZGA7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZG9FeGl0U2VhdD0oemNmU2VhdCk9PntcbmFzc2VydEFjdGl2ZSh6Y2ZTZWF0KTtcbmFjdGl2ZVpDRlNlYXRzLmRlbGV0ZSh6Y2ZTZWF0KTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRDdXJyZW50QWxsb2NhdGlvbj0oemNmU2VhdCk9Pntcbi8vXG4vL1xuYXNzZXJ0QWN0aXZlKHpjZlNlYXQpO1xucmV0dXJuIGFjdGl2ZVpDRlNlYXRzLmdldCh6Y2ZTZWF0KTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBjb21taXRTdGFnZWRBbGxvY2F0aW9uPSh6Y2ZTZWF0KT0+e1xuLy9cbi8vXG5hY3RpdmVaQ0ZTZWF0cy5zZXQoemNmU2VhdCx6Y2ZTZWF0LmdldFN0YWdlZEFsbG9jYXRpb24oKSk7XG56Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5kZWxldGUoemNmU2VhdCk7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgaGFzU3RhZ2VkQWxsb2NhdGlvbj16Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5oYXM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0U3RhZ2VkQWxsb2NhdGlvbj0oemNmU2VhdCk9PntcbmlmKHpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmhhcyh6Y2ZTZWF0KSl7XG5yZXR1cm4gemNmU2VhdFRvU3RhZ2VkQWxsb2NhdGlvbnMuZ2V0KHpjZlNlYXQpO1xuIH1lbHNle1xucmV0dXJuIGFjdGl2ZVpDRlNlYXRzLmdldCh6Y2ZTZWF0KTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0U3RhZ2VkQWxsb2NhdGlvbj0oemNmU2VhdCk9Pntcbmhhc1N0YWdlZEFsbG9jYXRpb24oemNmU2VhdCl8fFxuRmFpbCBgUmVhbGxvY2F0ZSBmYWlsZWQgYmVjYXVzZSBhIHNlYXQgaGFkIG5vIHN0YWdlZCBhbGxvY2F0aW9uLiBQbGVhc2UgYWRkIG9yIHN1YnRyYWN0IGZyb20gdGhlIHNlYXQgYW5kIHRoZW4gcmVhbGxvY2F0ZS5gO1xuIH07XG5cbmNvbnN0IHNldFN0YWdlZEFsbG9jYXRpb249KHpjZlNlYXQsbmV3U3RhZ2VkQWxsb2NhdGlvbik9PntcbmlmKHpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmhhcyh6Y2ZTZWF0KSl7XG56Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5zZXQoemNmU2VhdCxuZXdTdGFnZWRBbGxvY2F0aW9uKTtcbiB9ZWxzZXtcbnpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmluaXQoemNmU2VhdCxuZXdTdGFnZWRBbGxvY2F0aW9uKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0Tm9TdGFnZWRBbGxvY2F0aW9uPSh6Y2ZTZWF0KT0+e1xuaWYoaGFzU3RhZ2VkQWxsb2NhdGlvbih6Y2ZTZWF0KSl7XG5GYWlsIGBUaGUgc2VhdCBjb3VsZCBub3QgYmUgZXhpdGVkIHdpdGggYSBzdGFnZWQgYnV0IHVuY29tbWl0dGVkIGFsbG9jYXRpb246ICR7Z2V0U3RhZ2VkQWxsb2NhdGlvbihcbnpjZlNlYXQpXG4gfS4gUGxlYXNlIHJlYWxsb2NhdGUgb3ZlciB0aGlzIHNlYXQgb3IgY2xlYXIgdGhlIHN0YWdlZCBhbGxvY2F0aW9uLmA7XG4gfVxuIH07XG5cbmNvbnN0IFpDRlNlYXRJPU0uaW50ZXJmYWNlKCdaQ0ZTZWF0Jyx7fSx7c2xvcHB5OnRydWV9KTtcblxuY29uc3QgbWFrZVpDRlNlYXRJbnRlcm5hbD1wcmVwYXJlRXhvQ2xhc3MoXG56Y2ZCYWdnYWdlLFxuJ3pjZlNlYXQnLFxuWkNGU2VhdEksXG4ocHJvcG9zYWwpPT4oe3Byb3Bvc2FsfSksXG57XG5nZXRTdWJzY3JpYmVyKCl7XG5jb25zdHtzZWxmfT10aGlzO1xucmV0dXJuIEUoem9lSW5zdGFuY2VBZG1pbikuZ2V0RXhpdFN1YnNjcmliZXIoXG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmdldChzZWxmKSk7XG5cbiB9LFxuZ2V0UHJvcG9zYWwoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnByb3Bvc2FsO1xuIH0sXG5leGl0KGNvbXBsZXRpb24pe1xuY29uc3R7c2VsZn09dGhpcztcbmFzc2VydEFjdGl2ZShzZWxmKTtcbmFzc2VydE5vU3RhZ2VkQWxsb2NhdGlvbihzZWxmKTtcbmRvRXhpdFNlYXQoc2VsZik7XG52b2lkIEUoem9lSW5zdGFuY2VBZG1pbikuZXhpdFNlYXQoXG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmdldChzZWxmKSxcbmNvbXBsZXRpb24pO1xuXG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmRlbGV0ZShzZWxmKTtcbiB9LFxuZmFpbChcbnJlYXNvbj1FcnJvcihcbidTZWF0IGV4aXRlZCB3aXRoIGZhaWx1cmUuIFBsZWFzZSBjaGVjayB0aGUgbG9nIGZvciBtb3JlIGluZm9ybWF0aW9uLicpKVxuXG57XG5jb25zdHtzZWxmfT10aGlzO1xuaWYodHlwZW9mIHJlYXNvbj09PSdzdHJpbmcnKXtcbnJlYXNvbj1FcnJvcihyZWFzb24pO1xuYW5ub3RhdGVFcnJvcihcbnJlYXNvbixcbidaQ0ZTZWF0LmZhaWwgd2FzIGNhbGxlZCB3aXRoIGEgc3RyaW5nIHJlYXNvbiwgYnV0IHJlcXVpcmVzIGFuIEVycm9yIGFyZ3VtZW50LicpO1xuXG4gfVxuaWYoIWhhc0V4aXRlZChzZWxmKSl7XG5kb0V4aXRTZWF0KHNlbGYpO1xudm9pZCBFKHpvZUluc3RhbmNlQWRtaW4pLmZhaWxTZWF0KFxuemNmU2VhdFRvU2VhdEhhbmRsZS5nZXQoc2VsZiksXG5oYXJkZW4ocmVhc29uKSk7XG5cbnpjZlNlYXRUb1NlYXRIYW5kbGUuZGVsZXRlKHNlbGYpO1xuIH1cbnJldHVybiByZWFzb247XG4gfSxcbmhhc0V4aXRlZCgpe1xuY29uc3R7c2VsZn09dGhpcztcbnJldHVybiBoYXNFeGl0ZWQoc2VsZik7XG4gfSxcblxuLypcblxuICAgICAgICovXG5nZXRBbW91bnRBbGxvY2F0ZWQoa2V5d29yZCxicmFuZCl7XG5jb25zdHtzZWxmfT10aGlzO1xuYXNzZXJ0QWN0aXZlKHNlbGYpO1xuY29uc3QgY3VycmVudEFsbG9jYXRpb249Z2V0Q3VycmVudEFsbG9jYXRpb24oc2VsZik7XG5pZihjdXJyZW50QWxsb2NhdGlvbltrZXl3b3JkXSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGN1cnJlbnRBbGxvY2F0aW9uW2tleXdvcmRdO1xuIH1cbmlmKCFicmFuZCl7XG50aHJvdyBGYWlsIGBBIGJyYW5kIG11c3QgYmUgc3VwcGxpZWQgd2hlbiB0aGUga2V5d29yZCBpcyBub3QgZGVmaW5lZGA7XG4gfVxuY29uc3QgYXNzZXRLaW5kPWdldEFzc2V0S2luZEJ5QnJhbmQoYnJhbmQpO1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuIH0sXG5nZXRDdXJyZW50QWxsb2NhdGlvbigpe1xuY29uc3R7c2VsZn09dGhpcztcbnJldHVybiBnZXRDdXJyZW50QWxsb2NhdGlvbihzZWxmKTtcbiB9LFxuZ2V0U3RhZ2VkQWxsb2NhdGlvbigpe1xuY29uc3R7c2VsZn09dGhpcztcbnJldHVybiBnZXRTdGFnZWRBbGxvY2F0aW9uKHNlbGYpO1xuIH0sXG5pc09mZmVyU2FmZShuZXdBbGxvY2F0aW9uKXtcbmNvbnN0e3N0YXRlLHNlbGZ9PXRoaXM7XG5hc3NlcnRBY3RpdmUoc2VsZik7XG5jb25zdCBjdXJyZW50QWxsb2NhdGlvbj1nZXRDdXJyZW50QWxsb2NhdGlvbihzZWxmKTtcbmNvbnN0IHJlYWxsb2NhdGlvbj1oYXJkZW4oe1xuLi4uY3VycmVudEFsbG9jYXRpb24sXG4uLi5uZXdBbGxvY2F0aW9ufSk7XG5cblxucmV0dXJuIGlzT2ZmZXJTYWZlKHN0YXRlLnByb3Bvc2FsLHJlYWxsb2NhdGlvbik7XG4gfSxcbi8qXG5cblxuICAgICAgICovXG5pbmNyZW1lbnRCeShhbW91bnRLZXl3b3JkUmVjb3JkKXtcbmNvbnN0e3NlbGZ9PXRoaXM7XG5hc3NlcnRBY3RpdmUoc2VsZik7XG5hbW91bnRLZXl3b3JkUmVjb3JkPWNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQoXG5hbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbnNldFN0YWdlZEFsbG9jYXRpb24oXG5zZWxmLFxuYWRkVG9BbGxvY2F0aW9uKGdldFN0YWdlZEFsbG9jYXRpb24oc2VsZiksYW1vdW50S2V5d29yZFJlY29yZCkpO1xuXG5yZXR1cm4gYW1vdW50S2V5d29yZFJlY29yZDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbmRlY3JlbWVudEJ5KGFtb3VudEtleXdvcmRSZWNvcmQpe1xuY29uc3R7c2VsZn09dGhpcztcbmFzc2VydEFjdGl2ZShzZWxmKTtcbmFtb3VudEtleXdvcmRSZWNvcmQ9Y29lcmNlQW1vdW50S2V5d29yZFJlY29yZChcbmFtb3VudEtleXdvcmRSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuc2V0U3RhZ2VkQWxsb2NhdGlvbihcbnNlbGYsXG5zdWJ0cmFjdEZyb21BbGxvY2F0aW9uKFxuZ2V0U3RhZ2VkQWxsb2NhdGlvbihzZWxmKSxcbmFtb3VudEtleXdvcmRSZWNvcmQpKTtcblxuXG5yZXR1cm4gYW1vdW50S2V5d29yZFJlY29yZDtcbiB9LFxuY2xlYXIoKXtcbmNvbnN0e3NlbGZ9PXRoaXM7XG5pZih6Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5oYXMoc2VsZikpe1xuemNmU2VhdFRvU3RhZ2VkQWxsb2NhdGlvbnMuZGVsZXRlKHNlbGYpO1xuIH1cbiB9LFxuaGFzU3RhZ2VkQWxsb2NhdGlvbigpe1xuY29uc3R7c2VsZn09dGhpcztcbnJldHVybiBoYXNTdGFnZWRBbGxvY2F0aW9uKHNlbGYpO1xuIH19KTtcblxuXG5cbmNvbnN0IHJlcGxhY2VEdXJhYmxlV2Vha01hcFN0b3JlPShiYWdnYWdlLGtleSk9PntcbmNvbnN0IG1hcFN0b3JlPW1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUoa2V5LHtkdXJhYmxlOnRydWV9KTtcbmJhZ2dhZ2Uuc2V0KGtleSxtYXBTdG9yZSk7XG5yZXR1cm4gbWFwU3RvcmU7XG4gfTtcblxuY29uc3QgWmNmU2VhdE1hbmFnZXJJS2l0PWhhcmRlbih7XG5zZWF0TWFuYWdlcjpNLmludGVyZmFjZSgnWmNmU2VhdE1hbmFnZXInLHtcbm1ha2VaQ0ZTZWF0Ok0uY2FsbChTZWF0RGF0YVNoYXBlKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCd6Y2ZTZWF0JykpLFxuYXRvbWljUmVhcnJhbmdlOk0uY2FsbChNLmFycmF5T2YoVHJhbnNmZXJQYXJ0U2hhcGUpKS5yZXR1cm5zKCksXG5yZWFsbG9jYXRlOk0uY2FsbChNLnJlbW90YWJsZSgnemNmU2VhdCcpLE0ucmVtb3RhYmxlKCd6Y2ZTZWF0JykpLlxucmVzdChNLmFycmF5T2YoTS5yZW1vdGFibGUoJ3pjZlNlYXQnKSkpLlxucmV0dXJucygpLFxuZHJvcEFsbFJlZmVyZW5jZXM6TS5jYWxsKCkucmV0dXJucygpfSksXG5cbnpjZk1pbnRSZWFsbG9jYXRvcjpNLmludGVyZmFjZSgnTWludFJlYWxsb2NhdG9yJyx7XG5yZWFsbG9jYXRlOk0uY2FsbChTZWF0U2hhcGUsQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKCl9KX0pO1xuXG5cblxuY29uc3QgbWFrZVNlYXRNYW5hZ2VyS2l0PXByZXBhcmVFeG9DbGFzc0tpdChcbnpjZkJhZ2dhZ2UsXG4nWmNmU2VhdE1hbmFnZXInLFxuWmNmU2VhdE1hbmFnZXJJS2l0LFxuaW5pdEVtcHR5LFxue1xuc2VhdE1hbmFnZXI6e1xubWFrZVpDRlNlYXQoe3Byb3Bvc2FsLGluaXRpYWxBbGxvY2F0aW9uLHNlYXRIYW5kbGV9KXtcbmNvbnN0IHpjZlNlYXQ9bWFrZVpDRlNlYXRJbnRlcm5hbChwcm9wb3NhbCk7XG5hY3RpdmVaQ0ZTZWF0cy5pbml0KHpjZlNlYXQsaW5pdGlhbEFsbG9jYXRpb24pO1xuemNmU2VhdFRvU2VhdEhhbmRsZS5pbml0KHpjZlNlYXQsc2VhdEhhbmRsZSk7XG5yZXR1cm4gemNmU2VhdDtcbiB9LFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuYXRvbWljUmVhcnJhbmdlKHRyYW5zZmVycyl7XG5jb25zdCBuZXdBbGxvY2F0aW9ucz1tYWtlQWxsb2NhdGlvbk1hcCh0cmFuc2ZlcnMpO1xuXG4vL1xuZm9yKGNvbnN0W3NlYXRdb2YgbmV3QWxsb2NhdGlvbnMpe1xuYXNzZXJ0QWN0aXZlKHNlYXQpO1xuIXNlYXQuaGFzU3RhZ2VkQWxsb2NhdGlvbigpfHxcbkZhaWwgYENhbm5vdCBtaXggYXRvbWljUmVhcnJhbmdlIHdpdGggc2VhdCBzdGFnaW5nczogJHtzZWF0fWA7XG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmhhcyhzZWF0KXx8XG5GYWlsIGBUaGUgc2VhdCAke3NlYXR9IHdhcyBub3QgcmVjb2duaXplZGA7XG4gfVxuXG4vL1xuXG4vL1xuY29uc3QgZmxhdHRlbkFtb3VudHM9KGFsbG9jYXRpb25zKT0+XG5hbGxvY2F0aW9ucy5mbGF0TWFwKE9iamVjdC52YWx1ZXMpO1xuY29uc3QgcHJldmlvdXNBbW91bnRzPWZsYXR0ZW5BbW91bnRzKFxubmV3QWxsb2NhdGlvbnMubWFwKChbc2VhdF0pPT5zZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCkpKTtcblxuY29uc3QgbmV3QW1vdW50cz1mbGF0dGVuQW1vdW50cyhcbm5ld0FsbG9jYXRpb25zLm1hcCgoW18sYWxsb2NhdGlvbl0pPT5hbGxvY2F0aW9uKSk7XG5cbmFzc2VydFJpZ2h0c0NvbnNlcnZlZChwcmV2aW91c0Ftb3VudHMsbmV3QW1vdW50cyk7XG5cbi8vXG5mb3IoY29uc3Rbc2VhdCxhbGxvY2F0aW9uXW9mIG5ld0FsbG9jYXRpb25zKXtcbmlzT2ZmZXJTYWZlKHNlYXQuZ2V0UHJvcG9zYWwoKSxhbGxvY2F0aW9uKXx8XG5GYWlsIGBPZmZlciBzYWZldHkgd2FzIHZpb2xhdGVkIGJ5IHRoZSBwcm9wb3NlZCBhbGxvY2F0aW9uOiAke2FsbG9jYXRpb259LiBQcm9wb3NhbCB3YXMgJHtzZWF0LmdldFByb3Bvc2FsKCl9YDtcbiB9XG5cbmNvbnN0IHNlYXRIYW5kbGVBbGxvY2F0aW9ucz1uZXdBbGxvY2F0aW9ucy5tYXAoXG4oW3NlYXQsYWxsb2NhdGlvbl0pPT57XG5jb25zdCBzZWF0SGFuZGxlPXpjZlNlYXRUb1NlYXRIYW5kbGUuZ2V0KHNlYXQpO1xucmV0dXJue2FsbG9jYXRpb24sc2VhdEhhbmRsZX07XG4gfSk7XG5cbnRyeXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5mb3IoY29uc3Rbc2VhdCxhbGxvY2F0aW9uXW9mIG5ld0FsbG9jYXRpb25zKXtcbmFjdGl2ZVpDRlNlYXRzLnNldChzZWF0LGFsbG9jYXRpb24pO1xuIH1cblxuLy9cbi8vXG4vL1xudm9pZCBFKHpvZUluc3RhbmNlQWRtaW4pLnJlcGxhY2VBbGxvY2F0aW9ucyhzZWF0SGFuZGxlQWxsb2NhdGlvbnMpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25XaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbiB9LFxucmVhbGxvY2F0ZSgvKiAgICAgICAgICAgICAgICAgICAgKi8uLi5zZWF0cyl7XG5mb3IoY29uc3Qgc2VhdCBvZiBzZWF0cyl7XG5hc3NlcnRBY3RpdmUoc2VhdCk7XG5hc3NlcnRTdGFnZWRBbGxvY2F0aW9uKHNlYXQpO1xuIH1cblxuLy9cbmNvbnN0IGZsYXR0ZW5BbGxvY2F0aW9ucz0oYWxsb2NhdGlvbnMpPT5cbmFsbG9jYXRpb25zLmZsYXRNYXAoT2JqZWN0LnZhbHVlcyk7XG5jb25zdCBwcmV2aW91c0FsbG9jYXRpb25zPXNlYXRzLm1hcCgoc2VhdCk9Plxuc2VhdC5nZXRDdXJyZW50QWxsb2NhdGlvbigpKTtcblxuY29uc3QgcHJldmlvdXNBbW91bnRzPWZsYXR0ZW5BbGxvY2F0aW9ucyhwcmV2aW91c0FsbG9jYXRpb25zKTtcbmNvbnN0IG5ld0FsbG9jYXRpb25zPXNlYXRzLm1hcCgoc2VhdCk9PnNlYXQuZ2V0U3RhZ2VkQWxsb2NhdGlvbigpKTtcbmNvbnN0IG5ld0Ftb3VudHM9ZmxhdHRlbkFsbG9jYXRpb25zKG5ld0FsbG9jYXRpb25zKTtcblxuYXNzZXJ0UmlnaHRzQ29uc2VydmVkKHByZXZpb3VzQW1vdW50cyxuZXdBbW91bnRzKTtcblxuLy9cbmZvcihjb25zdCBzZWF0IG9mIHNlYXRzKXtcbmlzT2ZmZXJTYWZlKHNlYXQuZ2V0UHJvcG9zYWwoKSxzZWF0LmdldFN0YWdlZEFsbG9jYXRpb24oKSl8fFxuRmFpbCBgT2ZmZXIgc2FmZXR5IHdhcyB2aW9sYXRlZCBieSB0aGUgcHJvcG9zZWQgYWxsb2NhdGlvbjogJHtzZWF0LmdldFN0YWdlZEFsbG9jYXRpb24oKX0uIFByb3Bvc2FsIHdhcyAke3NlYXQuZ2V0UHJvcG9zYWwoKX1gO1xuIH1cblxuLy9cbmNvbnN0IHpjZlNlYXRzU29GYXI9bmV3IFNldCgpO1xuXG5mb3IoY29uc3Qgc2VhdCBvZiBzZWF0cyl7XG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmhhcyhzZWF0KXx8XG5GYWlsIGBUaGUgc2VhdCAke3NlYXR9IHdhcyBub3QgcmVjb2duaXplZGA7XG4hemNmU2VhdHNTb0Zhci5oYXMoc2VhdCl8fFxuRmFpbCBgU2VhdCAoJHtzZWF0fSkgd2FzIGFscmVhZHkgYW4gYXJndW1lbnQgdG8gcmVhbGxvY2F0ZWA7XG56Y2ZTZWF0c1NvRmFyLmFkZChzZWF0KTtcbiB9XG5cbnRyeXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuZm9yKGNvbnN0IHNlYXQgb2Ygc2VhdHMpe1xuY29tbWl0U3RhZ2VkQWxsb2NhdGlvbihzZWF0KTtcbiB9XG5jb25zdCBzZWF0SGFuZGxlQWxsb2NhdGlvbnM9c2VhdHMubWFwKChzZWF0KT0+e1xuY29uc3Qgc2VhdEhhbmRsZT16Y2ZTZWF0VG9TZWF0SGFuZGxlLmdldChzZWF0KTtcbnJldHVybntzZWF0SGFuZGxlLGFsbG9jYXRpb246c2VhdC5nZXRDdXJyZW50QWxsb2NhdGlvbigpfTtcbiB9KTtcblxuRSh6b2VJbnN0YW5jZUFkbWluKS5yZXBsYWNlQWxsb2NhdGlvbnMoc2VhdEhhbmRsZUFsbG9jYXRpb25zKTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG4gfSxcbmRyb3BBbGxSZWZlcmVuY2VzKCl7XG5hY3RpdmVaQ0ZTZWF0cz1yZXBsYWNlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4nYWN0aXZlWkNGU2VhdHMnKTtcblxuemNmU2VhdFRvU2VhdEhhbmRsZT1yZXBsYWNlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4nemNmU2VhdFRvU2VhdEhhbmRsZScpO1xuXG4gfX0sXG5cbnpjZk1pbnRSZWFsbG9jYXRvcjp7XG4vL1xuLy9cbi8vXG5yZWFsbG9jYXRlKHpjZlNlYXQsbmV3QWxsb2NhdGlvbil7XG50cnl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmFjdGl2ZVpDRlNlYXRzLnNldCh6Y2ZTZWF0LG5ld0FsbG9jYXRpb24pO1xuXG5jb25zdCBzZWF0SGFuZGxlQWxsb2NhdGlvbnM9W1xue1xuc2VhdEhhbmRsZTp6Y2ZTZWF0VG9TZWF0SGFuZGxlLmdldCh6Y2ZTZWF0KSxcbmFsbG9jYXRpb246bmV3QWxsb2NhdGlvbn1dO1xuXG5cblxuRSh6b2VJbnN0YW5jZUFkbWluKS5yZXBsYWNlQWxsb2NhdGlvbnMoc2VhdEhhbmRsZUFsbG9jYXRpb25zKTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG4gfX19KTtcblxuXG5cblxucmV0dXJuIHByb3ZpZGUoemNmQmFnZ2FnZSwndGhlU2VhdE1hbmFnZXJLaXQnLCgpPT5tYWtlU2VhdE1hbmFnZXJLaXQoKSk7XG4gfTskaM2PX29uY2UuY3JlYXRlU2VhdE1hbmFnZXIoY3JlYXRlU2VhdE1hbmFnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY3JlYXRlU2VhdE1hbmFnZXIiOlsiY3JlYXRlU2VhdE1hbmFnZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQIONv343AAB+NwAAMgAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvemNmWnlnb3RlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAYWdvcmljL2VydHAiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvaW50ZXJuYWwiLCIuLi9jbGVhblByb3Bvc2FsLmpzIiwiLi4vaGFuZGxlV2FybmluZy5qcyIsIi4uL2luc3RhbmNlUmVjb3JkU3RvcmFnZS5qcyIsIi4uL2lzc3VlclN0b3JhZ2UuanMiLCIuLi9tYWtlSGFuZGxlLmpzIiwiLi9ldmFsQ29udHJhY3RDb2RlLmpzIiwiLi9leGl0LmpzIiwiLi9vZmZlckhhbmRsZXJTdG9yYWdlLmpzIiwiLi96Y2ZTZWF0LmpzIiwiLi4vdHlwZUd1YXJkcy5qcyIsIi4vemNmTWludC5qcyIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VaQ0ZaeWdvdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxFLHBhc3NTdHlsZU9mLG1ha2VQcm9taXNlS2l0LEFzc2V0S2luZCxhc3NlcnRQYXR0ZXJuLG11c3RNYXRjaCxjYW5CZUR1cmFibGUsTSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxvYmplY3RNYXAsY2xlYW5Qcm9wb3NhbCxoYW5kbGVQS2l0V2FybmluZyxtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlLHByb3ZpZGVJc3N1ZXJTdG9yYWdlLGRlZmluZUR1cmFibGVIYW5kbGUsZXZhbENvbnRyYWN0QnVuZGxlLG1ha2VNYWtlRXhpdGVyLG1ha2VPZmZlckhhbmRsZXJTdG9yYWdlLGNyZWF0ZVNlYXRNYW5hZ2VyLEhhbmRsZU9mZmVySSxJbnZpdGF0aW9uSGFuZGxlU2hhcGUscHJlcGFyZVpjTWludCxaY2ZJOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaM2PX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi4vY2xlYW5Qcm9wb3NhbC5qc1wiLCBbW1wiY2xlYW5Qcm9wb3NhbFwiLCBbJGjNj19hID0+IChjbGVhblByb3Bvc2FsID0gJGjNj19hKV1dXV0sW1wiLi4vaGFuZGxlV2FybmluZy5qc1wiLCBbW1wiaGFuZGxlUEtpdFdhcm5pbmdcIiwgWyRozY9fYSA9PiAoaGFuZGxlUEtpdFdhcm5pbmcgPSAkaM2PX2EpXV1dXSxbXCIuLi9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanNcIiwgW1tcIm1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4uL2lzc3VlclN0b3JhZ2UuanNcIiwgW1tcInByb3ZpZGVJc3N1ZXJTdG9yYWdlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVJc3N1ZXJTdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi4vbWFrZUhhbmRsZS5qc1wiLCBbW1wiZGVmaW5lRHVyYWJsZUhhbmRsZVwiLCBbJGjNj19hID0+IChkZWZpbmVEdXJhYmxlSGFuZGxlID0gJGjNj19hKV1dXV0sW1wiLi9ldmFsQ29udHJhY3RDb2RlLmpzXCIsIFtbXCJldmFsQ29udHJhY3RCdW5kbGVcIiwgWyRozY9fYSA9PiAoZXZhbENvbnRyYWN0QnVuZGxlID0gJGjNj19hKV1dXV0sW1wiLi9leGl0LmpzXCIsIFtbXCJtYWtlTWFrZUV4aXRlclwiLCBbJGjNj19hID0+IChtYWtlTWFrZUV4aXRlciA9ICRozY9fYSldXV1dLFtcIi4vb2ZmZXJIYW5kbGVyU3RvcmFnZS5qc1wiLCBbW1wibWFrZU9mZmVySGFuZGxlclN0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZU9mZmVySGFuZGxlclN0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL3pjZlNlYXQuanNcIiwgW1tcImNyZWF0ZVNlYXRNYW5hZ2VyXCIsIFskaM2PX2EgPT4gKGNyZWF0ZVNlYXRNYW5hZ2VyID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiSGFuZGxlT2ZmZXJJXCIsIFskaM2PX2EgPT4gKEhhbmRsZU9mZmVySSA9ICRozY9fYSldXSxbXCJJbnZpdGF0aW9uSGFuZGxlU2hhcGVcIiwgWyRozY9fYSA9PiAoSW52aXRhdGlvbkhhbmRsZVNoYXBlID0gJGjNj19hKV1dXV0sW1wiLi96Y2ZNaW50LmpzXCIsIFtbXCJwcmVwYXJlWmNNaW50XCIsIFskaM2PX2EgPT4gKHByZXBhcmVaY01pbnQgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIlpjZklcIiwgWyRozY9fYSA9PiAoWmNmSSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlWkNGWnlnb3RlPWFzeW5jKFxucG93ZXJzLFxuem9lU2VydmljZSxcbmludml0YXRpb25Jc3N1ZXIsXG50ZXN0SmlnU2V0dGVyLFxuY29udHJhY3RCdW5kbGVDYXAsXG56Y2ZCYWdnYWdlPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnemNmQmFnZ2FnZScse2R1cmFibGU6dHJ1ZX0pKT0+XG57XG5jb25zdCBtYWtlU2VhdEhhbmRsZT1kZWZpbmVEdXJhYmxlSGFuZGxlKHpjZkJhZ2dhZ2UsJ1NlYXQnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB6b2VJbnN0YW5jZUFkbWluO1xubGV0IHNlYXRNYW5hZ2VyO1xubGV0IGluc3RhbmNlUmVjSG9sZGVyO1xuY29uc3QgbWFrZUV4aXRlcj1tYWtlTWFrZUV4aXRlcih6Y2ZCYWdnYWdlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0SW5zdGFuY2VSZWNIb2xkZXI9KCk9Pntcbmluc3RhbmNlUmVjSG9sZGVyfHxGYWlsIGBpbnN0YW5jZVJlY29yZCBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuYDtcbnJldHVybiBpbnN0YW5jZVJlY0hvbGRlcjtcbiB9O1xuXG5jb25zdHtcbnN0b3JlSXNzdWVyUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCxcbmdldEJyYW5kRm9ySXNzdWVyLFxuZ2V0SXNzdWVyRm9yQnJhbmQsXG5pbnN0YW50aWF0ZTppbnN0YW50aWF0ZUlzc3VlclN0b3JhZ2V9PVxucHJvdmlkZUlzc3VlclN0b3JhZ2UoemNmQmFnZ2FnZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaHV0ZG93bldpdGhGYWlsdXJlPShyZWFzb24pPT57XG52b2lkIEUoem9lSW5zdGFuY2VBZG1pbikuZmFpbEFsbFNlYXRzKHJlYXNvbik7XG5zZWF0TWFuYWdlci5kcm9wQWxsUmVmZXJlbmNlcygpO1xuLy9cbnBvd2Vycy5leGl0VmF0V2l0aEZhaWx1cmUocmVhc29uKTtcbiB9O1xuXG5jb25zdHtzdG9yZU9mZmVySGFuZGxlcix0YWtlT2ZmZXJIYW5kbGVyfT1cbm1ha2VPZmZlckhhbmRsZXJTdG9yYWdlKHpjZkJhZ2dhZ2UpO1xuXG4vL1xuY29uc3QgbWFrZUluc3RhbmNlUmVjb3JkPW1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UoemNmQmFnZ2FnZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHJlY29yZElzc3Vlcj0oa2V5d29yZCxpc3N1ZXJSZWNvcmQpPT57XG5nZXRJbnN0YW5jZVJlY0hvbGRlcigpLmFkZElzc3VlcihrZXl3b3JkLGlzc3VlclJlY29yZCk7XG5zdG9yZUlzc3VlclJlY29yZChpc3N1ZXJSZWNvcmQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbXB0eVNlYXRLaXQ9KGV4aXQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaW5pdGlhbEFsbG9jYXRpb249aGFyZGVuKHt9KTtcbmNvbnN0IHByb3Bvc2FsPWNsZWFuUHJvcG9zYWwoaGFyZGVuKHtleGl0fSksZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5jb25zdCB1c2VyU2VhdFByb21pc2VLaXQ9bWFrZVByb21pc2VLaXQoKTtcbmhhbmRsZVBLaXRXYXJuaW5nKHVzZXJTZWF0UHJvbWlzZUtpdCk7XG5jb25zdCBzZWF0SGFuZGxlPW1ha2VTZWF0SGFuZGxlKCk7XG5cbmNvbnN0IHNlYXREYXRhPWhhcmRlbih7XG5wcm9wb3NhbCxcbmluaXRpYWxBbGxvY2F0aW9uLFxuc2VhdEhhbmRsZX0pO1xuXG5jb25zdCB6Y2ZTZWF0PXNlYXRNYW5hZ2VyLm1ha2VaQ0ZTZWF0KHNlYXREYXRhKTtcblxuY29uc3QgZXhpdGVyPW1ha2VFeGl0ZXIoc2VhdERhdGEucHJvcG9zYWwsemNmU2VhdCk7XG52b2lkIEUoem9lSW5zdGFuY2VBZG1pbikuXG5tYWtlTm9Fc2Nyb3dTZWF0KGluaXRpYWxBbGxvY2F0aW9uLHByb3Bvc2FsLGV4aXRlcixzZWF0SGFuZGxlKS5cbnRoZW4oKHVzZXJTZWF0KT0+dXNlclNlYXRQcm9taXNlS2l0LnJlc29sdmUodXNlclNlYXQpKTtcblxucmV0dXJue3pjZlNlYXQsdXNlclNlYXQ6dXNlclNlYXRQcm9taXNlS2l0LnByb21pc2V9O1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgbWFrZVpjTWludDtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlWkNGTWludD1hc3luYyhcbmtleXdvcmQsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz11bmRlZmluZWQsXG5vcHRpb25zPXVuZGVmaW5lZCk9Plxue1xuZ2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5hc3NlcnRVbmlxdWVLZXl3b3JkKGtleXdvcmQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3Qgem9lTWludD1FKHpvZUluc3RhbmNlQWRtaW4pLm1ha2Vab2VNaW50KFxua2V5d29yZCxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0aW9ucyk7XG5cbnJldHVybiBtYWtlWmNNaW50KGtleXdvcmQsem9lTWludCk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWdpc3RlckZlZU1pbnQ9YXN5bmMoa2V5d29yZCxmZWVNaW50QWNjZXNzKT0+e1xuZ2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5hc3NlcnRVbmlxdWVLZXl3b3JkKGtleXdvcmQpO1xuXG5jb25zdCB6b2VNaW50PUUoem9lSW5zdGFuY2VBZG1pbikucmVnaXN0ZXJGZWVNaW50KGtleXdvcmQsZmVlTWludEFjY2Vzcyk7XG5yZXR1cm4gbWFrZVpjTWludChrZXl3b3JkLHpvZU1pbnQpO1xuIH07XG5cbmNvbnN0IEhhbmRsZU9mZmVyU2hhcGU9TS5yZW1vdGFibGUoJ0hhbmRsZU9mZmVyJyk7XG5cbi8vXG4vL1xuY29uc3QgbWFrZUhhbmRsZU9mZmVyT2JqPXByZXBhcmVFeG9DbGFzcyhcbnpjZkJhZ2dhZ2UsXG4naGFuZGxlT2ZmZXJPYmonLFxuSGFuZGxlT2ZmZXJJLFxuKG9mZmVySGFuZGxlclRha2VyKT0+KHtvZmZlckhhbmRsZXJUYWtlcn0pLFxue1xuaGFuZGxlT2ZmZXIoaW52aXRhdGlvbkhhbmRsZSxzZWF0RGF0YSl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IHpjZlNlYXQ9c2VhdE1hbmFnZXIubWFrZVpDRlNlYXQoc2VhdERhdGEpO1xuLy9cbi8vXG5cbmNvbnN0IG9mZmVySGFuZGxlcj1zdGF0ZS5vZmZlckhhbmRsZXJUYWtlci50YWtlKGludml0YXRpb25IYW5kbGUpO1xuY29uc3Qgb2ZmZXJSZXN1bHRQPVxudHlwZW9mIG9mZmVySGFuZGxlcj09PSdmdW5jdGlvbic/XG5FKG9mZmVySGFuZGxlcikoemNmU2VhdCxzZWF0RGF0YS5vZmZlckFyZ3MpOlxuRShvZmZlckhhbmRsZXIpLmhhbmRsZSh6Y2ZTZWF0LHNlYXREYXRhLm9mZmVyQXJncyk7XG5cbmNvbnN0IG9mZmVyUmVzdWx0UHJvbWlzZT1vZmZlclJlc3VsdFAuY2F0Y2goKHJlYXNvbik9PntcbmlmKHJlYXNvbj09PXVuZGVmaW5lZCl7XG5jb25zdCBuZXdFcnI9RXJyb3IoXG4gYElmIGFuIG9mZmVySGFuZGxlciB0aHJvd3MsIGl0IG11c3QgcHJvdmlkZSBhIHJlYXNvbiBvZiB0eXBlIEVycm9yLCBidXQgdGhlIHJlYXNvbiB3YXMgdW5kZWZpbmVkLiBQbGVhc2UgZml4IHRoZSBjb250cmFjdCBjb2RlIHRvIHNwZWNpZnkgYSByZWFzb24gZm9yIHRocm93aW5nLmApO1xuXG50aHJvdyB6Y2ZTZWF0LmZhaWwobmV3RXJyKTtcbiB9XG50aHJvdyB6Y2ZTZWF0LmZhaWwocmVhc29uKTtcbiB9KTtcbmNvbnN0IGV4aXRlcj1tYWtlRXhpdGVyKHNlYXREYXRhLnByb3Bvc2FsLHpjZlNlYXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBoYXJkZW4oe29mZmVyUmVzdWx0UHJvbWlzZSxleGl0T2JqOmV4aXRlcn0pO1xuIH19KTtcblxuXG5cbmNvbnN0IEhhbmRsZU9mZmVyRnVuY3Rpb25TaGFwZT1NLnJlbW90YWJsZSgnSGFuZGxlT2ZmZXJGdW5jdGlvbicpO1xuY29uc3QgT2ZmZXJIYW5kbGVyU2hhcGU9TS5vcihIYW5kbGVPZmZlclNoYXBlLEhhbmRsZU9mZmVyRnVuY3Rpb25TaGFwZSk7XG5jb25zdCBUYWtlckk9TS5pbnRlcmZhY2UoJ29mZmVyIGhhbmRsZXIgdGFrZXInLHtcbnRha2U6TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkuXG5vcHRpb25hbChNLnN0cmluZygpKS5cbnJldHVybnMoT2ZmZXJIYW5kbGVyU2hhcGUpfSk7XG5cbmNvbnN0IHRha2VyPXByZXBhcmVFeG8oemNmQmFnZ2FnZSwnb2ZmZXIgaGFuZGxlciB0YWtlcicsVGFrZXJJLHtcbnRha2U6dGFrZU9mZmVySGFuZGxlcn0pO1xuXG5jb25zdCBoYW5kbGVPZmZlck9iaj1tYWtlSGFuZGxlT2ZmZXJPYmoodGFrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBldmFsdWF0ZUNvbnRyYWN0PSgpPT57XG5sZXQgYnVuZGxlO1xuaWYocGFzc1N0eWxlT2YoY29udHJhY3RCdW5kbGVDYXApPT09J3JlbW90YWJsZScpe1xuY29uc3QgYnVuZGxlQ2FwPWNvbnRyYWN0QnVuZGxlQ2FwO1xuLy9cbmJ1bmRsZT1wb3dlcnMuRChidW5kbGVDYXApLmdldEJ1bmRsZSgpO1xuIH1lbHNle1xuYnVuZGxlPWNvbnRyYWN0QnVuZGxlQ2FwO1xuIH1cbnJldHVybiBldmFsQ29udHJhY3RCdW5kbGUoYnVuZGxlKTtcbiB9O1xuLy9cbmNvbnN0IGJ1bmRsZVJlc3VsdD1hd2FpdCBldmFsdWF0ZUNvbnRyYWN0KCk7XG5cbi8vXG5jb25zdHtzdGFydCxtZXRhPXt9fT0oKCk9PntcbmlmKCdwcmVwYXJlJ2luIGJ1bmRsZVJlc3VsdCl7XG5pZignc3RhcnQnaW4gYnVuZGxlUmVzdWx0KXtcbkZhaWwgYGNvbnRyYWN0IG11c3QgcHJvdmlkZSBleGFjdGx5IG9uZSBvZiBcInN0YXJ0XCIgYW5kIFwicHJlcGFyZVwiYDtcbiB9XG4vL1xuaWYoLyogICAgICAgICAgICAgICovYnVuZGxlUmVzdWx0Lm1ldGE/LnVwZ3JhZGFiaWxpdHkpe1xuRmFpbCBgcHJlcGFyZSgpIGlzIGRlcHJlY2F0ZWQgYW5kIGluY29tcGF0aWJsZSB3aXRoIHRoZSAndXBncmFkYWJpbGl0eScgaW5kaWNhdG9yYDtcbiB9XG5yZXR1cm57XG5zdGFydDpidW5kbGVSZXN1bHQucHJlcGFyZSxcbm1ldGE6e1xudXBncmFkYWJpbGl0eTonY2FuVXBncmFkZScsXG5jdXN0b21UZXJtc1NoYXBlOmJ1bmRsZVJlc3VsdC5jdXN0b21UZXJtc1NoYXBlLFxucHJpdmF0ZUFyZ3NTaGFwZTpidW5kbGVSZXN1bHQucHJpdmF0ZUFyZ3NTaGFwZX19O1xuXG5cbiB9XG4vL1xucmV0dXJuIGJ1bmRsZVJlc3VsdDtcbiB9KSgpO1xuLy9cblxuaWYoc3RhcnQ9PT11bmRlZmluZWQpe1xuaWYoJ2J1aWxkUm9vdE9iamVjdCdpbiBidW5kbGVSZXN1bHQpe1xuLy9cbnRocm93IEZhaWwgYERpZCB5b3UgcHJvdmlkZSBhIHZhdCBidW5kbGUgaW5zdGVhZCBvZiBhIGNvbnRyYWN0IGJ1bmRsZT9gO1xuIH1cbnRocm93IEZhaWwgYGNvbnRyYWN0IGV4cG9ydHMgbWlzc2luZyBzdGFydGA7XG4gfVxuXG5zdGFydC5sZW5ndGg8PTN8fEZhaWwgYGludmFsaWQgc3RhcnQgcGFyYW1ldGVyc2A7XG5jb25zdCBkdXJhYmlsaXR5UmVxdWlyZWQ9XG5tZXRhLnVwZ3JhZGFiaWxpdHkmJlxuWydjYW5CZVVwZ3JhZGVkJywnY2FuVXBncmFkZSddLmluY2x1ZGVzKG1ldGEudXBncmFkYWJpbGl0eSk7XG5cbi8qICAgICAgICAgICAgICAqL1xuY29uc3QgemNmPXByZXBhcmVFeG8oemNmQmFnZ2FnZSwnemNmJyxaY2ZJLHtcbmF0b21pY1JlYXJyYW5nZToodHJhbnNmZXJzKT0+c2VhdE1hbmFnZXIuYXRvbWljUmVhcnJhbmdlKHRyYW5zZmVycyksXG5yZWFsbG9jYXRlOiguLi5zZWF0cyk9PnNlYXRNYW5hZ2VyLnJlYWxsb2NhdGUoLi4uc2VhdHMpLFxuYXNzZXJ0VW5pcXVlS2V5d29yZDooa3dkKT0+Z2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5hc3NlcnRVbmlxdWVLZXl3b3JkKGt3ZCksXG5zYXZlSXNzdWVyOmFzeW5jKGlzc3VlclAsa2V5d29yZCk9Pntcbi8vXG4vL1xuLy9cbmdldEluc3RhbmNlUmVjSG9sZGVyKCkuYXNzZXJ0VW5pcXVlS2V5d29yZChrZXl3b3JkKTtcbmNvbnN0IHJlY29yZD1hd2FpdCBFKHpvZUluc3RhbmNlQWRtaW4pLnNhdmVJc3N1ZXIoaXNzdWVyUCxrZXl3b3JkKTtcbi8vXG5yZWNvcmRJc3N1ZXIoa2V5d29yZCxyZWNvcmQpO1xucmV0dXJuIHJlY29yZDtcbiB9LFxubWFrZUludml0YXRpb246KFxub2ZmZXJIYW5kbGVyLFxuZGVzY3JpcHRpb24sXG5jdXN0b21EZXRhaWxzPWhhcmRlbih7fSksXG5wcm9wb3NhbFNoYXBlPXVuZGVmaW5lZCk9Plxue1xudHlwZW9mIGRlc2NyaXB0aW9uPT09J3N0cmluZyd8fFxuRmFpbCBgaW52aXRhdGlvbnMgbXVzdCBoYXZlIGEgZGVzY3JpcHRpb24gc3RyaW5nOiAke2Rlc2NyaXB0aW9ufWA7XG5cbm9mZmVySGFuZGxlcnx8RmFpbCBgb2ZmZXJIYW5kbGVyIG11c3QgYmUgcHJvdmlkZWRgO1xuXG5pZihwcm9wb3NhbFNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4ocHJvcG9zYWxTaGFwZSk7XG4gfVxuXG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlPXN0b3JlT2ZmZXJIYW5kbGVyKG9mZmVySGFuZGxlcik7XG5jb25zdCBpbnZpdGF0aW9uUD1FKHpvZUluc3RhbmNlQWRtaW4pLm1ha2VJbnZpdGF0aW9uKFxuaW52aXRhdGlvbkhhbmRsZSxcbmRlc2NyaXB0aW9uLFxuY3VzdG9tRGV0YWlscyxcbnByb3Bvc2FsU2hhcGUpO1xuXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9pbnZpdGF0aW9uUCk7XG4gfSxcbi8vXG5zaHV0ZG93bjooY29tcGxldGlvbik9PntcbnZvaWQgRSh6b2VJbnN0YW5jZUFkbWluKS5leGl0QWxsU2VhdHMoY29tcGxldGlvbik7XG5zZWF0TWFuYWdlci5kcm9wQWxsUmVmZXJlbmNlcygpO1xucG93ZXJzLmV4aXRWYXQoY29tcGxldGlvbik7XG4gfSxcbnNodXRkb3duV2l0aEZhaWx1cmUsXG5zdG9wQWNjZXB0aW5nT2ZmZXJzOigpPT5FKHpvZUluc3RhbmNlQWRtaW4pLnN0b3BBY2NlcHRpbmdPZmZlcnMoKSxcbm1ha2VaQ0ZNaW50LFxucmVnaXN0ZXJGZWVNaW50LFxubWFrZUVtcHR5U2VhdEtpdCxcblxuLy9cbmdldFpvZVNlcnZpY2U6KCk9PnpvZVNlcnZpY2UsXG5nZXRJbnZpdGF0aW9uSXNzdWVyOigpPT5pbnZpdGF0aW9uSXNzdWVyLFxuZ2V0VGVybXM6KCk9PntcbmNvbnN0IHRlcm1zPWdldEluc3RhbmNlUmVjSG9sZGVyKCkuZ2V0VGVybXMoKTtcblxuLy9cbmNvbnN0e2N1c3RvbVRlcm1zU2hhcGV9PW1ldGE7XG5pZihjdXN0b21UZXJtc1NoYXBlKXtcbmNvbnN0e2JyYW5kczpfYixpc3N1ZXJzOl9pLC4uLmN1c3RvbVRlcm1zfT10ZXJtcztcbm11c3RNYXRjaChoYXJkZW4oY3VzdG9tVGVybXMpLGN1c3RvbVRlcm1zU2hhcGUsJ2N1c3RvbVRlcm1zJyk7XG4gfVxuXG5yZXR1cm4gdGVybXM7XG4gfSxcbmdldEJyYW5kRm9ySXNzdWVyLFxuZ2V0SXNzdWVyRm9yQnJhbmQsXG5nZXRBc3NldEtpbmQ6Z2V0QXNzZXRLaW5kQnlCcmFuZCxcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbnNldFRlc3RKaWc6KHRlc3RGbj0oKT0+KHt9KSk9PntcbmlmKHRlc3RKaWdTZXR0ZXIpe1xudGVzdEppZ1NldHRlcih7Li4udGVzdEZuKCksemNmfSk7XG4gfVxuIH0sXG5nZXRJbnN0YW5jZTooKT0+Z2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5nZXRJbnN0YW5jZVJlY29yZCgpLmluc3RhbmNlLFxuc2V0T2ZmZXJGaWx0ZXI6KHN0cmluZ3MpPT5FKHpvZUluc3RhbmNlQWRtaW4pLnNldE9mZmVyRmlsdGVyKHN0cmluZ3MpLFxuZ2V0T2ZmZXJGaWx0ZXI6KCk9PkUoem9lSW5zdGFuY2VBZG1pbikuZ2V0T2ZmZXJGaWx0ZXIoKX0pO1xuXG5cbi8vXG4vL1xuLy9cblxuY29uc3QgY29udHJhY3RCYWdnYWdlPXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoemNmQmFnZ2FnZSwnY29udHJhY3RCYWdnYWdlJyk7XG5cbmNvbnN0IGluaXRTZWF0TWdyQW5kTWludEtpbmQ9KCk9PntcbmxldCB6Y2ZNaW50UmVhbGxvY2F0b3I7XG4oe3NlYXRNYW5hZ2VyLHpjZk1pbnRSZWFsbG9jYXRvcn09Y3JlYXRlU2VhdE1hbmFnZXIoXG56b2VJbnN0YW5jZUFkbWluLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCxcbnNodXRkb3duV2l0aEZhaWx1cmUsXG56Y2ZCYWdnYWdlKSk7XG5cblxubWFrZVpjTWludD1wcmVwYXJlWmNNaW50KFxuemNmQmFnZ2FnZSxcbnJlY29yZElzc3VlcixcbmdldEFzc2V0S2luZEJ5QnJhbmQsXG5tYWtlRW1wdHlTZWF0S2l0LFxuemNmTWludFJlYWxsb2NhdG9yKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgemNmWnlnb3RlPXtcbi8vXG5zdGFydENvbnRyYWN0OmFzeW5jKFxuaW5zdGFuY2VBZG1pbkZyb21ab2UsXG5pbnN0YW5jZVJlY29yZEZyb21ab2UsXG5pc3N1ZXJTdG9yYWdlRnJvbVpvZSxcbnByaXZhdGVBcmdzPXVuZGVmaW5lZCk9Plxue1xuem9lSW5zdGFuY2VBZG1pbj1pbnN0YW5jZUFkbWluRnJvbVpvZTtcbmluaXRTZWF0TWdyQW5kTWludEtpbmQoKTtcblxuemNmQmFnZ2FnZS5pbml0KCd6Y2ZJbnN0YW5jZUFkbWluJyxpbnN0YW5jZUFkbWluRnJvbVpvZSk7XG5pbnN0YW5jZVJlY0hvbGRlcj1tYWtlSW5zdGFuY2VSZWNvcmQoaW5zdGFuY2VSZWNvcmRGcm9tWm9lKTtcbmluc3RhbnRpYXRlSXNzdWVyU3RvcmFnZShpc3N1ZXJTdG9yYWdlRnJvbVpvZSk7XG56Y2ZCYWdnYWdlLmluaXQoJ2luc3RhbmNlUmVjSG9sZGVyJyxpbnN0YW5jZVJlY0hvbGRlcik7XG56Y2ZCYWdnYWdlLmluaXQoJ3JlcGFpcmVkQ29udHJhY3RDb21wbGV0aW9uV2F0Y2hlcicsdHJ1ZSk7XG5cbmNvbnN0e3ByaXZhdGVBcmdzU2hhcGV9PW1ldGE7XG5pZihwcml2YXRlQXJnc1NoYXBlKXtcbm11c3RNYXRjaChwcml2YXRlQXJncyxwcml2YXRlQXJnc1NoYXBlLCdwcml2YXRlQXJncycpO1xuIH1cbi8vXG5yZXR1cm4gRS53aGVuKFxuc3RhcnQoemNmLHByaXZhdGVBcmdzLGNvbnRyYWN0QmFnZ2FnZSksXG4oe1xuY3JlYXRvckZhY2V0PXVuZGVmaW5lZCxcbnB1YmxpY0ZhY2V0PXVuZGVmaW5lZCxcbmNyZWF0b3JJbnZpdGF0aW9uPXVuZGVmaW5lZCxcbi4uLnVuZXhwZWN0ZWR9KT0+XG57XG5jb25zdCB1bmV4cGVjdGVkS2V5cz1PYmplY3Qua2V5cyh1bmV4cGVjdGVkKTtcbnVuZXhwZWN0ZWRLZXlzLmxlbmd0aD09PTB8fFxuRmFpbCBgY29udHJhY3QgXCJzdGFydFwiIHJldHVybmVkIHVucmVjb2duaXplZCBwcm9wZXJ0aWVzICR7dW5leHBlY3RlZEtleXN9YDtcblxuY29uc3QgYXJlRHVyYWJsZT1vYmplY3RNYXAoXG57Y3JlYXRvckZhY2V0LHB1YmxpY0ZhY2V0LGNyZWF0b3JJbnZpdGF0aW9ufSxcbmNhbkJlRHVyYWJsZSk7XG5cbmNvbnN0IGFsbER1cmFibGU9T2JqZWN0LnZhbHVlcyhhcmVEdXJhYmxlKS5ldmVyeShCb29sZWFuKTtcbmlmKGR1cmFiaWxpdHlSZXF1aXJlZCl7XG5hbGxEdXJhYmxlfHxcbkZhaWwgYHdpdGggJHttZXRhLnVwZ3JhZGFiaWxpdHl9LCB2YWx1ZXMgZnJvbSBzdGFydCgpIG11c3QgYmUgZHVyYWJsZSAke2FyZUR1cmFibGV9YDtcbiB9XG5cbmlmKGFsbER1cmFibGUpe1xuemNmQmFnZ2FnZS5pbml0KCdjcmVhdG9yRmFjZXQnLGNyZWF0b3JGYWNldCk7XG56Y2ZCYWdnYWdlLmluaXQoJ3B1YmxpY0ZhY2V0JyxwdWJsaWNGYWNldCk7XG56Y2ZCYWdnYWdlLmluaXQoJ2NyZWF0b3JJbnZpdGF0aW9uJyxjcmVhdG9ySW52aXRhdGlvbik7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKHtcbmNyZWF0b3JGYWNldCxcbnB1YmxpY0ZhY2V0LFxuY3JlYXRvckludml0YXRpb24sXG5oYW5kbGVPZmZlck9ian0pO1xuXG4gfSk7XG5cbiB9LFxuXG5yZXN0YXJ0Q29udHJhY3Q6YXN5bmMocHJpdmF0ZUFyZ3M9dW5kZWZpbmVkKT0+e1xuaWYobWV0YS51cGdyYWRhYmlsaXR5KXtcbm1ldGEudXBncmFkYWJpbGl0eT09PSdjYW5VcGdyYWRlJ3x8RmFpbCBgY29udHJhY3QgY2Fubm90IHVwZ3JhZGVgO1xuIH1cbnpvZUluc3RhbmNlQWRtaW49emNmQmFnZ2FnZS5nZXQoJ3pjZkluc3RhbmNlQWRtaW4nKTtcbmluc3RhbmNlUmVjSG9sZGVyPXpjZkJhZ2dhZ2UuZ2V0KCdpbnN0YW5jZVJlY0hvbGRlcicpO1xuaW5pdFNlYXRNZ3JBbmRNaW50S2luZCgpO1xuXG5hd2FpdCBudWxsO1xuaWYoIXpjZkJhZ2dhZ2UuaGFzKCdyZXBhaXJlZENvbnRyYWN0Q29tcGxldGlvbldhdGNoZXInKSl7XG4vL1xuLy9cbkUoem9lSW5zdGFuY2VBZG1pbikuXG5yZXBhaXJDb250cmFjdENvbXBsZXRpb25XYXRjaGVyKCkuXG5jYXRjaCgoKT0+eyB9KTtcblxuemNmQmFnZ2FnZS5pbml0KCdyZXBhaXJlZENvbnRyYWN0Q29tcGxldGlvbldhdGNoZXInLHRydWUpO1xuIH1cblxuY29uc3R7cHJpdmF0ZUFyZ3NTaGFwZX09bWV0YTtcbmlmKHByaXZhdGVBcmdzU2hhcGUpe1xubXVzdE1hdGNoKHByaXZhdGVBcmdzLHByaXZhdGVBcmdzU2hhcGUsJ3ByaXZhdGVBcmdzJyk7XG4gfVxuXG4vL1xucmV0dXJuIEUud2hlbihcbnN0YXJ0KHpjZixwcml2YXRlQXJncyxjb250cmFjdEJhZ2dhZ2UpLFxuKHtcbmNyZWF0b3JGYWNldD11bmRlZmluZWQsXG5wdWJsaWNGYWNldD11bmRlZmluZWQsXG5jcmVhdG9ySW52aXRhdGlvbj11bmRlZmluZWR9KT0+XG57XG5jb25zdCBwcmlvckNyZWF0b3JGYWNldD16Y2ZCYWdnYWdlLmdldCgnY3JlYXRvckZhY2V0Jyk7XG5jb25zdCBwcmlvclB1YmxpY0ZhY2V0PXpjZkJhZ2dhZ2UuZ2V0KCdwdWJsaWNGYWNldCcpO1xuY29uc3QgcHJpb3JDcmVhdG9ySW52aXRhdGlvbj16Y2ZCYWdnYWdlLmdldCgnY3JlYXRvckludml0YXRpb24nKTtcblxucHJpb3JDcmVhdG9yRmFjZXQ9PT1jcmVhdG9yRmFjZXQmJlxucHJpb3JQdWJsaWNGYWNldD09PXB1YmxpY0ZhY2V0JiZcbnByaW9yQ3JlYXRvckludml0YXRpb249PT1jcmVhdG9ySW52aXRhdGlvbnx8XG5GYWlsIGByZXN0YXJ0Q29udHJhY3QgZmFpbGVkOiBmYWNldHMgcmV0dXJuZWQgYnkgY29udHJhY3QgY2hhbmdlZCBpZGVudGl0eWA7XG5yZXR1cm4gaGFyZGVuKHtcbmNyZWF0b3JGYWNldCxcbnB1YmxpY0ZhY2V0LFxuY3JlYXRvckludml0YXRpb24sXG5oYW5kbGVPZmZlck9ian0pO1xuXG4gfSk7XG5cbiB9fTtcblxucmV0dXJuIGhhcmRlbih6Y2ZaeWdvdGUpO1xuIH07JGjNj19vbmNlLm1ha2VaQ0ZaeWdvdGUobWFrZVpDRlp5Z290ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlWkNGWnlnb3RlIjpbIm1ha2VaQ0ZaeWdvdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAF+2coTkHAAA5BwAAOQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0U3VwcG9ydC9hdG9taWNUcmFuc2Zlci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIlRyYW5zZmVyUGFydFNoYXBlIiwiYXRvbWljUmVhcnJhbmdlIiwiYXRvbWljVHJhbnNmZXIiLCJmcm9tT25seSIsInRvT25seSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxTZWF0U2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlNlYXRTaGFwZVwiLCBbJGjNj19hID0+IChTZWF0U2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0ICAgICAgICBUcmFuc2ZlclBhcnRTaGFwZT1NLnNwbGl0QXJyYXkoXG5oYXJkZW4oW00ub3B0KFNlYXRTaGFwZSksTS5vcHQoU2VhdFNoYXBlKSxNLm9wdChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpXSksXG5oYXJkZW4oW00ub3B0KEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSldKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlRyYW5zZmVyUGFydFNoYXBlKFRyYW5zZmVyUGFydFNoYXBlKTtcbmNvbnN0ICAgICAgICBhdG9taWNSZWFycmFuZ2U9KHpjZix0cmFuc2ZlcnMpPT57XG56Y2YuYXRvbWljUmVhcnJhbmdlKHRyYW5zZmVycyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmF0b21pY1JlYXJyYW5nZShhdG9taWNSZWFycmFuZ2UpO1xuY29uc3QgICAgICAgIGZyb21Pbmx5PShmcm9tU2VhdCxmcm9tQW1vdW50cyk9PlxuaGFyZGVuKFtmcm9tU2VhdCx1bmRlZmluZWQsZnJvbUFtb3VudHNdKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZyb21Pbmx5KGZyb21Pbmx5KTtcbmNvbnN0ICAgICAgICB0b09ubHk9KHRvU2VhdCx0b0Ftb3VudHMpPT5cbmhhcmRlbihbdW5kZWZpbmVkLHRvU2VhdCx1bmRlZmluZWQsdG9BbW91bnRzXSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS50b09ubHkodG9Pbmx5KTtcbmNvbnN0ICAgICAgICBhdG9taWNUcmFuc2Zlcj0oXG56Y2YsXG5mcm9tU2VhdD11bmRlZmluZWQsXG50b1NlYXQ9dW5kZWZpbmVkLFxuZnJvbUFtb3VudHM9dW5kZWZpbmVkLFxudG9BbW91bnRzPXVuZGVmaW5lZCk9PlxuemNmLmF0b21pY1JlYXJyYW5nZShoYXJkZW4oW1tmcm9tU2VhdCx0b1NlYXQsZnJvbUFtb3VudHMsdG9BbW91bnRzXV0pKTskaM2PX29uY2UuYXRvbWljVHJhbnNmZXIoYXRvbWljVHJhbnNmZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVHJhbnNmZXJQYXJ0U2hhcGUiOlsiVHJhbnNmZXJQYXJ0U2hhcGUiXSwiYXRvbWljUmVhcnJhbmdlIjpbImF0b21pY1JlYXJyYW5nZSJdLCJmcm9tT25seSI6WyJmcm9tT25seSJdLCJ0b09ubHkiOlsidG9Pbmx5Il0sImF0b21pY1RyYW5zZmVyIjpbImF0b21pY1RyYW5zZmVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABRWH+bhAgAA4QIAACgAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9oYW5kbGVXYXJuaW5nLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJoYW5kbGVQS2l0V2FybmluZyIsImhhbmRsZVBXYXJuaW5nIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGhhbmRsZVBXYXJuaW5nPShwcm9taXNlKT0+e1xucHJvbWlzZS5jYXRjaCgoKT0+eyB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5oYW5kbGVQV2FybmluZyhoYW5kbGVQV2FybmluZyk7XG5jb25zdCAgICAgICAgaGFuZGxlUEtpdFdhcm5pbmc9KHByb21pc2VLaXQpPT57XG5oYW5kbGVQV2FybmluZyhwcm9taXNlS2l0LnByb21pc2UpO1xuIH07JGjNj19vbmNlLmhhbmRsZVBLaXRXYXJuaW5nKGhhbmRsZVBLaXRXYXJuaW5nKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImhhbmRsZVBXYXJuaW5nIjpbImhhbmRsZVBXYXJuaW5nIl0sImhhbmRsZVBLaXRXYXJuaW5nIjpbImhhbmRsZVBLaXRXYXJuaW5nIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANMnNaP4DgAA+A4AADAAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vY2xlYW5Qcm9wb3NhbC5qcyIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLHByZXBhcmVFeG9DbGFzcyxNLGFzc2VydEtleXdvcmROYW1lLEJyYW5kS2V5d29yZFJlY29yZFNoYXBlLEluc3RhbGxhdGlvblNoYXBlLEluc3RhbmNlUmVjb3JkU2hhcGUsSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlLElzc3VlclJlY29yZFNoYXBlLEtleXdvcmRTaGFwZSxUZXJtc1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCIuL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImFzc2VydEtleXdvcmROYW1lXCIsIFskaM2PX2EgPT4gKGFzc2VydEtleXdvcmROYW1lID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnN0YWxsYXRpb25TaGFwZVwiLCBbJGjNj19hID0+IChJbnN0YWxsYXRpb25TaGFwZSA9ICRozY9fYSldXSxbXCJJbnN0YW5jZVJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbmNlUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChJc3N1ZXJSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJLZXl3b3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoS2V5d29yZFNoYXBlID0gJGjNj19hKV1dLFtcIlRlcm1zU2hhcGVcIiwgWyRozY9fYSA9PiAoVGVybXNTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlPShiYWdnYWdlKT0+e1xuY29uc3QgYXNzZXJ0SW5zdGFudGlhdGVkPShpbnN0YW5jZVJlY29yZCk9Pntcbmluc3RhbmNlUmVjb3JkIT09J3VuZGVmaW5lZCd8fFxuRmFpbCBgaW5zdGFuY2VSZWNvcmQgaGFzIG5vdCBiZWVuIGluc3RhbnRpYXRlZGA7XG4gfTtcblxuY29uc3QgSW5zdGFuY2VSZWNvcmRJPU0uaW50ZXJmYWNlKCdJbnN0YW5jZVJlY29yZCcse1xuYWRkSXNzdWVyOk0uY2FsbChLZXl3b3JkU2hhcGUsSXNzdWVyUmVjb3JkU2hhcGUpLnJldHVybnMoKSxcbmdldEluc3RhbmNlUmVjb3JkOk0uY2FsbCgpLnJldHVybnMoSW5zdGFuY2VSZWNvcmRTaGFwZSksXG5nZXRUZXJtczpNLmNhbGwoKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSkpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbCgpLnJldHVybnMoSW5zdGFsbGF0aW9uU2hhcGUpLFxuZ2V0SXNzdWVyczpNLmNhbGwoKS5yZXR1cm5zKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRCcmFuZHM6TS5jYWxsKCkucmV0dXJucyhCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSksXG5hc3NlcnRVbmlxdWVLZXl3b3JkOk0uY2FsbChLZXl3b3JkU2hhcGUpLnJldHVybnMoKX0pO1xuXG5cbmNvbnN0IG1ha2VJbnN0YW5jZVJlY29yZD1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxuJ0luc3RhbmNlUmVjb3JkJyxcbkluc3RhbmNlUmVjb3JkSSxcbihyZWNvcmQpPT5oYXJkZW4oe2luc3RhbmNlUmVjb3JkOnJlY29yZH0pLFxue1xuYWRkSXNzdWVyKGtleXdvcmQsaXNzdWVyUmVjb3JkKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuIW93bktleXMoaXNzdWVyUmVjb3JkKS5pbmNsdWRlcyhrZXl3b3JkKXx8XG5GYWlsIGBjb25mbGljdGluZyBkZWZpbml0aW9uIG9mICR7cShrZXl3b3JkKX1gO1xuXG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xuY29uc3QgaW5zdGFuY2VSZWNvcmQ9c3RhdGUuaW5zdGFuY2VSZWNvcmQ7XG5jb25zdCBuZXh0SW5zdGFuY2VSZWNvcmQ9aGFyZGVuKHtcbi4uLmluc3RhbmNlUmVjb3JkLFxudGVybXM6e1xuLi4uaW5zdGFuY2VSZWNvcmQudGVybXMsXG5pc3N1ZXJzOntcbi4uLmluc3RhbmNlUmVjb3JkLnRlcm1zLmlzc3VlcnMsXG5ba2V5d29yZF06aXNzdWVyUmVjb3JkLmlzc3Vlcn0sXG5cbmJyYW5kczp7XG4uLi5pbnN0YW5jZVJlY29yZC50ZXJtcy5icmFuZHMsXG5ba2V5d29yZF06aXNzdWVyUmVjb3JkLmJyYW5kfX19KTtcblxuXG5cbnN0YXRlLmluc3RhbmNlUmVjb3JkPW5leHRJbnN0YW5jZVJlY29yZDtcbiB9LFxuZ2V0SW5zdGFuY2VSZWNvcmQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZDtcbiB9LFxuZ2V0VGVybXMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcztcbiB9LFxuZ2V0SW5zdGFsbGF0aW9uKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQuaW5zdGFsbGF0aW9uO1xuIH0sXG5nZXRJc3N1ZXJzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQudGVybXMuaXNzdWVycztcbiB9LFxuZ2V0QnJhbmRzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5yZXR1cm4gc3RhdGUuaW5zdGFuY2VSZWNvcmQudGVybXMuYnJhbmRzO1xuIH0sXG5hc3NlcnRVbmlxdWVLZXl3b3JkKGtleXdvcmQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xuYXNzZXJ0S2V5d29yZE5hbWUoa2V5d29yZCk7XG4hb3duS2V5cyhzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcy5pc3N1ZXJzKS5pbmNsdWRlcyhrZXl3b3JkKXx8XG5GYWlsIGBrZXl3b3JkICR7cShrZXl3b3JkKX0gbXVzdCBiZSB1bmlxdWVgO1xuIH19KTtcblxuXG5cbnJldHVybiBtYWtlSW5zdGFuY2VSZWNvcmQ7XG4gfTskaM2PX29uY2UubWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZShtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UiOlsibWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbcvnRbQQAAG0EAAApAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaW50ZXJuYWwtdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAiZe2OdcDAADXAwAAJwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2lzc3VlclJlY29yZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRGdWxsSXNzdWVyUmVjb3JkIiwibWFrZUlzc3VlclJlY29yZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUlzc3VlclJlY29yZD0oYnJhbmQsaXNzdWVyLGRpc3BsYXlJbmZvKT0+XG5oYXJkZW4oe1xuYnJhbmQsXG5pc3N1ZXIsXG5hc3NldEtpbmQ6ZGlzcGxheUluZm8uYXNzZXRLaW5kLFxuZGlzcGxheUluZm99KTtcblxuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlSXNzdWVyUmVjb3JkKG1ha2VJc3N1ZXJSZWNvcmQpO1xuY29uc3QgICAgICAgIGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQ9KGlzc3VlclJlY29yZCk9PntcbmlmKCFpc3N1ZXJSZWNvcmQuZGlzcGxheUluZm8pe1xudGhyb3cgRmFpbCBgZnVsbCBJc3N1ZXJSZWNvcmQgcmVxdWlyZXMgZGlzcGxheUluZm9gO1xuIH1cbiB9OyRozY9fb25jZS5hc3NlcnRGdWxsSXNzdWVyUmVjb3JkKGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUlzc3VlclJlY29yZCI6WyJtYWtlSXNzdWVyUmVjb3JkIl0sImFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQiOlsiYXNzZXJ0RnVsbElzc3VlclJlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAydfQsnxEAAJ8RAAAoAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaXNzdWVyU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuL2NsZWFuUHJvcG9zYWwuanMiLCIuL2lzc3VlclJlY29yZC5qcyJdLCJleHBvcnRzIjpbInByb3ZpZGVJc3N1ZXJTdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxkZWVwbHlGdWxmaWxsZWRPYmplY3Qsb2JqZWN0TWFwLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLGNsZWFuS2V5d29yZHMsbWFrZUlzc3VlclJlY29yZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkT2JqZWN0XCIsIFskaM2PX2EgPT4gKGRlZXBseUZ1bGZpbGxlZE9iamVjdCA9ICRozY9fYSldXSxbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImNsZWFuS2V5d29yZHNcIiwgWyRozY9fYSA9PiAoY2xlYW5LZXl3b3JkcyA9ICRozY9fYSldXV1dLFtcIi4vaXNzdWVyUmVjb3JkLmpzXCIsIFtbXCJtYWtlSXNzdWVyUmVjb3JkXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJSZWNvcmQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5jb25zdCBTVE9SQUdFX0lOU1RBTlRJQVRFRF9LRVk9J0lzc3VlclN0b3JhZ2VJbnN0YW50aWF0ZWQnO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUlzc3VlclN0b3JhZ2U9KHpjZkJhZ2dhZ2UpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0lzc3VlclJlY29yZD1wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4nYnJhbmRUb0lzc3VlclJlY29yZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbidpc3N1ZXJUb0lzc3VlclJlY29yZCcpO1xuXG5cbmxldCBpbnN0YW50aWF0ZWQ9emNmQmFnZ2FnZS5oYXMoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZKTtcbmNvbnN0IGFzc2VydEluc3RhbnRpYXRlZD0oKT0+e1xuaW5zdGFudGlhdGVkfHxGYWlsIGBpc3N1ZXJTdG9yYWdlIGhhcyBub3QgYmVlbiBpbnN0YW50aWF0ZWRgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHN0b3JlSXNzdWVyUmVjb3JkPShpc3N1ZXJSZWNvcmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNvbnN0e2JyYW5kLGlzc3Vlcn09aXNzdWVyUmVjb3JkO1xuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cblxuYnJhbmRUb0lzc3VlclJlY29yZC5pbml0KGJyYW5kLGlzc3VlclJlY29yZCk7XG5pc3N1ZXJUb0lzc3VlclJlY29yZC5pbml0KGlzc3Vlcixpc3N1ZXJSZWNvcmQpO1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH07XG5cbmNvbnN0IGdldEJ5QnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG5yZXR1cm4gYnJhbmRUb0lzc3VlclJlY29yZC5nZXQoYnJhbmQpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHN0b3JlSXNzdWVyPWFzeW5jKGlzc3VlclApPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmFuZElzc3Vlck1hdGNofHxGYWlsIGBpc3N1ZXIgd2FzIHVzaW5nIGEgYnJhbmQgd2hpY2ggd2FzIG5vdCBpdHMgb3duYDtcbmNvbnN0IGlzc3VlclJlY29yZD1tYWtlSXNzdWVyUmVjb3JkKGJyYW5kLGlzc3VlcixkaXNwbGF5SW5mbyk7XG5zdG9yZUlzc3VlclJlY29yZChpc3N1ZXJSZWNvcmQpO1xucmV0dXJuIGdldEJ5QnJhbmQoYnJhbmQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEFzc2V0S2luZEJ5QnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG5yZXR1cm4gZ2V0QnlCcmFuZChicmFuZCkuYXNzZXRLaW5kO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBzdG9yZUlzc3VlcktleXdvcmRSZWNvcmQ9YXN5bmModW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbmNsZWFuS2V5d29yZHModW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQpO1xuY29uc3QgaXNzdWVyUmVjb3JkUHM9b2JqZWN0TWFwKHVuY2xlYW5Jc3N1ZXJLZXl3b3JkUmVjb3JkLChpc3N1ZXJQKT0+XG5zdG9yZUlzc3Vlcihpc3N1ZXJQKSk7XG5cbmNvbnN0IGlzc3VlclJlY29yZHM9YXdhaXQgZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGlzc3VlclJlY29yZFBzKTtcbmNvbnN0IGlzc3VlcnM9b2JqZWN0TWFwKGlzc3VlclJlY29yZHMsKHtpc3N1ZXJ9KT0+aXNzdWVyKTtcbmNvbnN0IGJyYW5kcz1vYmplY3RNYXAoaXNzdWVyUmVjb3Jkcywoe2JyYW5kfSk9PmJyYW5kKTtcbnJldHVybiBoYXJkZW4oe2lzc3VlcnMsYnJhbmRzfSk7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBnZXRCcmFuZEZvcklzc3Vlcj0oaXNzdWVyKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG4vL1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpLmJyYW5kO1xuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0SXNzdWVyRm9yQnJhbmQ9KGJyYW5kKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG4vL1xucmV0dXJuIGJyYW5kVG9Jc3N1ZXJSZWNvcmQuZ2V0KGJyYW5kKS5pc3N1ZXI7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0SXNzdWVyUmVjb3Jkcz0oaXNzdWVycyk9PntcbmFzc2VydEluc3RhbnRpYXRlZCgpO1xucmV0dXJuIGlzc3VlcnMubWFwKGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldCk7XG4gfTtcblxuY29uc3QgaW5zdGFudGlhdGU9KGlzc3VlclJlY29yZHM9W10pPT57XG5pZighemNmQmFnZ2FnZS5oYXMoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZKSl7XG56Y2ZCYWdnYWdlLmluaXQoU1RPUkFHRV9JTlNUQU5USUFURURfS0VZLHRydWUpO1xuaW5zdGFudGlhdGVkPXRydWU7XG5mb3IoY29uc3QgcmVjb3JkIG9mIGlzc3VlclJlY29yZHMpe1xuc3RvcmVJc3N1ZXJSZWNvcmQocmVjb3JkKTtcbiB9XG4gfVxuIH07XG5cbnJldHVybntcbnN0b3JlSXNzdWVyS2V5d29yZFJlY29yZCxcbnN0b3JlSXNzdWVyLFxuc3RvcmVJc3N1ZXJSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kLFxuZ2V0QnJhbmRGb3JJc3N1ZXIsXG5nZXRJc3N1ZXJGb3JCcmFuZCxcbmdldElzc3VlclJlY29yZHMsXG5pbnN0YW50aWF0ZX07XG5cbiB9OyRozY9fb25jZS5wcm92aWRlSXNzdWVyU3RvcmFnZShwcm92aWRlSXNzdWVyU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcm92aWRlSXNzdWVyU3RvcmFnZSI6WyJwcm92aWRlSXNzdWVyU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAzg7JVUQYAAFEGAAAlAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvbWFrZUhhbmRsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUR1cmFibGVIYW5kbGUiLCJtYWtlSGFuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsaW5pdEVtcHR5LG1ha2VFeG8scHJlcGFyZUV4b0NsYXNzLEhhbmRsZUk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV0sW1wibWFrZUV4b1wiLCBbJGjNj19hID0+IChtYWtlRXhvID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiSGFuZGxlSVwiLCBbJGjNj19hID0+IChIYW5kbGVJID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUR1cmFibGVIYW5kbGU9KGJhZ2dhZ2UsaGFuZGxlVHlwZSk9PntcbnR5cGVvZiBoYW5kbGVUeXBlPT09J3N0cmluZyd8fEZhaWwgYGhhbmRsZVR5cGUgbXVzdCBiZSBhIHN0cmluZ2A7XG5jb25zdCBtYWtlSGFuZGxlPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4gYCR7aGFuZGxlVHlwZX1IYW5kbGVgLFxuSGFuZGxlSSxcbmluaXRFbXB0eSxcbnt9KTtcblxuLy9cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUhhbmRsZSk7XG4gfTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUhhbmRsZShkZWZpbmVEdXJhYmxlSGFuZGxlKTtcbmhhcmRlbihkZWZpbmVEdXJhYmxlSGFuZGxlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGFuZGxlPShoYW5kbGVUeXBlKT0+e1xudHlwZW9mIGhhbmRsZVR5cGU9PT0nc3RyaW5nJ3x8RmFpbCBgaGFuZGxlVHlwZSBtdXN0IGJlIGEgc3RyaW5nYDtcbi8vXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgKi9tYWtlRXhvKGAke2hhbmRsZVR5cGV9SGFuZGxlYCxIYW5kbGVJLHt9KSk7XG4gfTskaM2PX29uY2UubWFrZUhhbmRsZShtYWtlSGFuZGxlKTtcbmhhcmRlbihtYWtlSGFuZGxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmluZUR1cmFibGVIYW5kbGUiOlsiZGVmaW5lRHVyYWJsZUhhbmRsZSJdLCJtYWtlSGFuZGxlIjpbIm1ha2VIYW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAi3sP2XpDAAB6QwAAJQAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3RpbWUiXSwiZXhwb3J0cyI6WyJBZG1pbkZhY2V0SSIsIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSIsIkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUiLCJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSIsIkJ1bmRsZUNhcFNoYXBlIiwiQnVuZGxlU2hhcGUiLCJFbXB0eVByb3Bvc2FsU2hhcGUiLCJFeGl0T2JqZWN0SSIsIkV4aXRPYmplY3RTaGFwZSIsIkZlZU1pbnRBY2Nlc3NTaGFwZSIsIkZ1bGxQcm9wb3NhbFNoYXBlIiwiSGFuZGxlSSIsIkhhbmRsZU9mZmVySSIsIkluc3RhbGxhdGlvblNoYXBlIiwiSW5zdGFuY2VBZG1pbkkiLCJJbnN0YW5jZUFkbWluU2hhcGUiLCJJbnN0YW5jZUhhbmRsZVNoYXBlIiwiSW5zdGFuY2VSZWNvcmRTaGFwZSIsIkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0IiwiSW52aXRhdGlvbkVsZW1lbnRTaGFwZSIsIkludml0YXRpb25IYW5kbGVTaGFwZSIsIkludml0YXRpb25TaGFwZSIsIklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSIsIklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUiLCJJc3N1ZXJSZWNvcmRTaGFwZSIsIktleXdvcmRTaGFwZSIsIk9mZmVySGFuZGxlckkiLCJQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSIsIlByaWNlUXVvdGVTaGFwZSIsIlByb3Bvc2FsU2hhcGUiLCJTZWF0RGF0YVNoYXBlIiwiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiLCJTZWF0U2hhcGUiLCJUZXJtc1NoYXBlIiwiVGltZXJTaGFwZSIsIlVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlIiwiWm9lTWludEkiLCJab2VNaW50U2hhcGUiLCJab2VTZXJ2aWNlSSIsIlpvZVN0b3JhZ2VNYW5hZ2VySUtpdCIsImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIiwiaXNPbkRlbWFuZEV4aXRSdWxlIiwiaXNXYWl2ZWRFeGl0UnVsZSIsIm1ha2VIYW5kbGVTaGFwZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRTaGFwZSxBc3NldEtpbmRTaGFwZSxCcmFuZFNoYXBlLERpc3BsYXlJbmZvU2hhcGUsSXNzdWVyS2l0U2hhcGUsSXNzdWVyU2hhcGUsUGF5bWVudFNoYXBlLFN1YnNjcmliZXJTaGFwZSxNLFRpbWVzdGFtcFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRTaGFwZSA9ICRozY9fYSldXSxbXCJBc3NldEtpbmRTaGFwZVwiLCBbJGjNj19hID0+IChBc3NldEtpbmRTaGFwZSA9ICRozY9fYSldXSxbXCJCcmFuZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kU2hhcGUgPSAkaM2PX2EpXV0sW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dLFtcIklzc3VlcktpdFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlcktpdFNoYXBlID0gJGjNj19hKV1dLFtcIklzc3VlclNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlclNoYXBlID0gJGjNj19hKV1dLFtcIlBheW1lbnRTaGFwZVwiLCBbJGjNj19hID0+IChQYXltZW50U2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJTdWJzY3JpYmVyU2hhcGVcIiwgWyRozY9fYSA9PiAoU3Vic2NyaWJlclNoYXBlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy90aW1lXCIsIFtbXCJUaW1lc3RhbXBTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8vXG5jb25zdCAgICAgICAgS2V5d29yZFNoYXBlPU0uc3RyaW5nKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5LZXl3b3JkU2hhcGUoS2V5d29yZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uSGFuZGxlU2hhcGU9TS5yZW1vdGFibGUoJ0ludml0YXRpb25IYW5kbGUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5JbnZpdGF0aW9uSGFuZGxlU2hhcGUoSW52aXRhdGlvbkhhbmRsZVNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uU2hhcGU9TS5yZW1vdGFibGUoJ0ludml0YXRpb24nKTskaM2PX29uY2UuSW52aXRhdGlvblNoYXBlKEludml0YXRpb25TaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFuY2VIYW5kbGVTaGFwZT1NLnJlbW90YWJsZSgnSW5zdGFuY2VIYW5kbGUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkluc3RhbmNlSGFuZGxlU2hhcGUoSW5zdGFuY2VIYW5kbGVTaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFsbGF0aW9uU2hhcGU9TS5yZW1vdGFibGUoJ0luc3RhbGxhdGlvbicpOyRozY9fb25jZS5JbnN0YWxsYXRpb25TaGFwZShJbnN0YWxsYXRpb25TaGFwZSk7XG5jb25zdCAgICAgICAgU2VhdFNoYXBlPU0ucmVtb3RhYmxlKCdTZWF0Jyk7JGjNj19vbmNlLlNlYXRTaGFwZShTZWF0U2hhcGUpO1xuXG5jb25zdCAgICAgICAgQW1vdW50S2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoS2V5d29yZFNoYXBlLEFtb3VudFNoYXBlKTskaM2PX29uY2UuQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKFxuS2V5d29yZFNoYXBlLFxuTS5wYXR0ZXJuKCkpOyRozY9fb25jZS5BbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlKEFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihcbktleXdvcmRTaGFwZSxcbk0uZXJlZihQYXltZW50U2hhcGUpKTskaM2PX29uY2UuUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUoUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoS2V5d29yZFNoYXBlLElzc3VlclNoYXBlKTskaM2PX29uY2UuSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKElzc3VlcktleXdvcmRSZWNvcmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKFxuS2V5d29yZFNoYXBlLFxuTS5lcmVmKElzc3VlclNoYXBlKSk7JGjNj19vbmNlLklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUoSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBCcmFuZEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKEtleXdvcmRTaGFwZSxCcmFuZFNoYXBlKTskaM2PX29uY2UuQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSXNzdWVyUmVjb3JkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmJyYW5kOkJyYW5kU2hhcGUsXG5pc3N1ZXI6SXNzdWVyU2hhcGUsXG5hc3NldEtpbmQ6QXNzZXRLaW5kU2hhcGV9LFxuXG57ZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX0pOyRozY9fb25jZS5Jc3N1ZXJSZWNvcmRTaGFwZShJc3N1ZXJSZWNvcmRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFRlcm1zU2hhcGU9e1xuaXNzdWVyczpJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUsXG5icmFuZHM6QnJhbmRLZXl3b3JkUmVjb3JkU2hhcGV9OyRozY9fb25jZS5UZXJtc1NoYXBlKFRlcm1zU2hhcGUpO1xuXG5oYXJkZW4oVGVybXNTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBJbnN0YW5jZVJlY29yZFNoYXBlPXtcbmluc3RhbGxhdGlvbjpJbnN0YWxsYXRpb25TaGFwZSxcbmluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGUsXG50ZXJtczpNLnNwbGl0UmVjb3JkKFRlcm1zU2hhcGUpfTskaM2PX29uY2UuSW5zdGFuY2VSZWNvcmRTaGFwZShJbnN0YW5jZVJlY29yZFNoYXBlKTtcblxuaGFyZGVuKEluc3RhbmNlUmVjb3JkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgSGFuZGxlST1NLmludGVyZmFjZSgnSGFuZGxlJyx7fSk7JGjNj19vbmNlLkhhbmRsZUkoSGFuZGxlSSk7XG5cbmNvbnN0ICAgICAgICBtYWtlSGFuZGxlU2hhcGU9KG5hbWUpPT5NLnJlbW90YWJsZSggYCR7bmFtZX1IYW5kbGVgKTskaM2PX29uY2UubWFrZUhhbmRsZVNoYXBlKG1ha2VIYW5kbGVTaGFwZSk7XG5jb25zdCAgICAgICAgVGltZXJTaGFwZT1tYWtlSGFuZGxlU2hhcGUoJ3RpbWVyJyk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuVGltZXJTaGFwZShUaW1lclNoYXBlKTtcbmNvbnN0ICAgICAgICBGdWxsUHJvcG9zYWxTaGFwZT17XG53YW50OkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUsXG5naXZlOkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxcbi8vXG4vL1xuLy9cbmV4aXQ6TS5zcGxpdFJlY29yZChcbnt9LFxue1xub25EZW1hbmQ6bnVsbCxcbndhaXZlZDpudWxsLFxuYWZ0ZXJEZWFkbGluZTp7XG50aW1lcjpNLmVyZWYoVGltZXJTaGFwZSksXG5kZWFkbGluZTpUaW1lc3RhbXBTaGFwZX19LFxuXG5cbnt9KX07JGjNj19vbmNlLkZ1bGxQcm9wb3NhbFNoYXBlKEZ1bGxQcm9wb3NhbFNoYXBlKTtcblxuXG5oYXJkZW4oRnVsbFByb3Bvc2FsU2hhcGUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBQcm9wb3NhbFNoYXBlPU0uc3BsaXRSZWNvcmQoe30sRnVsbFByb3Bvc2FsU2hhcGUse30pOyRozY9fb25jZS5Qcm9wb3NhbFNoYXBlKFByb3Bvc2FsU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRW1wdHlQcm9wb3NhbFNoYXBlPU0uc3BsaXRSZWNvcmQoe1xuZ2l2ZTp7fSxcbndhbnQ6e30sXG5leGl0OntvbkRlbWFuZDpudWxsfX0pOyRozY9fb25jZS5FbXB0eVByb3Bvc2FsU2hhcGUoRW1wdHlQcm9wb3NhbFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgaXNPbkRlbWFuZEV4aXRSdWxlPShleGl0KT0+e1xuY29uc3RbZXhpdEtleV09T2JqZWN0LmtleXMoZXhpdCk7XG5yZXR1cm4gZXhpdEtleT09PSdvbkRlbWFuZCc7XG4gfTskaM2PX29uY2UuaXNPbkRlbWFuZEV4aXRSdWxlKGlzT25EZW1hbmRFeGl0UnVsZSk7XG5oYXJkZW4oaXNPbkRlbWFuZEV4aXRSdWxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1dhaXZlZEV4aXRSdWxlPShleGl0KT0+e1xuY29uc3RbZXhpdEtleV09T2JqZWN0LmtleXMoZXhpdCk7XG5yZXR1cm4gZXhpdEtleT09PSd3YWl2ZWQnO1xuIH07JGjNj19vbmNlLmlzV2FpdmVkRXhpdFJ1bGUoaXNXYWl2ZWRFeGl0UnVsZSk7XG5oYXJkZW4oaXNXYWl2ZWRFeGl0UnVsZSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGU9KGV4aXQpPT57XG5jb25zdFtleGl0S2V5XT1PYmplY3Qua2V5cyhleGl0KTtcbnJldHVybiBleGl0S2V5PT09J2FmdGVyRGVhZGxpbmUnO1xuIH07JGjNj19vbmNlLmlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlKGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlKTtcbmhhcmRlbihpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSk7XG5cbmNvbnN0ICAgICAgICBJbnZpdGF0aW9uRWxlbWVudFNoYXBlPU0uc3BsaXRSZWNvcmQoe1xuZGVzY3JpcHRpb246TS5zdHJpbmcoKSxcbmhhbmRsZTpJbnZpdGF0aW9uSGFuZGxlU2hhcGUsXG5pbnN0YW5jZTpJbnN0YW5jZUhhbmRsZVNoYXBlLFxuaW5zdGFsbGF0aW9uOkluc3RhbGxhdGlvblNoYXBlfSk7JGjNj19vbmNlLkludml0YXRpb25FbGVtZW50U2hhcGUoSW52aXRhdGlvbkVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE9mZmVySGFuZGxlckk9TS5pbnRlcmZhY2UoJ09mZmVySGFuZGxlcicse1xuaGFuZGxlOk0uY2FsbChTZWF0U2hhcGUpLm9wdGlvbmFsKE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuT2ZmZXJIYW5kbGVySShPZmZlckhhbmRsZXJJKTtcblxuXG5jb25zdCAgICAgICAgU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGU9TS5hcnJheU9mKHtcbnNlYXRIYW5kbGU6U2VhdFNoYXBlLFxuYWxsb2NhdGlvbjpBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGV9KTskaM2PX29uY2UuU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUoU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBab2VNaW50U2hhcGU9TS5yZW1vdGFibGUoJ1pvZU1pbnQnKTskaM2PX29uY2UuWm9lTWludFNoYXBlKFpvZU1pbnRTaGFwZSk7XG5jb25zdCAgICAgICAgWm9lTWludEk9TS5pbnRlcmZhY2UoJ1pvZU1pbnQnLHtcbmdldElzc3VlclJlY29yZDpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclJlY29yZFNoYXBlKSxcbm1pbnRBbmRFc2Nyb3c6TS5jYWxsKEFtb3VudFNoYXBlKS5yZXR1cm5zKCksXG53aXRoZHJhd0FuZEJ1cm46TS5jYWxsKEFtb3VudFNoYXBlKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuWm9lTWludEkoWm9lTWludEkpO1xuXG5cbmNvbnN0ICAgICAgICBGZWVNaW50QWNjZXNzU2hhcGU9TS5yZW1vdGFibGUoJ0ZlZU1pbnRBY2Nlc3MnKTskaM2PX29uY2UuRmVlTWludEFjY2Vzc1NoYXBlKEZlZU1pbnRBY2Nlc3NTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBFeGl0T2JqZWN0ST1NLmludGVyZmFjZSgnRXhpdCBPYmplY3QnLHtcbmV4aXQ6TS5jYWxsKCkucmV0dXJucygpfSk7JGjNj19vbmNlLkV4aXRPYmplY3RJKEV4aXRPYmplY3RJKTtcblxuXG5jb25zdCAgICAgICAgRXhpdE9iamVjdFNoYXBlPU0ucmVtb3RhYmxlKCdFeGl0T2JqJyk7JGjNj19vbmNlLkV4aXRPYmplY3RTaGFwZShFeGl0T2JqZWN0U2hhcGUpO1xuY29uc3QgICAgICAgIEluc3RhbmNlQWRtaW5TaGFwZT1NLnJlbW90YWJsZSgnSW5zdGFuY2VBZG1pbicpOyRozY9fb25jZS5JbnN0YW5jZUFkbWluU2hhcGUoSW5zdGFuY2VBZG1pblNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnN0YW5jZUFkbWluST1NLmludGVyZmFjZSgnSW5zdGFuY2VBZG1pbicse1xubWFrZUludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSxNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0ucmVjb3JkKCksTS5wYXR0ZXJuKCkpLlxucmV0dXJucyhJbnZpdGF0aW9uU2hhcGUpLFxuc2F2ZUlzc3VlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSXNzdWVyU2hhcGUpLEtleXdvcmRTaGFwZSkucmV0dXJucyhcbklzc3VlclJlY29yZFNoYXBlKSxcblxubWFrZU5vRXNjcm93U2VhdDpNLmNhbGwoXG5BbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsXG5Qcm9wb3NhbFNoYXBlLFxuRXhpdE9iamVjdFNoYXBlLFxuU2VhdFNoYXBlKS5cbnJldHVybnMoU2VhdFNoYXBlKSxcbmV4aXRBbGxTZWF0czpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmFpbEFsbFNlYXRzOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5leGl0U2VhdDpNLmNhbGwoU2VhdFNoYXBlLE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWxTZWF0Ok0uY2FsbChTZWF0U2hhcGUsTS5hbnkoKSkucmV0dXJucygpLFxubWFrZVpvZU1pbnQ6TS5jYWxsKEtleXdvcmRTaGFwZSkuXG5vcHRpb25hbChcbkFzc2V0S2luZFNoYXBlLFxuRGlzcGxheUluZm9TaGFwZSxcbk0uc3BsaXRSZWNvcmQoe30se2VsZW1lbnRTaGFwZTpNLnBhdHRlcm4oKX0pKS5cblxucmV0dXJucyhNLnJlbW90YWJsZSgnem9lTWludCcpKSxcbnJlZ2lzdGVyRmVlTWludDpNLmNhbGwoS2V5d29yZFNoYXBlLEZlZU1pbnRBY2Nlc3NTaGFwZSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdmZWVNaW50JykpLFxuXG5yZXBsYWNlQWxsb2NhdGlvbnM6TS5jYWxsKFNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlKS5yZXR1cm5zKCksXG5zdG9wQWNjZXB0aW5nT2ZmZXJzOk0uY2FsbCgpLnJldHVybnMoKSxcbnNldE9mZmVyRmlsdGVyOk0uY2FsbChNLmFycmF5T2YoTS5zdHJpbmcoKSkpLnJldHVybnMoKSxcbmdldE9mZmVyRmlsdGVyOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheU9mKE0uc3RyaW5nKCkpKSxcbmdldEV4aXRTdWJzY3JpYmVyOk0uY2FsbChTZWF0U2hhcGUpLnJldHVybnMoU3Vic2NyaWJlclNoYXBlKSxcbmlzQmxvY2tlZDpNLmNhbGwoTS5zdHJpbmcoKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5yZXBhaXJDb250cmFjdENvbXBsZXRpb25XYXRjaGVyOk0uY2FsbCgpLnJldHVybnMoKX0pOyRozY9fb25jZS5JbnN0YW5jZUFkbWluSShJbnN0YW5jZUFkbWluSSk7XG5cblxuY29uc3QgICAgICAgIEluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0PXtcbmluc3RhbmNlU3RvcmFnZU1hbmFnZXI6TS5pbnRlcmZhY2UoJ0luc3RhbmNlU3RvcmFnZU1hbmFnZXInLHtcbmdldFRlcm1zOk0uY2FsbCgpLnJldHVybnMoTS5zcGxpdFJlY29yZChUZXJtc1NoYXBlKSksXG5nZXRJc3N1ZXJzOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEJyYW5kczpNLmNhbGwoKS5yZXR1cm5zKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEluc3RhbGxhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKEluc3RhbGxhdGlvblNoYXBlKSxcbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5cbnNhdmVJc3N1ZXI6TS5jYWxsKElzc3VlclNoYXBlLEtleXdvcmRTaGFwZSkucmV0dXJucyhNLnByb21pc2UoKSksXG5tYWtlWm9lTWludDpNLmNhbGwoS2V5d29yZFNoYXBlKS5cbm9wdGlvbmFsKFxuQXNzZXRLaW5kU2hhcGUsXG5EaXNwbGF5SW5mb1NoYXBlLFxuTS5zcGxpdFJlY29yZCh7fSx7ZWxlbWVudFNoYXBlOk0ucGF0dGVybigpfSkpLlxuXG5yZXR1cm5zKE0uZXJlZihab2VNaW50U2hhcGUpKSxcbnJlZ2lzdGVyRmVlTWludDpNLmNhbGwoS2V5d29yZFNoYXBlLEZlZU1pbnRBY2Nlc3NTaGFwZSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdmZWVNaW50JykpLFxuXG5nZXRJbnN0YW5jZVJlY29yZDpNLmNhbGwoKS5yZXR1cm5zKEluc3RhbmNlUmVjb3JkU2hhcGUpLFxuZ2V0SXNzdWVyUmVjb3JkczpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihJc3N1ZXJSZWNvcmRTaGFwZSkpLFxuZ2V0V2l0aGRyYXdGYWNldDpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdXaXRoZHJhd0ZhY2V0JykpLFxuaW5pdEluc3RhbmNlQWRtaW46TS5jYWxsKFxuSW5zdGFuY2VIYW5kbGVTaGFwZSxcbk0ucmVtb3RhYmxlKCdpbnN0YW5jZUFkbWluJykpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5kZWxldGVJbnN0YW5jZUFkbWluOk0uY2FsbChJbnN0YW5jZUFkbWluU2hhcGUpLnJldHVybnMoKSxcbm1ha2VJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUsTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnJlY29yZCgpLE0ucGF0dGVybigpKS5cbnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJvb3Q6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbmdldEFkbWluTm9kZTpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCdhZG1pbk5vZGUnKSl9KSxcblxud2l0aGRyYXdGYWNldDpNLmludGVyZmFjZSgnV2l0aGRyYXdGYWNldCcse1xud2l0aGRyYXdQYXltZW50czpNLmNhbGwoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKFxuUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUpfSksXG5cblxuaGVscGVyczpNLmludGVyZmFjZSgnSW5zdGFuY2VTdG9yYWdlTWFuYWdlciBoZWxwZXInLHtcbndyYXBJc3N1ZXJLaXRXaXRoWm9lTWludDpNLmNhbGwoXG5LZXl3b3JkU2hhcGUsXG5Jc3N1ZXJLaXRTaGFwZSxcbk0ucmVtb3RhYmxlKCdhZG1pbk5vZGUnKSkuXG5yZXR1cm5zKFpvZU1pbnRTaGFwZSl9KX07JGjNj19vbmNlLkluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0KEluc3RhbmNlU3RvcmFnZU1hbmFnZXJJS2l0KTtcblxuXG5oYXJkZW4oSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQpO1xuXG5jb25zdCAgICAgICAgQnVuZGxlQ2FwU2hhcGU9TS5yZW1vdGFibGUoJ2J1bmRsZUNhcCcpOyRozY9fb25jZS5CdW5kbGVDYXBTaGFwZShCdW5kbGVDYXBTaGFwZSk7XG5jb25zdCAgICAgICAgQnVuZGxlU2hhcGU9TS5hbmQoXG5NLnNwbGl0UmVjb3JkKHttb2R1bGVGb3JtYXQ6TS5hbnkoKX0pLFxuTS5yZWNvcmRPZihNLnN0cmluZygpLE0uc3RyaW5nKHtzdHJpbmdMZW5ndGhMaW1pdDpJbmZpbml0eX0pKSk7JGjNj19vbmNlLkJ1bmRsZVNoYXBlKEJ1bmRsZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGU9TS5zcGxpdFJlY29yZChcbntpbnN0YWxsYXRpb246SW5zdGFsbGF0aW9uU2hhcGV9LFxue1xuYnVuZGxlOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNLnN0cmluZyh7c3RyaW5nTGVuZ3RoTGltaXQ6SW5maW5pdHl9KSksXG5idW5kbGVDYXA6QnVuZGxlQ2FwU2hhcGUsXG5idW5kbGVJRDpNLnN0cmluZygpfSxcblxue30pOyRozY9fb25jZS5VbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZShVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFpvZVN0b3JhZ2VNYW5hZ2VySUtpdD17XG56b2VTZXJ2aWNlRGF0YUFjY2VzczpNLmludGVyZmFjZSgnWm9lU2VydmljZSBkYXRhQWNjZXNzJyx7XG5nZXRUZXJtczpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhNLnNwbGl0UmVjb3JkKFRlcm1zU2hhcGUpKSxcbmdldElzc3VlcnM6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEJyYW5kczpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSksXG5nZXRJbnN0YWxsYXRpb246TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLmVyZWYoTS5yZW1vdGFibGUoJ0luc3RhbGxhdGlvbicpKSksXG5cbmdldEludml0YXRpb25Jc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5cbmdldEJ1bmRsZUlERnJvbUluc3RhbGxhdGlvbjpNLmNhbGwoSW5zdGFsbGF0aW9uU2hhcGUpLnJldHVybnMoXG5NLmVyZWYoTS5zdHJpbmcoKSkpLFxuXG5pbnN0YWxsQnVuZGxlOk0uY2FsbChNLm9yKEluc3RhbmNlSGFuZGxlU2hhcGUsQnVuZGxlU2hhcGUpKS5cbm9wdGlvbmFsKE0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5pbnN0YWxsQnVuZGxlSUQ6TS5jYWxsKE0uc3RyaW5nKCkpLlxub3B0aW9uYWwoTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcblxuZ2V0UHVibGljRmFjZXQ6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLmVyZWYoTS5yZW1vdGFibGUoJ1B1YmxpY0ZhY2V0JykpKSxcblxuZ2V0T2ZmZXJGaWx0ZXI6TS5jYWxsKEluc3RhbmNlSGFuZGxlU2hhcGUpLnJldHVybnMoTS5hcnJheU9mKE0uc3RyaW5nKCkpKSxcbmdldFByb3Bvc2FsU2hhcGVGb3JJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLm9wdChNLnBhdHRlcm4oKSkpfSksXG5cblxubWFrZU9mZmVyQWNjZXNzOk0uaW50ZXJmYWNlKCdab2VTdG9yYWdlIG1ha2VPZmZlciBhY2Nlc3MnLHtcbmdldEFzc2V0S2luZEJ5QnJhbmQ6TS5jYWxsKEJyYW5kU2hhcGUpLnJldHVybnMoQXNzZXRLaW5kU2hhcGUpLFxuZ2V0SW5zdGFuY2VBZG1pbjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdpbnN0YW5jZUFkbWluJykpLFxuXG5nZXRQcm9wb3NhbFNoYXBlRm9ySW52aXRhdGlvbjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5vcHQoTS5wYXR0ZXJuKCkpKSxcblxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcbmRlcG9zaXRQYXltZW50czpNLmNhbGwoUHJvcG9zYWxTaGFwZSxQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSkucmV0dXJucyhcbk0ucHJvbWlzZSgpKX0pLFxuXG5cbnN0YXJ0SW5zdGFuY2VBY2Nlc3M6TS5pbnRlcmZhY2UoJ1pvZVN0b3JhZ2Ugc3RhcnRJbnN0YW5jZSBhY2Nlc3MnLHtcbm1ha2Vab2VJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyOk0uY2FsbChcbkluc3RhbGxhdGlvblNoYXBlLFxuTS5hbnkoKSxcbklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUsXG5NLm9yKEluc3RhbmNlSGFuZGxlU2hhcGUsQnVuZGxlU2hhcGUpLFxuTS5vcihCdW5kbGVDYXBTaGFwZSxCdW5kbGVTaGFwZSksXG5NLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxudW53cmFwSW5zdGFsbGF0aW9uOk0uY2FsbFdoZW4oTS5lcmVmKEluc3RhbGxhdGlvblNoYXBlKSkucmV0dXJucyhcblVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlKX0pLFxuXG5cbmludml0YXRpb25Jc3N1ZXJBY2Nlc3M6TS5pbnRlcmZhY2UoJ1pvZVN0b3JhZ2UgaW52aXRhdGlvbklzc3Vlcicse1xuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKX0pfTskaM2PX29uY2UuWm9lU3RvcmFnZU1hbmFnZXJJS2l0KFpvZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cblxuaGFyZGVuKFpvZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cbmNvbnN0ICAgICAgICBab2VTZXJ2aWNlST1NLmludGVyZmFjZSgnWm9lU2VydmljZScse1xuaW5zdGFsbDpNLmNhbGwoTS5hbnkoKSkub3B0aW9uYWwoTS5zdHJpbmcoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5pbnN0YWxsQnVuZGxlSUQ6TS5jYWxsKE0uc3RyaW5nKCkpLm9wdGlvbmFsKE0uc3RyaW5nKCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuc3RhcnRJbnN0YW5jZTpNLmNhbGwoTS5lcmVmKEluc3RhbGxhdGlvblNoYXBlKSkuXG5vcHRpb25hbChJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlLE0ucmVjb3JkKCksTS5yZWNvcmQoKSxNLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxub2ZmZXI6TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5cbm9wdGlvbmFsKFByb3Bvc2FsU2hhcGUsUGF5bWVudFBLZXl3b3JkUmVjb3JkU2hhcGUsTS5hbnkoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcblxuZ2V0T2ZmZXJGaWx0ZXI6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuTS5hcnJheU9mKE0uc3RyaW5nKCkpKSxcblxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEZlZUlzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldEJyYW5kczpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5CcmFuZEtleXdvcmRSZWNvcmRTaGFwZSksXG5cbmdldElzc3VlcnM6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKSxcblxuZ2V0UHVibGljRmFjZXQ6TS5jYWxsV2hlbihNLmF3YWl0KEluc3RhbmNlSGFuZGxlU2hhcGUpKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ1B1YmxpY0ZhY2V0JykpLFxuXG5nZXRUZXJtczpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoTS5hbnkoKSksXG5nZXRJbnN0YWxsYXRpb25Gb3JJbnN0YW5jZTpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5NLmVyZWYoTS5yZW1vdGFibGUoJ0luc3RhbGxhdGlvbicpKSksXG5cbmdldEJ1bmRsZUlERnJvbUluc3RhbGxhdGlvbjpNLmNhbGwoSW5zdGFsbGF0aW9uU2hhcGUpLnJldHVybnMoXG5NLmVyZWYoTS5zdHJpbmcoKSkpLFxuXG5cbmdldEluc3RhbGxhdGlvbjpNLmNhbGwoTS5lcmVmKEludml0YXRpb25TaGFwZSkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0SW5zdGFuY2U6TS5jYWxsKE0uZXJlZihJbnZpdGF0aW9uU2hhcGUpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldENvbmZpZ3VyYXRpb246TS5jYWxsKCkucmV0dXJucyh7XG5mZWVJc3N1ZXJDb25maWc6e1xubmFtZTpNLnN0cmluZygpLFxuYXNzZXRLaW5kOiduYXQnLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX19KSxcblxuXG5nZXRJbnZpdGF0aW9uRGV0YWlsczpNLmNhbGwoTS5lcmVmKEludml0YXRpb25TaGFwZSkpLnJldHVybnMoTS5hbnkoKSksXG5nZXRQcm9wb3NhbFNoYXBlRm9ySW52aXRhdGlvbjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5vcHQoUHJvcG9zYWxTaGFwZSkpfSk7JGjNj19vbmNlLlpvZVNlcnZpY2VJKFpvZVNlcnZpY2VJKTtcblxuXG5cbmNvbnN0ICAgICAgICBBZG1pbkZhY2V0ST1NLmludGVyZmFjZSgnWmNmQWRtaW5GYWNldCcse1xuZ2V0VmF0U2h1dGRvd25Qcm9taXNlOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxucmVzdGFydENvbnRyYWN0Ok0uY2FsbCgpLm9wdGlvbmFsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudXBncmFkZUNvbnRyYWN0Ok0uY2FsbChNLnN0cmluZygpKS5vcHRpb25hbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbnRlcm1pbmF0ZUNvbnRyYWN0Ok0uY2FsbChNLmVycm9yKCkpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjNj19vbmNlLkFkbWluRmFjZXRJKEFkbWluRmFjZXRJKTtcblxuXG5jb25zdCAgICAgICAgU2VhdERhdGFTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xucHJvcG9zYWw6UHJvcG9zYWxTaGFwZSxcbmluaXRpYWxBbGxvY2F0aW9uOkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxcbnNlYXRIYW5kbGU6U2VhdFNoYXBlfSxcblxue1xub2ZmZXJBcmdzOk0uYW55KCl9KTskaM2PX29uY2UuU2VhdERhdGFTaGFwZShTZWF0RGF0YVNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBIYW5kbGVPZmZlckk9TS5pbnRlcmZhY2UoJ0hhbmRsZU9mZmVyJyx7XG5oYW5kbGVPZmZlcjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlLFNlYXREYXRhU2hhcGUpLnJldHVybnMoe1xub2ZmZXJSZXN1bHRQcm9taXNlOk0ucHJvbWlzZSgpLFxuZXhpdE9iajpFeGl0T2JqZWN0U2hhcGV9KX0pOyRozY9fb25jZS5IYW5kbGVPZmZlckkoSGFuZGxlT2ZmZXJJKTtcblxuXG5cbmNvbnN0ICAgICAgICBQcmljZVF1b3RlU2hhcGU9e1xucXVvdGVBbW91bnQ6QW1vdW50U2hhcGUsXG5xdW90ZVBheW1lbnQ6TS5lcmVmKFBheW1lbnRTaGFwZSl9OyRozY9fb25jZS5QcmljZVF1b3RlU2hhcGUoUHJpY2VRdW90ZVNoYXBlKTtcblxuaGFyZGVuKFByaWNlUXVvdGVTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJLZXl3b3JkU2hhcGUiOlsiS2V5d29yZFNoYXBlIl0sIkludml0YXRpb25IYW5kbGVTaGFwZSI6WyJJbnZpdGF0aW9uSGFuZGxlU2hhcGUiXSwiSW52aXRhdGlvblNoYXBlIjpbIkludml0YXRpb25TaGFwZSJdLCJJbnN0YW5jZUhhbmRsZVNoYXBlIjpbIkluc3RhbmNlSGFuZGxlU2hhcGUiXSwiSW5zdGFsbGF0aW9uU2hhcGUiOlsiSW5zdGFsbGF0aW9uU2hhcGUiXSwiU2VhdFNoYXBlIjpbIlNlYXRTaGFwZSJdLCJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUiOlsiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlIl0sIkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUiOlsiQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSJdLCJQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSI6WyJQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSJdLCJJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUiOlsiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlIl0sIklzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUiOlsiSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSJdLCJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSI6WyJCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSJdLCJJc3N1ZXJSZWNvcmRTaGFwZSI6WyJJc3N1ZXJSZWNvcmRTaGFwZSJdLCJUZXJtc1NoYXBlIjpbIlRlcm1zU2hhcGUiXSwiSW5zdGFuY2VSZWNvcmRTaGFwZSI6WyJJbnN0YW5jZVJlY29yZFNoYXBlIl0sIkhhbmRsZUkiOlsiSGFuZGxlSSJdLCJtYWtlSGFuZGxlU2hhcGUiOlsibWFrZUhhbmRsZVNoYXBlIl0sIlRpbWVyU2hhcGUiOlsiVGltZXJTaGFwZSJdLCJGdWxsUHJvcG9zYWxTaGFwZSI6WyJGdWxsUHJvcG9zYWxTaGFwZSJdLCJQcm9wb3NhbFNoYXBlIjpbIlByb3Bvc2FsU2hhcGUiXSwiRW1wdHlQcm9wb3NhbFNoYXBlIjpbIkVtcHR5UHJvcG9zYWxTaGFwZSJdLCJpc09uRGVtYW5kRXhpdFJ1bGUiOlsiaXNPbkRlbWFuZEV4aXRSdWxlIl0sImlzV2FpdmVkRXhpdFJ1bGUiOlsiaXNXYWl2ZWRFeGl0UnVsZSJdLCJpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSI6WyJpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSJdLCJJbnZpdGF0aW9uRWxlbWVudFNoYXBlIjpbIkludml0YXRpb25FbGVtZW50U2hhcGUiXSwiT2ZmZXJIYW5kbGVySSI6WyJPZmZlckhhbmRsZXJJIl0sIlNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlIjpbIlNlYXRIYW5kbGVBbGxvY2F0aW9uc1NoYXBlIl0sIlpvZU1pbnRTaGFwZSI6WyJab2VNaW50U2hhcGUiXSwiWm9lTWludEkiOlsiWm9lTWludEkiXSwiRmVlTWludEFjY2Vzc1NoYXBlIjpbIkZlZU1pbnRBY2Nlc3NTaGFwZSJdLCJFeGl0T2JqZWN0SSI6WyJFeGl0T2JqZWN0SSJdLCJFeGl0T2JqZWN0U2hhcGUiOlsiRXhpdE9iamVjdFNoYXBlIl0sIkluc3RhbmNlQWRtaW5TaGFwZSI6WyJJbnN0YW5jZUFkbWluU2hhcGUiXSwiSW5zdGFuY2VBZG1pbkkiOlsiSW5zdGFuY2VBZG1pbkkiXSwiSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQiOlsiSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQiXSwiQnVuZGxlQ2FwU2hhcGUiOlsiQnVuZGxlQ2FwU2hhcGUiXSwiQnVuZGxlU2hhcGUiOlsiQnVuZGxlU2hhcGUiXSwiVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUiOlsiVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUiXSwiWm9lU3RvcmFnZU1hbmFnZXJJS2l0IjpbIlpvZVN0b3JhZ2VNYW5hZ2VySUtpdCJdLCJab2VTZXJ2aWNlSSI6WyJab2VTZXJ2aWNlSSJdLCJBZG1pbkZhY2V0SSI6WyJBZG1pbkZhY2V0SSJdLCJTZWF0RGF0YVNoYXBlIjpbIlNlYXREYXRhU2hhcGUiXSwiSGFuZGxlT2ZmZXJJIjpbIkhhbmRsZU9mZmVySSJdLCJQcmljZVF1b3RlU2hhcGUiOlsiUHJpY2VRdW90ZVNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANt1Ov+IAQAAiAEAAB4AAABAYWdvcmljL3pvbmUtdjAuMi4yL2R1cmFibGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2R1cmFibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA97rZ1goRAAAKEQAAIgAAAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixpc1Bhc3NhYmxlLGNhbkJlRHVyYWJsZSxtYWtlU2NhbGFyTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSx3YXRjaFByb21pc2Usa2V5cyxtYWtlT25jZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVTZXRTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVNldFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlID0gJGjNj19hKV1dLFtcIndhdGNoUHJvbWlzZVwiLCBbJGjNj19hID0+ICh3YXRjaFByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZVwiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXSxbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1N0b3JhYmxlPShzcGVjaW1lbik9PmlzUGFzc2FibGUoc3BlY2ltZW4pJiZjYW5CZUR1cmFibGUoc3BlY2ltZW4pO1xuaGFyZGVuKGlzU3RvcmFibGUpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGF0dGFjaER1cmFibGVTdG9yZXM9KGdldEJhZ2dhZ2UpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PntcbmNvbnN0IGJhZ2dhZ2U9Z2V0QmFnZ2FnZSgpO1xuY29uc3QgcmV0PXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoYmFnZ2FnZSxsYWJlbCxvcHRpb25zKTtcbnJldHVybiByZXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNldFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVNldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrU2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3ZWFrTWFwU3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKGdldEJhZ2dhZ2UoKSxsYWJlbCxvcHRpb25zKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXR1cm4gRmFyKCdkdXJhYmxlU3RvcmVzJyx7XG5kZXRhY2hlZDooKT0+ZGV0YWNoZWREdXJhYmxlU3RvcmVzLFxuaXNTdG9yYWJsZSxcbm1hcFN0b3JlLFxuc2V0U3RvcmUsXG53ZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmV9KTtcblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGV0YWNoZWREdXJhYmxlU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PlxubWFrZVNjYWxhck1hcFN0b3JlKCdkZXRhY2hlZCcpKTtcblxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEdXJhYmxlWm9uZT0oYmFnZ2FnZSxiYXNlTGFiZWw9J2R1cmFibGVab25lJyk9PntcbmJhZ2dhZ2V8fEZhaWwgYGJhZ2dhZ2UgcmVxdWlyZWRgO1xuXG5jb25zdCBhdHRhY2hlZFN0b3Jlcz1hdHRhY2hEdXJhYmxlU3RvcmVzKCgpPT5iYWdnYWdlKTtcblxuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChcbmJhc2VMYWJlbCxcbmF0dGFjaGVkU3RvcmVzLFxuYmFnZ2FnZSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZXhvQ2xhc3M9KC4uLmFyZ3MpPT5wcmVwYXJlRXhvQ2xhc3MoYmFnZ2FnZSwuLi5hcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xuY29uc3QgZXhvQ2xhc3NLaXQ9KC4uLmFyZ3MpPT5wcmVwYXJlRXhvQ2xhc3NLaXQoYmFnZ2FnZSwuLi5hcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG89KC4uLmFyZ3MpPT5wcmVwYXJlRXhvKGJhZ2dhZ2UsLi4uYXJncyk7XG5cbmNvbnN0IHN1YlpvbmVTdG9yZT13cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMubWFwU3RvcmUsa2V5cy56b25lKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdWJab25lPShsYWJlbCxvcHRpb25zPXt9KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YkJhZ2dhZ2U9c3ViWm9uZVN0b3JlKGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIG1ha2VEdXJhYmxlWm9uZShzdWJCYWdnYWdlLCBgJHtiYXNlTGFiZWx9LiR7bGFiZWx9YCk7XG4gfTtcblxucmV0dXJuIEZhcignZHVyYWJsZVpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIoZXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihleG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihleG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmUsXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6YXR0YWNoZWRTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmF0dGFjaGVkU3RvcmVzLmlzU3RvcmFibGUsXG5cbm1hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5zZXRTdG9yZSxrZXlzLnN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMud2Vha01hcFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha1NldFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrU2V0U3RvcmUsa2V5cy5zdG9yZSl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VEdXJhYmxlWm9uZShtYWtlRHVyYWJsZVpvbmUpO1xuaGFyZGVuKG1ha2VEdXJhYmxlWm9uZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRHVyYWJsZVpvbmUiOlsibWFrZUR1cmFibGVab25lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIHpHbNhAgAAYQIAABsAAABAZW5kby9iYXNlNjQtdjEuMC45L2F0b2IuanN7ImltcG9ydHMiOlsiLi9kZWNvZGUuanMiXSwiZXhwb3J0cyI6WyJhdG9iIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGRlY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZGVjb2RlLmpzXCIsIFtbXCJkZWNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZGVjb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhdG9iPShlbmNvZGVkRGF0YSk9PntcbmNvbnN0IGJ1Zj1kZWNvZGVCYXNlNjQoZW5jb2RlZERhdGEpO1xucmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnVmKTtcbiB9OyRozY9fb25jZS5hdG9iKGF0b2IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXRvYiI6WyJhdG9iIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZUXeYBAwAAAQMAABsAAABAZW5kby9iYXNlNjQtdjEuMC45L2J0b2EuanN7ImltcG9ydHMiOlsiLi9lbmNvZGUuanMiXSwiZXhwb3J0cyI6WyJidG9hIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGVuY29kZUJhc2U2NDskaM2PX2ltcG9ydHMoW1tcIi4vZW5jb2RlLmpzXCIsIFtbXCJlbmNvZGVCYXNlNjRcIiwgWyRozY9fYSA9PiAoZW5jb2RlQmFzZTY0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBidG9hPShzdHJpbmdUb0VuY29kZSk9PntcbmNvbnN0IGJ5dGVzPXN0cmluZ1RvRW5jb2RlLnNwbGl0KCcnKS5tYXAoKGNoYXIpPT57XG5jb25zdCBiPWNoYXIuY2hhckNvZGVBdCgwKTtcbmlmKGI+MHhmZil7XG50aHJvdyBFcnJvciggYGJ0b2E6IGNoYXJhY3RlciBvdXQgb2YgcmFuZ2U6ICR7Y2hhcn1gKTtcbiB9XG5yZXR1cm4gYjtcbiB9KTtcbmNvbnN0IGJ1Zj1uZXcgVWludDhBcnJheShieXRlcyk7XG5yZXR1cm4gZW5jb2RlQmFzZTY0KGJ1Zik7XG4gfTskaM2PX29uY2UuYnRvYShidG9hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJ0b2EiOlsiYnRvYSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABz+iePqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOS9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZGVjb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2RlY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD390dCqwEAAKsBAAAdAAAAQGVuZG8vYmFzZTY0LXYxLjAuOS9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZW5jb2RlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZS5qcyI6W1siZW5jb2RlQmFzZTY0IiwiZW5jb2RlQmFzZTY0Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABq5nZnlgIAAJYCAAAcAAAAQGVuZG8vYmFzZTY0LXYxLjAuOS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGUuanMiLCIuL3NyYy9kZWNvZGUuanMiLCIuL2J0b2EuanMiLCIuL2F0b2IuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlLmpzXCIsIFtdXSxbXCIuL3NyYy9kZWNvZGUuanNcIiwgW11dLFtcIi4vYnRvYS5qc1wiLCBbXV0sW1wiLi9hdG9iLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlLmpzIjpbWyJlbmNvZGVCYXNlNjQiLCJlbmNvZGVCYXNlNjQiXV0sIi4vc3JjL2RlY29kZS5qcyI6W1siZGVjb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0Il1dLCIuL2J0b2EuanMiOltbImJ0b2EiLCJidG9hIl1dLCIuL2F0b2IuanMiOltbImF0b2IiLCJhdG9iIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABdcxYnEQMAABEDAAAhAAAAQGVuZG8vYmFzZTY0LXYxLjAuOS9zcmMvY29tbW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhbHBoYWJldDY0IiwibW9ub2R1NjQiLCJwYWRkaW5nIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG5jb25zdCAgICAgICAgcGFkZGluZz0nPSc7JGjNj19vbmNlLnBhZGRpbmcocGFkZGluZyk7XG5cbmNvbnN0ICAgICAgICBhbHBoYWJldDY0PVxuJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbHBoYWJldDY0KGFscGhhYmV0NjQpO1xuY29uc3QgICAgICAgIG1vbm9kdTY0PXt9OyRozY9fb25jZS5tb25vZHU2NChtb25vZHU2NCk7XG5mb3IobGV0IGk9MDtpPGFscGhhYmV0NjQubGVuZ3RoO2krPTEpe1xuY29uc3QgYz1hbHBoYWJldDY0W2ldO1xubW9ub2R1NjRbY109aTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYWRkaW5nIjpbInBhZGRpbmciXSwiYWxwaGFiZXQ2NCI6WyJhbHBoYWJldDY0Il0sIm1vbm9kdTY0IjpbIm1vbm9kdTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOBOTL53BwAAdwcAACEAAABAZW5kby9iYXNlNjQtdjEuMC45L3NyYy9kZWNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJkZWNvZGVCYXNlNjQiLCJqc0RlY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtb25vZHU2NCxwYWRkaW5nOyRozY9faW1wb3J0cyhbW1wiLi9jb21tb24uanNcIiwgW1tcIm1vbm9kdTY0XCIsIFskaM2PX2EgPT4gKG1vbm9kdTY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGpzRGVjb2RlQmFzZTY0PShzdHJpbmcsbmFtZT0nPHVua25vd24+Jyk9PntcbmNvbnN0IGRhdGE9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKHN0cmluZy5sZW5ndGgqNC8zKSk7XG5sZXQgcmVnaXN0ZXI9MDtcbmxldCBxdWFudHVtPTA7XG5sZXQgaT0wOy8vXG5sZXQgaj0wOy8vXG5cbndoaWxlKGk8c3RyaW5nLmxlbmd0aCYmc3RyaW5nW2ldIT09cGFkZGluZyl7XG5jb25zdCBudW1iZXI9bW9ub2R1NjRbc3RyaW5nW2ldXTtcbmlmKG51bWJlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvciggYEludmFsaWQgYmFzZTY0IGNoYXJhY3RlciAke3N0cmluZ1tpXX0gaW4gc3RyaW5nICR7bmFtZX1gKTtcbiB9XG5yZWdpc3Rlcj1yZWdpc3Rlcjw8NnxudW1iZXI7XG5xdWFudHVtKz02O1xuaWYocXVhbnR1bT49OCl7XG5xdWFudHVtLT04O1xuZGF0YVtqXT1yZWdpc3Rlcj4+PnF1YW50dW07XG5qKz0xO1xucmVnaXN0ZXImPSgxPDxxdWFudHVtKS0xO1xuIH1cbmkrPTE7XG4gfVxuXG53aGlsZShxdWFudHVtPjApe1xuaWYoaT09PXN0cmluZy5sZW5ndGh8fHN0cmluZ1tpXSE9PXBhZGRpbmcpe1xudGhyb3cgRXJyb3IoIGBNaXNzaW5nIHBhZGRpbmcgYXQgb2Zmc2V0ICR7aX0gb2Ygc3RyaW5nICR7bmFtZX1gKTtcbiB9XG4vL1xuLy9cbmkrPTE7XG5xdWFudHVtLT0yO1xuIH1cblxuaWYoaTxzdHJpbmcubGVuZ3RoKXtcbnRocm93IEVycm9yKFxuIGBCYXNlNjQgc3RyaW5nIGhhcyB0cmFpbGluZyBnYXJiYWdlICR7c3RyaW5nLnN1YnN0cihcbmkpXG4gfSBpbiBzdHJpbmcgJHtuYW1lfWApO1xuXG4gfVxuXG5yZXR1cm4gZGF0YS5zdWJhcnJheSgwLGopO1xuIH07XG5cbi8vXG4vL1xuJGjNj19vbmNlLmpzRGVjb2RlQmFzZTY0KGpzRGVjb2RlQmFzZTY0KTtjb25zdCBhZGFwdERlY29kZXI9XG4obmF0aXZlRGVjb2RlQmFzZTY0KT0+XG4oLi4uYXJncyk9PntcbmNvbnN0IGRlY29kZWQ9bmF0aXZlRGVjb2RlQmFzZTY0KC4uLmFyZ3MpO1xuaWYoZGVjb2RlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGRlY29kZWQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGRlY29kZUJhc2U2ND1cbmdsb2JhbFRoaXMuQmFzZTY0IT09dW5kZWZpbmVkP1xuYWRhcHREZWNvZGVyKGdsb2JhbFRoaXMuQmFzZTY0LmRlY29kZSk6XG5qc0RlY29kZUJhc2U2NDskaM2PX29uY2UuZGVjb2RlQmFzZTY0KGRlY29kZUJhc2U2NCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJqc0RlY29kZUJhc2U2NCI6WyJqc0RlY29kZUJhc2U2NCJdLCJkZWNvZGVCYXNlNjQiOlsiZGVjb2RlQmFzZTY0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEcLyqkgBgAAIAYAACEAAABAZW5kby9iYXNlNjQtdjEuMC45L3NyYy9lbmNvZGUuanN7ImltcG9ydHMiOlsiLi9jb21tb24uanMiXSwiZXhwb3J0cyI6WyJlbmNvZGVCYXNlNjQiLCJqc0VuY29kZUJhc2U2NCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhbHBoYWJldDY0LHBhZGRpbmc7JGjNj19pbXBvcnRzKFtbXCIuL2NvbW1vbi5qc1wiLCBbW1wiYWxwaGFiZXQ2NFwiLCBbJGjNj19hID0+IChhbHBoYWJldDY0ID0gJGjNj19hKV1dLFtcInBhZGRpbmdcIiwgWyRozY9fYSA9PiAocGFkZGluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAganNFbmNvZGVCYXNlNjQ9KGRhdGEpPT57XG4vL1xuLy9cbi8vXG5sZXQgc3RyaW5nPScnO1xubGV0IHJlZ2lzdGVyPTA7XG5sZXQgcXVhbnR1bT0wO1xuXG5mb3IobGV0IGk9MDtpPGRhdGEubGVuZ3RoO2krPTEpe1xuY29uc3QgYj1kYXRhW2ldO1xucmVnaXN0ZXI9cmVnaXN0ZXI8PDh8YjtcbnF1YW50dW0rPTg7XG5pZihxdWFudHVtPT09MjQpe1xuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xOCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMiYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj42JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjAmMHgzZl07XG5yZWdpc3Rlcj0wO1xucXVhbnR1bT0wO1xuIH1cbiB9XG5cbnN3aXRjaChxdWFudHVtKXtcbmNhc2UgMDpcbmJyZWFrO1xuY2FzZSA4Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4yJjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8NCYweDNmXStcbnBhZGRpbmcrXG5wYWRkaW5nO1xuYnJlYWs7XG5jYXNlIDE2Olxuc3RyaW5nKz1cbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj4xMCYweDNmXStcbmFscGhhYmV0NjRbcmVnaXN0ZXI+Pj40JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcjw8MiYweDNmXStcbnBhZGRpbmc7XG5icmVhaztcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYGludGVybmFsOiBiYWQgcXVhbnR1bSAke3F1YW50dW19YCk7fVxuXG5yZXR1cm4gc3RyaW5nO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5qc0VuY29kZUJhc2U2NChqc0VuY29kZUJhc2U2NCk7XG5jb25zdCAgICAgICAgZW5jb2RlQmFzZTY0PVxuZ2xvYmFsVGhpcy5CYXNlNjQhPT11bmRlZmluZWQ/Z2xvYmFsVGhpcy5CYXNlNjQuZW5jb2RlOmpzRW5jb2RlQmFzZTY0OyRozY9fb25jZS5lbmNvZGVCYXNlNjQoZW5jb2RlQmFzZTY0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImpzRW5jb2RlQmFzZTY0IjpbImpzRW5jb2RlQmFzZTY0Il0sImVuY29kZUJhc2U2NCI6WyJlbmNvZGVCYXNlNjQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAEBlbmRvL2NvbW1vbi12MS4yLjgvYXBwbHktbGFiZWxpbmctZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi90aHJvdy1sYWJlbGVkLmpzIl0sImV4cG9ydHMiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsaXNQcm9taXNlLHRocm93TGFiZWxlZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi90aHJvdy1sYWJlbGVkLmpzXCIsIFtbXCJ0aHJvd0xhYmVsZWRcIiwgWyRozY9fYSA9PiAodGhyb3dMYWJlbGVkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGx5TGFiZWxpbmdFcnJvcj0oZnVuYyxhcmdzLGxhYmVsPXVuZGVmaW5lZCk9PntcbmlmKGxhYmVsPT09dW5kZWZpbmVkKXtcbnJldHVybiBmdW5jKC4uLmFyZ3MpO1xuIH1cbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbnRocm93TGFiZWxlZChlcnIsbGFiZWwpO1xuIH1cbmlmKGlzUHJvbWlzZShyZXN1bHQpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBFLndoZW4ocmVzdWx0LHVuZGVmaW5lZCwocmVhc29uKT0+dGhyb3dMYWJlbGVkKHJlYXNvbixsYWJlbCkpO1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfTskaM2PX29uY2UuYXBwbHlMYWJlbGluZ0Vycm9yKGFwcGx5TGFiZWxpbmdFcnJvcik7XG5oYXJkZW4oYXBwbHlMYWJlbGluZ0Vycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFwcGx5TGFiZWxpbmdFcnJvciI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkAZXhlwEAABcBAAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvZnJvbS11bmlxdWUtZW50cmllcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJmcm9tVW5pcXVlRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZnJvbVVuaXF1ZUVudHJpZXM9KGFsbEVudHJpZXMpPT57XG5jb25zdCBlbnRyaWVzQXJyYXk9Wy4uLmFsbEVudHJpZXNdO1xuY29uc3QgcmVzdWx0PWhhcmRlbihmcm9tRW50cmllcyhlbnRyaWVzQXJyYXkpKTtcbmlmKG93bktleXMocmVzdWx0KS5sZW5ndGg9PT1lbnRyaWVzQXJyYXkubGVuZ3RoKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbmFtZXM9bmV3IFNldCgpO1xuZm9yKGNvbnN0W25hbWUsX11vZiBlbnRyaWVzQXJyYXkpe1xuaWYobmFtZXMuaGFzKG5hbWUpKXtcbkZhaWwgYGNvbGxpc2lvbiBvbiBwcm9wZXJ0eSBuYW1lICR7cShuYW1lKX06ICR7ZW50cmllc0FycmF5fWA7XG4gfVxubmFtZXMuYWRkKG5hbWUpO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBmYWlsZWQgdG8gY3JlYXRlIG9iamVjdCBmcm9tIHVuaXF1ZSBlbnRyaWVzYDtcbiB9OyRozY9fb25jZS5mcm9tVW5pcXVlRW50cmllcyhmcm9tVW5pcXVlRW50cmllcyk7XG5oYXJkZW4oZnJvbVVuaXF1ZUVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZnJvbVVuaXF1ZUVudHJpZXMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvaWRlbnQtY2hlY2tlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaWRlbnRDaGVja2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWRlbnRDaGVja2VyPShjb25kLF9kZXRhaWxzKT0+Y29uZDskaM2PX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYVj+hngCAAB4AgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGxpc3REaWZmZXJlbmNlPShsZWZ0TGlzdCxyaWdodExpc3QpPT57XG5jb25zdCByaWdodFNldD1uZXcgU2V0KHJpZ2h0TGlzdCk7XG5yZXR1cm4gbGVmdExpc3QuZmlsdGVyKChlbGVtZW50KT0+IXJpZ2h0U2V0LmhhcyhlbGVtZW50KSk7XG4gfTskaM2PX29uY2UubGlzdERpZmZlcmVuY2UobGlzdERpZmZlcmVuY2UpO1xuaGFyZGVuKGxpc3REaWZmZXJlbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imxpc3REaWZmZXJlbmNlIjpbImxpc3REaWZmZXJlbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtYXJyYXktaXRlcmF0b3IuanN7ImltcG9ydHMiOlsiLi9tYWtlLWl0ZXJhdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZUFycmF5SXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUl0ZXJhdG9yOyRozY9faW1wb3J0cyhbW1wiLi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXJyYXlJdGVyYXRvcj0oYXJyKT0+e1xuY29uc3R7bGVuZ3RofT1hcnI7XG5sZXQgaT0wO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuLyogICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoaTxsZW5ndGgpe1xudmFsdWU9YXJyW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4vL1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG4gfSk7XG4gfTskaM2PX29uY2UubWFrZUFycmF5SXRlcmF0b3IobWFrZUFycmF5SXRlcmF0b3IpO1xuaGFyZGVuKG1ha2VBcnJheUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBcnJheUl0ZXJhdG9yIjpbIm1ha2VBcnJheUl0ZXJhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFaLCeM5AgAAOQIAACQAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaM2PX29uY2UubWFrZUl0ZXJhdG9yKG1ha2VJdGVyYXRvcik7XG5oYXJkZW4obWFrZUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJdGVyYXRvciI6WyJtYWtlSXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNYXAob2JqZWN0TWFwKTtcbmhhcmRlbihvYmplY3RNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWFwIjpbIm9iamVjdE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA7n1+O4QMAAOEDAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWV0YS1tYXAuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm9iamVjdE1ldGFNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsY3JlYXRlLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1ldGFNYXA9KFxub3JpZ2luYWwsXG5tZXRhTWFwRm4sXG5wcm90bz1PYmplY3QucHJvdG90eXBlKT0+XG57XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKTtcbmNvbnN0IGtleXM9b3duS2V5cyhvcmlnaW5hbCk7XG5cbmNvbnN0IGRlc2NFbnRyaWVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmtleXMuXG5tYXAoKGtleSk9PltrZXksbWV0YU1hcEZuKGRlc2NzW2tleV0sa2V5KV0pLlxuZmlsdGVyKChbX2tleSxvcHREZXNjXSk9Pm9wdERlc2MhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKGNyZWF0ZShwcm90byxmcm9tRW50cmllcyhkZXNjRW50cmllcykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNZXRhTWFwKG9iamVjdE1ldGFNYXApO1xuaGFyZGVuKG9iamVjdE1ldGFNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWV0YU1hcCI6WyJvYmplY3RNZXRhTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAABAZW5kby9jb21tb24tdjEuMi44L3Rocm93LWxhYmVsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsidGhyb3dMYWJlbGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjNj19vbmNlLnRocm93TGFiZWxlZCh0aHJvd0xhYmVsZWQpO1xuaGFyZGVuKHRocm93TGFiZWxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0aHJvd0xhYmVsZWQiOlsidGhyb3dMYWJlbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFn7sAJvAgAAbwIAADEAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL2ltcG9ydC1hcmNoaXZlLmpzeyJpbXBvcnRzIjpbIi4vc3JjL3R5cGVzLWV4dGVybmFsLmpzIiwiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiXSwiZXhwb3J0cyI6WyJsb2FkQXJjaGl2ZSIsImxvYWRBcmNoaXZlIl0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy1leHRlcm5hbC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvdHlwZXMtZXh0ZXJuYWwuanNcIiwgW11dLFtcIi4vc3JjL2ltcG9ydC1hcmNoaXZlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOltbInBhcnNlQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLFsibG9hZEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSJdLFsiaW1wb3J0QXJjaGl2ZSIsImltcG9ydEFyY2hpdmUiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJibqCm2JwAAticAADYAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9jb21wYXJ0bWVudC1tYXAuanN7ImltcG9ydHMiOlsiLi9wb2xpY3ktZm9ybWF0LmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29tcGFydG1lbnRNYXAiLCJwYXRoQ29tcGFyZSIsInN0cmluZ0NvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UGFja2FnZVBvbGljeTskaM2PX2ltcG9ydHMoW1tcIi4vcG9saWN5LWZvcm1hdC5qc1wiLCBbW1wiYXNzZXJ0UGFja2FnZVBvbGljeVwiLCBbJGjNj19hID0+IChhc3NlcnRQYWNrYWdlUG9saWN5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0ICAgICAgICBzdHJpbmdDb21wYXJlPShhLGIpPT5hPT09Yj8wOmE8Yj8tMToxO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5zdHJpbmdDb21wYXJlKHN0cmluZ0NvbXBhcmUpO1xuY29uc3QgY3VtdWxhdGl2ZUxlbmd0aD0obGVuZ3RoLHRlcm0pPT57XG5yZXR1cm4gbGVuZ3RoK3Rlcm0ubGVuZ3RoO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcGF0aENvbXBhcmU9KGEsYik9Pntcbi8vXG5pZihhPT09dW5kZWZpbmVkJiZiPT09dW5kZWZpbmVkKXtcbnJldHVybiAwO1xuIH1cbmlmKGE9PT11bmRlZmluZWQpe1xucmV0dXJuIDE7XG4gfVxuaWYoYj09PXVuZGVmaW5lZCl7XG5yZXR1cm4tMTtcbiB9XG4vL1xuaWYoYS5sZW5ndGghPT1iLmxlbmd0aCl7XG5yZXR1cm4gYS5sZW5ndGgtYi5sZW5ndGg7XG4gfVxuLy9cbmNvbnN0IGFTdW09YS5yZWR1Y2UoY3VtdWxhdGl2ZUxlbmd0aCwwKTtcbmNvbnN0IGJTdW09Yi5yZWR1Y2UoY3VtdWxhdGl2ZUxlbmd0aCwwKTtcbmlmKGFTdW0hPT1iU3VtKXtcbnJldHVybiBhU3VtLWJTdW07XG4gfVxuLy9cbmFzc2VydChhLmxlbmd0aD09PWIubGVuZ3RoKTsvL1xuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGEubGVuZ3RoO2krPTEpe1xuY29uc3QgY29tcGFyaXNvbj1zdHJpbmdDb21wYXJlKGFbaV0sYltpXSk7XG5pZihjb21wYXJpc29uIT09MCl7XG5yZXR1cm4gY29tcGFyaXNvbjtcbiB9XG4gfVxuLy9cbi8vXG4vL1xucmV0dXJuIDA7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UucGF0aENvbXBhcmUocGF0aENvbXBhcmUpO1xuZnVuY3Rpb24qZW51bWVyYXRlKGl0ZXJhYmxlKXtcbmxldCBpbmRleD0wO1xuZm9yKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKXtcbnlpZWxkW2luZGV4LHZhbHVlXTtcbmluZGV4Kz0xO1xuIH1cbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRFbXB0eU9iamVjdD0ob2JqZWN0LG1lc3NhZ2UpPT57XG5hc3NlcnQoT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGg9PT0wLG1lc3NhZ2UpO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRDb25kaXRpb25zPShjb25kaXRpb25zLHVybCk9PntcbmlmKGNvbmRpdGlvbnM9PT11bmRlZmluZWQpcmV0dXJuO1xuYXNzZXJ0KFxuQXJyYXkuaXNBcnJheShjb25kaXRpb25zKSxcbiBgY29uZGl0aW9ucyBtdXN0IGJlIGFuIGFycmF5LCBnb3QgJHtjb25kaXRpb25zfSBpbiAke3EodXJsKX1gKTtcblxuZm9yKGNvbnN0W2luZGV4LHZhbHVlXW9mIGVudW1lcmF0ZShjb25kaXRpb25zKSl7XG5hc3NlcnQudHlwZW9mKFxudmFsdWUsXG4nc3RyaW5nJyxcbiBgY29uZGl0aW9uc1ske2luZGV4fV0gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dmFsdWV9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbXBhcnRtZW50TW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3R7Y29tcGFydG1lbnQsbW9kdWxlLHJldGFpbmVkLC4uLmV4dHJhfT1hbGxlZ2VkTW9kdWxlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3Eoe1xuZXh0cmEsXG5jb21wYXJ0bWVudH0pXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmNvbXBhcnRtZW50LFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uY29tcGFydG1lbnQgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShjb21wYXJ0bWVudCl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubW9kdWxlLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubW9kdWxlIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EobW9kdWxlKX0gaW4gJHtxKHVybCl9YCk7XG5cbmlmKHJldGFpbmVkIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoXG5yZXRhaW5lZCxcbidib29sZWFuJyxcbiBgJHtwYXRofS5yZXRhaW5lZCBtdXN0IGJlIGEgYm9vbGVhbiwgZ290ICR7cShyZXRhaW5lZCl9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydEZpbGVNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdHtsb2NhdGlvbixwYXJzZXIsc2hhNTEyLC4uLmV4dHJhfT1hbGxlZ2VkTW9kdWxlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmxvY2F0aW9uLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubG9jYXRpb24gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShsb2NhdGlvbil9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxucGFyc2VyLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ucGFyc2VyIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EocGFyc2VyKX0gaW4gJHtxKHVybCl9YCk7XG5cblxuaWYoc2hhNTEyIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoXG5zaGE1MTIsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5zaGE1MTIgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShzaGE1MTIpfSBpbiAke3EodXJsKX1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRFeGl0TW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3R7ZXhpdCwuLi5leHRyYX09YWxsZWdlZE1vZHVsZTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5leGl0LFxuJ3N0cmluZycsXG4gYCR7cGF0aH0uZXhpdCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGV4aXQpfSBpbiAke3EodXJsKX1gKTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydE1vZHVsZT0oYWxsZWdlZE1vZHVsZSxwYXRoLHVybCk9PntcbmNvbnN0IG1vZHVsZURlc2NyaXB0b3I9T2JqZWN0KGFsbGVnZWRNb2R1bGUpO1xuYXNzZXJ0KFxuYWxsZWdlZE1vZHVsZT09PW1vZHVsZURlc2NyaXB0b3ImJiFBcnJheS5pc0FycmF5KG1vZHVsZURlc2NyaXB0b3IpLFxuIGAke3BhdGh9IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkTW9kdWxlfSBpbiAke3EodXJsKX1gKTtcblxuXG5jb25zdHtjb21wYXJ0bWVudCxtb2R1bGUsbG9jYXRpb24scGFyc2VyLGV4aXQsZGVmZXJyZWRFcnJvcn09XG5tb2R1bGVEZXNjcmlwdG9yO1xuaWYoY29tcGFydG1lbnQhPT11bmRlZmluZWR8fG1vZHVsZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRDb21wYXJ0bWVudE1vZHVsZShtb2R1bGVEZXNjcmlwdG9yLHBhdGgsdXJsKTtcbiB9ZWxzZSBpZihsb2NhdGlvbiE9PXVuZGVmaW5lZHx8cGFyc2VyIT09dW5kZWZpbmVkKXtcbmFzc2VydEZpbGVNb2R1bGUobW9kdWxlRGVzY3JpcHRvcixwYXRoLHVybCk7XG4gfWVsc2UgaWYoZXhpdCE9PXVuZGVmaW5lZCl7XG5hc3NlcnRFeGl0TW9kdWxlKG1vZHVsZURlc2NyaXB0b3IscGF0aCx1cmwpO1xuIH1lbHNlIGlmKGRlZmVycmVkRXJyb3IhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihcbmRlZmVycmVkRXJyb3IsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5kZWZlcnJlZEVycm9yIG11c3QgYmUgYSBzdHJpbmcgY29udGFpaW5nIGFuIGVycm9yIG1lc3NhZ2VgKTtcblxuIH1lbHNle1xuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0gaXMgbm90IGEgdmFsaWQgbW9kdWxlIGRlc2NyaXB0b3IsIGdvdCAke3EoYWxsZWdlZE1vZHVsZSl9IGluICR7cShcbnVybClcbiB9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0TW9kdWxlcz0oYWxsZWdlZE1vZHVsZXMscGF0aCx1cmwpPT57XG5jb25zdCBtb2R1bGVzPU9iamVjdChhbGxlZ2VkTW9kdWxlcyk7XG5hc3NlcnQoXG5hbGxlZ2VkTW9kdWxlcz09PW1vZHVsZXN8fCFBcnJheS5pc0FycmF5KG1vZHVsZXMpLFxuIGBtb2R1bGVzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKGFsbGVnZWRNb2R1bGVzKX0gaW4gJHtxKHVybCl9YCk7XG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMobW9kdWxlcykpe1xuYXNzZXJ0TW9kdWxlKHZhbHVlLCBgJHtwYXRofS5tb2R1bGVzWyR7cShrZXkpfV1gLHVybCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFBhcnNlcnM9KGFsbGVnZWRQYXJzZXJzLHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFBhcnNlcnM9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHBhcnNlcnM9T2JqZWN0KGFsbGVnZWRQYXJzZXJzKTtcbmFzc2VydChcbmFsbGVnZWRQYXJzZXJzPT09cGFyc2VycyYmIUFycmF5LmlzQXJyYXkocGFyc2VycyksXG4gYCR7cGF0aH0ucGFyc2VycyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZFBhcnNlcnN9IGluICR7cSh1cmwpfWApO1xuXG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMocGFyc2Vycykpe1xuYXNzZXJ0LnR5cGVvZihcbmtleSxcbidzdHJpbmcnLFxuIGBhbGwga2V5cyBvZiAke3BhdGh9LnBhcnNlcnMgbXVzdCBiZSBzdHJpbmdzLCBnb3QgJHtrZXl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxudmFsdWUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5wYXJzZXJzWyR7cShrZXkpfV0gbXVzdCBiZSBhIHN0cmluZywgZ290ICR7dmFsdWV9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFNjb3BlPShhbGxlZ2VkU2NvcGUscGF0aCx1cmwpPT57XG5jb25zdCBzY29wZT1PYmplY3QoYWxsZWdlZFNjb3BlKTtcbmFzc2VydChcbmFsbGVnZWRTY29wZT09PXNjb3BlJiYhQXJyYXkuaXNBcnJheShzY29wZSksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRTY29wZX0gaW4gJHtxKHVybCl9YCk7XG5cblxuY29uc3R7Y29tcGFydG1lbnQsLi4uZXh0cmF9PXNjb3BlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuXG5hc3NlcnQudHlwZW9mKFxuY29tcGFydG1lbnQsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGNvbXBhcnRtZW50KX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRTY29wZXM9KGFsbGVnZWRTY29wZXMscGF0aCx1cmwpPT57XG5pZihhbGxlZ2VkU2NvcGVzPT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCBzY29wZXM9T2JqZWN0KGFsbGVnZWRTY29wZXMpO1xuYXNzZXJ0KFxuYWxsZWdlZFNjb3Blcz09PXNjb3BlcyYmIUFycmF5LmlzQXJyYXkoc2NvcGVzKSxcbiBgJHtwYXRofS5zY29wZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZFNjb3Blcyl9IGluICR7cSh1cmwpfWApO1xuXG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoc2NvcGVzKSl7XG5hc3NlcnQudHlwZW9mKFxua2V5LFxuJ3N0cmluZycsXG4gYGFsbCBrZXlzIG9mICR7cGF0aH0uc2NvcGVzIG11c3QgYmUgc3RyaW5ncywgZ290ICR7a2V5fSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0U2NvcGUodmFsdWUsIGAke3BhdGh9LnNjb3Blc1ske3Eoa2V5KX1dYCx1cmwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRUeXBlcz0oYWxsZWdlZFR5cGVzLHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFR5cGVzPT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCB0eXBlcz1PYmplY3QoYWxsZWdlZFR5cGVzKTtcbmFzc2VydChcbmFsbGVnZWRUeXBlcz09PXR5cGVzJiYhQXJyYXkuaXNBcnJheSh0eXBlcyksXG4gYCR7cGF0aH0udHlwZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRUeXBlc30gaW4gJHtxKHVybCl9YCk7XG5cblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyh0eXBlcykpe1xuYXNzZXJ0LnR5cGVvZihcbmtleSxcbidzdHJpbmcnLFxuIGBhbGwga2V5cyBvZiAke3BhdGh9LnR5cGVzIG11c3QgYmUgc3RyaW5ncywgZ290ICR7a2V5fSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbnZhbHVlLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0udHlwZXNbJHtxKGtleSl9XSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt2YWx1ZX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuXG5jb25zdCBhc3NlcnRQb2xpY3k9KFxuYWxsZWdlZFBvbGljeSxcbnBhdGgsXG51cmw9Jzx1bmtub3duLWNvbXBhcnRtZW50LW1hcC5qc29uPicpPT5cbntcbmFzc2VydFBhY2thZ2VQb2xpY3koYWxsZWdlZFBvbGljeSwgYCR7cGF0aH0ucG9saWN5YCx1cmwpO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbXBhcnRtZW50PShhbGxlZ2VkQ29tcGFydG1lbnQscGF0aCx1cmwpPT57XG5jb25zdCBjb21wYXJ0bWVudD1PYmplY3QoYWxsZWdlZENvbXBhcnRtZW50KTtcbmFzc2VydChcbmFsbGVnZWRDb21wYXJ0bWVudD09PWNvbXBhcnRtZW50JiYhQXJyYXkuaXNBcnJheShjb21wYXJ0bWVudCksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRDb21wYXJ0bWVudH0gaW4gJHtxKHVybCl9YCk7XG5cblxuY29uc3R7XG5sb2NhdGlvbixcbm5hbWUsXG5sYWJlbCxcbnBhcnNlcnMsXG50eXBlcyxcbnNjb3Blcyxcbm1vZHVsZXMsXG5wb2xpY3ksXG4uLi5leHRyYX09XG5jb21wYXJ0bWVudDtcblxuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuXG5hc3NlcnQudHlwZW9mKFxubG9jYXRpb24sXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5sb2NhdGlvbiBpbiAke3EodXJsKX0gbXVzdCBiZSBzdHJpbmcsIGdvdCAke3EobG9jYXRpb24pfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubmFtZSxcbidzdHJpbmcnLFxuIGAke3BhdGh9Lm5hbWUgaW4gJHtxKHVybCl9IG11c3QgYmUgc3RyaW5nLCBnb3QgJHtxKG5hbWUpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubGFiZWwsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5sYWJlbCBpbiAke3EodXJsKX0gbXVzdCBiZSBzdHJpbmcsIGdvdCAke3EobGFiZWwpfWApO1xuXG5cbmFzc2VydE1vZHVsZXMobW9kdWxlcyxwYXRoLHVybCk7XG5hc3NlcnRQYXJzZXJzKHBhcnNlcnMscGF0aCx1cmwpO1xuYXNzZXJ0U2NvcGVzKHNjb3BlcyxwYXRoLHVybCk7XG5hc3NlcnRUeXBlcyh0eXBlcyxwYXRoLHVybCk7XG5hc3NlcnRQb2xpY3kocG9saWN5LHBhdGgsdXJsKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0Q29tcGFydG1lbnRzPShhbGxlZ2VkQ29tcGFydG1lbnRzLHVybCk9PntcbmNvbnN0IGNvbXBhcnRtZW50cz1PYmplY3QoYWxsZWdlZENvbXBhcnRtZW50cyk7XG5hc3NlcnQoXG5hbGxlZ2VkQ29tcGFydG1lbnRzPT09Y29tcGFydG1lbnRzfHwhQXJyYXkuaXNBcnJheShjb21wYXJ0bWVudHMpLFxuIGBjb21wYXJ0bWVudHMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZENvbXBhcnRtZW50cyl9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoY29tcGFydG1lbnRzKSl7XG5hc3NlcnRDb21wYXJ0bWVudCh2YWx1ZSwgYGNvbXBhcnRtZW50c1ske3Eoa2V5KX1dYCx1cmwpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0RW50cnk9KGFsbGVnZWRFbnRyeSx1cmwpPT57XG5jb25zdCBlbnRyeT1PYmplY3QoYWxsZWdlZEVudHJ5KTtcbmFzc2VydChcbmFsbGVnZWRFbnRyeT09PWVudHJ5JiYhQXJyYXkuaXNBcnJheShlbnRyeSksXG4gYFwiZW50cnlcIiBtdXN0IGJlIGFuIG9iamVjdCBpbiBjb21wYXJ0bWVudCBtYXAsIGdvdCAke2FsbGVnZWRFbnRyeX0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuY29uc3R7Y29tcGFydG1lbnQsbW9kdWxlLC4uLmV4dHJhfT1lbnRyeTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYFwiZW50cnlcIiBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5jb21wYXJ0bWVudCxcbidzdHJpbmcnLFxuIGBlbnRyeS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nIGluIGNvbXBhcnRtZW50IG1hcCwgZ290ICR7Y29tcGFydG1lbnR9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5tb2R1bGUsXG4nc3RyaW5nJyxcbiBgZW50cnkubW9kdWxlIG11c3QgYmUgYSBzdHJpbmcgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHttb2R1bGV9IGluICR7cShcbnVybClcbiB9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBhc3NlcnRDb21wYXJ0bWVudE1hcD0oXG5hbGxlZ2VkQ29tcGFydG1lbnRNYXAsXG51cmw9Jzx1bmtub3duLWNvbXBhcnRtZW50LW1hcC5qc29uPicpPT5cbntcbmNvbnN0IGNvbXBhcnRtZW50TWFwPU9iamVjdChhbGxlZ2VkQ29tcGFydG1lbnRNYXApO1xuYXNzZXJ0KFxuYWxsZWdlZENvbXBhcnRtZW50TWFwPT09Y29tcGFydG1lbnRNYXAmJiFBcnJheS5pc0FycmF5KGNvbXBhcnRtZW50TWFwKSxcbiBgQ29tcGFydG1lbnQgbWFwIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkQ29tcGFydG1lbnRNYXB9IGluICR7cShcbnVybClcbiB9YCk7XG5cbmNvbnN0e1xuLy9cbi8vXG50YWdzOmNvbmRpdGlvbnMsXG5lbnRyeSxcbmNvbXBhcnRtZW50cyxcbi4uLmV4dHJhfT1cbk9iamVjdChjb21wYXJ0bWVudE1hcCk7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGBDb21wYXJ0bWVudCBtYXAgbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKFxuT2JqZWN0LmtleXMoZXh0cmEpKVxuIH0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydENvbmRpdGlvbnMoY29uZGl0aW9ucyx1cmwpO1xuYXNzZXJ0RW50cnkoZW50cnksdXJsKTtcbmFzc2VydENvbXBhcnRtZW50cyhjb21wYXJ0bWVudHMsdXJsKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb21wYXJ0bWVudE1hcChhc3NlcnRDb21wYXJ0bWVudE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdDb21wYXJlIjpbInN0cmluZ0NvbXBhcmUiXSwicGF0aENvbXBhcmUiOlsicGF0aENvbXBhcmUiXSwiYXNzZXJ0Q29tcGFydG1lbnRNYXAiOlsiYXNzZXJ0Q29tcGFydG1lbnRNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxrrtrwEDAAABAwAAMAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2V4dGVuc2lvbi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsicGFyc2VFeHRlbnNpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlRXh0ZW5zaW9uPShsb2NhdGlvbik9PntcbmNvbnN0IGxhc3RTbGFzaD1sb2NhdGlvbi5sYXN0SW5kZXhPZignLycpO1xuaWYobGFzdFNsYXNoPDApe1xucmV0dXJuJyc7XG4gfVxuY29uc3QgYmFzZT1sb2NhdGlvbi5zbGljZShsYXN0U2xhc2grMSk7XG5jb25zdCBsYXN0RG90PWJhc2UubGFzdEluZGV4T2YoJy4nKTtcbmlmKGxhc3REb3Q8MCl7XG5yZXR1cm4nJztcbiB9XG5yZXR1cm4gYmFzZS5zbGljZShsYXN0RG90KzEpO1xuIH07JGjNj19vbmNlLnBhcnNlRXh0ZW5zaW9uKHBhcnNlRXh0ZW5zaW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhcnNlRXh0ZW5zaW9uIjpbInBhcnNlRXh0ZW5zaW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZA8kTPJAAAzyQAADoAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3ppcCIsIi4vbGluay5qcyIsIi4vanNvbi5qcyIsIi4vcG93ZXJzLmpzIiwiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLCIuL2NvbXBhcnRtZW50LW1hcC5qcyIsIi4vaW1wb3J0LWhvb2suanMiLCIuL3BvbGljeS5qcyJdLCJleHBvcnRzIjpbImltcG9ydEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBaaXBSZWFkZXIsbGluayxwYXJzZUxvY2F0ZWRKc29uLHVucGFja1JlYWRQb3dlcnMsam9pbixhc3NlcnRDb21wYXJ0bWVudE1hcCxleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyLGF0dGVudWF0ZU1vZHVsZUhvb2ssZW5mb3JjZU1vZHVsZVBvbGljeTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3ppcFwiLCBbW1wiWmlwUmVhZGVyXCIsIFskaM2PX2EgPT4gKFppcFJlYWRlciA9ICRozY9fYSldXV1dLFtcIi4vbGluay5qc1wiLCBbW1wibGlua1wiLCBbJGjNj19hID0+IChsaW5rID0gJGjNj19hKV1dXV0sW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXSxbXCIuL3Bvd2Vycy5qc1wiLCBbW1widW5wYWNrUmVhZFBvd2Vyc1wiLCBbJGjNj19hID0+ICh1bnBhY2tSZWFkUG93ZXJzID0gJGjNj19hKV1dXV0sW1wiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanNcIiwgW1tcImpvaW5cIiwgWyRozY9fYSA9PiAoam9pbiA9ICRozY9fYSldXV1dLFtcIi4vY29tcGFydG1lbnQtbWFwLmpzXCIsIFtbXCJhc3NlcnRDb21wYXJ0bWVudE1hcFwiLCBbJGjNj19hID0+IChhc3NlcnRDb21wYXJ0bWVudE1hcCA9ICRozY9fYSldXV1dLFtcIi4vaW1wb3J0LWhvb2suanNcIiwgW1tcImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXJcIiwgWyRozY9fYSA9PiAoZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlciA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJhdHRlbnVhdGVNb2R1bGVIb29rXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZU1vZHVsZUhvb2sgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtGYWlsLHF1b3RlOnF9PWFzc2VydDtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbmNvbnN0e2Fzc2lnbixjcmVhdGUsZnJlZXplfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBwb3N0cG9uZUVycm9yVG9FeGVjdXRlPShlcnJvck1lc3NhZ2UpPT57XG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCByZWNvcmQ9ZnJlZXplKHtcbmltcG9ydHM6W10sXG5leHBvcnRzOltdLFxuZXhlY3V0ZTooKT0+e1xudGhyb3cgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiB9fSk7XG5cblxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlQXJjaGl2ZUltcG9ydEhvb2tNYWtlcj0oXG5nZXQsXG5jb21wYXJ0bWVudHMsXG5hcmNoaXZlTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uPXVuZGVmaW5lZCxcbmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbj11bmRlZmluZWQpPT5cbntcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VJbXBvcnRIb29rPSh7XG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlTmFtZSxcbmF0dGVudWF0b3JzXG4vL1xuLy9cbn0pPT57XG4vL1xuY29uc3QgY29tcGFydG1lbnREZXNjcmlwdG9yPWNvbXBhcnRtZW50c1twYWNrYWdlTG9jYXRpb25dO1xuY29uc3R7bW9kdWxlc309Y29tcGFydG1lbnREZXNjcmlwdG9yO1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0SG9vaz1hc3luYyhtb2R1bGVTcGVjaWZpZXIpPT57XG5hd2FpdCBudWxsO1xuLy9cbmNvbnN0IG1vZHVsZT1tb2R1bGVzW21vZHVsZVNwZWNpZmllcl07XG5pZihtb2R1bGU9PT11bmRlZmluZWQpe1xuaWYoZXhpdE1vZHVsZUltcG9ydEhvb2spe1xuLy9cbi8vXG4vL1xuZW5mb3JjZU1vZHVsZVBvbGljeShtb2R1bGVTcGVjaWZpZXIsY29tcGFydG1lbnREZXNjcmlwdG9yLHtcbmV4aXQ6dHJ1ZSxcbmVycm9ySGludDogYEJsb2NrZWQgaW4gbG9hZGluZy4gJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gd2FzIG5vdCBpbiB0aGUgYXJjaGl2ZSBhbmQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBsb2FkIGl0IGFzIGEgYnVpbHRpbmB9KTtcblxuY29uc3QgcmVjb3JkPWF3YWl0IGV4aXRNb2R1bGVJbXBvcnRIb29rKFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uKTtcblxuaWYocmVjb3JkKXtcbi8vXG4vL1xuLy9cbnJldHVybntcbnJlY29yZDphd2FpdCBhdHRlbnVhdGVNb2R1bGVIb29rKFxubW9kdWxlU3BlY2lmaWVyLFxucmVjb3JkLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzKSxcblxuc3BlY2lmaWVyOm1vZHVsZVNwZWNpZmllcn07XG5cbiB9ZWxzZXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBwb3N0cG9uZUVycm9yVG9FeGVjdXRlKFxuIGBDYW5ub3QgZmluZCBleHRlcm5hbCBtb2R1bGUgJHtxKG1vZHVsZVNwZWNpZmllcil9IGluIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbiB9XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGZpbmQgbW9kdWxlICR7cShtb2R1bGVTcGVjaWZpZXIpfSBpbiBwYWNrYWdlICR7cShcbnBhY2thZ2VMb2NhdGlvbilcbiB9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVMb2NhdGlvbil9YCk7XG5cbiB9XG5pZihtb2R1bGUuZGVmZXJyZWRFcnJvciE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gcG9zdHBvbmVFcnJvclRvRXhlY3V0ZShtb2R1bGUuZGVmZXJyZWRFcnJvcik7XG4gfVxuaWYobW9kdWxlLnBhcnNlcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHBhcnNlIG1vZHVsZSAke3EobW9kdWxlU3BlY2lmaWVyKX0gaW4gcGFja2FnZSAke3EoXG5wYWNrYWdlTG9jYXRpb24pXG4gfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTG9jYXRpb24pfWApO1xuXG4gfVxuY29uc3QgcGFyc2VyPXBhcnNlckZvckxhbmd1YWdlW21vZHVsZS5wYXJzZXJdO1xuaWYocGFyc2VyPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgcGFyc2UgJHtxKG1vZHVsZS5wYXJzZXIpfSBtb2R1bGUgJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gaW4gcGFja2FnZSAke3EocGFja2FnZUxvY2F0aW9uKX0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbmNvbnN0e3BhcnNlfT1wYXJzZXI7XG5jb25zdCBtb2R1bGVMb2NhdGlvbj0gYCR7cGFja2FnZUxvY2F0aW9ufS8ke21vZHVsZS5sb2NhdGlvbn1gO1xuY29uc3QgbW9kdWxlQnl0ZXM9Z2V0KG1vZHVsZUxvY2F0aW9uKTtcblxuaWYoY29tcHV0ZVNoYTUxMiE9PXVuZGVmaW5lZCYmbW9kdWxlLnNoYTUxMiE9PXVuZGVmaW5lZCl7XG5jb25zdCBzaGE1MTI9Y29tcHV0ZVNoYTUxMihtb2R1bGVCeXRlcyk7XG5pZihzaGE1MTIhPT1tb2R1bGUuc2hhNTEyKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgJHtxKG1vZHVsZS5sb2NhdGlvbil9IG9mIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoXG5hcmNoaXZlTG9jYXRpb24pXG4gfSBmYWlsZWQgYSBTSEEtNTEyIGludGVncml0eSBjaGVja2ApO1xuXG4gfVxuIH1cblxubGV0IHNvdXJjZUxvY2F0aW9uPSBgZmlsZTovLy8ke21vZHVsZUxvY2F0aW9ufWA7XG5pZihwYWNrYWdlTmFtZSE9PXVuZGVmaW5lZCl7XG5jb25zdCBiYXNlPXBhY2thZ2VOYW1lLnNwbGl0KCcvJykuc2xpY2UoLTEpLmpvaW4oJy8nKTtcbnNvdXJjZUxvY2F0aW9uPSBgLi4uLyR7am9pbihiYXNlLG1vZHVsZVNwZWNpZmllcil9YDtcbiB9XG5pZihjb21wdXRlU291cmNlTG9jYXRpb24hPT11bmRlZmluZWQpe1xuc291cmNlTG9jYXRpb249XG5jb21wdXRlU291cmNlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLG1vZHVsZVNwZWNpZmllcil8fFxuc291cmNlTG9jYXRpb247XG4gfVxuXG5sZXQgc291cmNlTWFwVXJsO1xuaWYoXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24hPT11bmRlZmluZWQmJlxubW9kdWxlLnNoYTUxMiE9PXVuZGVmaW5lZClcbntcbnNvdXJjZU1hcFVybD1jb21wdXRlU291cmNlTWFwTG9jYXRpb24oe1xuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9uLFxubW9kdWxlOm1vZHVsZVNwZWNpZmllcixcbmxvY2F0aW9uOnNvdXJjZUxvY2F0aW9uLFxuc2hhNTEyOm1vZHVsZS5zaGE1MTJ9KTtcblxuIH1cblxuLy9cbmNvbnN0e3JlY29yZH09YXdhaXQgcGFyc2UoXG5tb2R1bGVCeXRlcyxcbm1vZHVsZVNwZWNpZmllcixcbnNvdXJjZUxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxue1xuc291cmNlTWFwVXJsLFxuY29tcGFydG1lbnREZXNjcmlwdG9yfSk7XG5cblxucmV0dXJue3JlY29yZCxzcGVjaWZpZXI6bW9kdWxlU3BlY2lmaWVyfTtcbiB9O1xucmV0dXJuIGltcG9ydEhvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0SG9vaztcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJzZUFyY2hpdmU9YXN5bmMoXG5hcmNoaXZlQnl0ZXMsXG5hcmNoaXZlTG9jYXRpb249Jzx1bmtub3duPicsXG5vcHRpb25zPXt9KT0+XG57XG5hd2FpdCBudWxsO1xuY29uc3R7XG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbmV4cGVjdGVkU2hhNTEyPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb249dW5kZWZpbmVkLFxuQ29tcGFydG1lbnQ6Q29tcGFydG1lbnRQYXJzZU9wdGlvbj1Db21wYXJ0bWVudCxcbm1vZHVsZXM9dW5kZWZpbmVkLFxuaW1wb3J0SG9vazpleGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWQsXG5wYXJzZXJGb3JMYW5ndWFnZTpwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbj17fX09XG5vcHRpb25zO1xuXG5jb25zdCBwYXJzZXJGb3JMYW5ndWFnZT1mcmVlemUoXG5hc3NpZ24oY3JlYXRlKG51bGwpLHBhcnNlckZvckxhbmd1YWdlT3B0aW9uKSk7XG5cblxuY29uc3QgYXJjaGl2ZT1uZXcgWmlwUmVhZGVyKGFyY2hpdmVCeXRlcyx7bmFtZTphcmNoaXZlTG9jYXRpb259KTtcblxuLy9cbmNvbnN0IHVuc2Vlbj1uZXcgU2V0KGFyY2hpdmUuZmlsZXMua2V5cygpKTtcbnVuc2Vlbi5zaXplPj0yfHxcbkZhaWwgYEFyY2hpdmUgZmFpbGVkIHNhbml0eSBjaGVjazogc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3QgYSBjb21wYXJ0bWVudCBtYXAgZmlsZSBhbmQgb25lIG1vZHVsZSBmaWxlIGluICR7cShcbmFyY2hpdmVMb2NhdGlvbilcbiB9YDtcblxuLypcblxuICAgKi9cbmNvbnN0IGdldD0ocGF0aCk9PntcbnVuc2Vlbi5kZWxldGUocGF0aCk7XG5yZXR1cm4gYXJjaGl2ZS5yZWFkKHBhdGgpO1xuIH07XG5cbmNvbnN0IGNvbXBhcnRtZW50TWFwQnl0ZXM9Z2V0KCdjb21wYXJ0bWVudC1tYXAuanNvbicpO1xuXG5sZXQgc2hhNTEyO1xuaWYoY29tcHV0ZVNoYTUxMiE9PXVuZGVmaW5lZCl7XG5zaGE1MTI9Y29tcHV0ZVNoYTUxMihjb21wYXJ0bWVudE1hcEJ5dGVzKTtcbiB9XG5pZihleHBlY3RlZFNoYTUxMiE9PXVuZGVmaW5lZCl7XG5pZihzaGE1MTI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCB2ZXJpZnkgZXhwZWN0ZWRTaGE1MTIgd2l0aG91dCBhbHNvIHByb3ZpZGluZyBjb21wdXRlU2hhNTEyLCBmb3IgYXJjaGl2ZSAke2FyY2hpdmVMb2NhdGlvbn1gKTtcblxuIH1cbmlmKHNoYTUxMiE9PWV4cGVjdGVkU2hhNTEyKXtcbnRocm93IEVycm9yKFxuIGBBcmNoaXZlIGNvbXBhcnRtZW50IG1hcCBmYWlsZWQgYSBTSEEtNTEyIGludGVncml0eSBjaGVjaywgZXhwZWN0ZWQgJHtleHBlY3RlZFNoYTUxMn0sIGdvdCAke3NoYTUxMn0sIGZvciBhcmNoaXZlICR7YXJjaGl2ZUxvY2F0aW9ufWApO1xuXG4gfVxuIH1cbmNvbnN0IGNvbXBhcnRtZW50TWFwVGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoY29tcGFydG1lbnRNYXBCeXRlcyk7XG5jb25zdCBjb21wYXJ0bWVudE1hcD1wYXJzZUxvY2F0ZWRKc29uKFxuY29tcGFydG1lbnRNYXBUZXh0LFxuJ2NvbXBhcnRtZW50LW1hcC5qc29uJyk7XG5cbmFzc2VydENvbXBhcnRtZW50TWFwKGNvbXBhcnRtZW50TWFwLGFyY2hpdmVMb2NhdGlvbik7XG5cbmNvbnN0e1xuY29tcGFydG1lbnRzLFxuZW50cnk6e21vZHVsZTplbnRyeU1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudDplbnRyeUNvbXBhcnRtZW50TmFtZX19PVxuY29tcGFydG1lbnRNYXA7XG5cbmNvbnN0IGNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2s9ZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcih7XG5tb2R1bGVzLFxuZXhpdE1vZHVsZUltcG9ydEhvb2ssXG5lbnRyeUNvbXBhcnRtZW50TmFtZX0pO1xuXG5cbi8vXG4vL1xuLy9cbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQpe1xuY29uc3QgbWFrZUltcG9ydEhvb2s9bWFrZUFyY2hpdmVJbXBvcnRIb29rTWFrZXIoXG5nZXQsXG5jb21wYXJ0bWVudHMsXG5hcmNoaXZlTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmNvbXB1dGVTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wYXJ0bWVudEV4aXRNb2R1bGVJbXBvcnRIb29rLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uKTtcblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2NvbXBhcnRtZW50LHBlbmRpbmdKb2JzUHJvbWlzZX09bGluayhjb21wYXJ0bWVudE1hcCx7XG5tYWtlSW1wb3J0SG9vayxcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlczpPYmplY3QuZnJvbUVudHJpZXMoXG5PYmplY3Qua2V5cyhtb2R1bGVzfHx7fSkubWFwKChzcGVjaWZpZXIpPT57XG5yZXR1cm5bc3BlY2lmaWVyLHtuYW1lc3BhY2U6e319XTtcbiB9KSksXG5cbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50UGFyc2VPcHRpb259KTtcblxuXG5hd2FpdCBwZW5kaW5nSm9ic1Byb21pc2U7XG5cbmF3YWl0IGNvbXBhcnRtZW50LmxvYWQoZW50cnlNb2R1bGVTcGVjaWZpZXIpO1xudW5zZWVuLnNpemU9PT0wfHxcbkZhaWwgYEFyY2hpdmUgY29udGFpbnMgZXh0cmFuZW91cyBmaWxlczogJHtxKFsuLi51bnNlZW5dKX0gaW4gJHtxKFxuYXJjaGl2ZUxvY2F0aW9uKVxuIH1gO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleGVjdXRlPWFzeW5jKG9wdGlvbnMpPT57XG5jb25zdHtcbmdsb2JhbHMsXG5tb2R1bGVzLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50T3B0aW9uPUNvbXBhcnRtZW50UGFyc2VPcHRpb24sXG5pbXBvcnRIb29rOmV4aXRNb2R1bGVJbXBvcnRIb29rfT1cbm9wdGlvbnN8fHt9O1xuXG5jb25zdCBjb21wYXJ0bWVudEV4aXRNb2R1bGVJbXBvcnRIb29rPWV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIoe1xubW9kdWxlcyxcbmV4aXRNb2R1bGVJbXBvcnRIb29rLFxuZW50cnlDb21wYXJ0bWVudE5hbWV9KTtcblxuY29uc3QgbWFrZUltcG9ydEhvb2s9bWFrZUFyY2hpdmVJbXBvcnRIb29rTWFrZXIoXG5nZXQsXG5jb21wYXJ0bWVudHMsXG5hcmNoaXZlTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmNvbXB1dGVTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wYXJ0bWVudEV4aXRNb2R1bGVJbXBvcnRIb29rLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uKTtcblxuY29uc3R7Y29tcGFydG1lbnQscGVuZGluZ0pvYnNQcm9taXNlfT1saW5rKGNvbXBhcnRtZW50TWFwLHtcbm1ha2VJbXBvcnRIb29rLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5nbG9iYWxzLFxubW9kdWxlcyxcbnRyYW5zZm9ybXMsXG5fX3NoaW1UcmFuc2Zvcm1zX18sXG5Db21wYXJ0bWVudDpDb21wYXJ0bWVudE9wdGlvbn0pO1xuXG5cbmF3YWl0IHBlbmRpbmdKb2JzUHJvbWlzZTtcblxuLy9cbnJldHVybiBjb21wYXJ0bWVudFsnaW1wb3J0J10oZW50cnlNb2R1bGVTcGVjaWZpZXIpO1xuIH07XG5cbnJldHVybntpbXBvcnQ6ZXhlY3V0ZSxzaGE1MTJ9O1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5wYXJzZUFyY2hpdmUocGFyc2VBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBsb2FkQXJjaGl2ZT1hc3luYyhcbnJlYWRQb3dlcnMsXG5hcmNoaXZlTG9jYXRpb24sXG5vcHRpb25zPXt9KT0+XG57XG5jb25zdHtyZWFkLGNvbXB1dGVTaGE1MTJ9PXVucGFja1JlYWRQb3dlcnMocmVhZFBvd2Vycyk7XG5jb25zdHtcbmV4cGVjdGVkU2hhNTEyLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uLFxubW9kdWxlcyxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlfT1cbm9wdGlvbnM7XG5jb25zdCBhcmNoaXZlQnl0ZXM9YXdhaXQgcmVhZChhcmNoaXZlTG9jYXRpb24pO1xucmV0dXJuIHBhcnNlQXJjaGl2ZShhcmNoaXZlQnl0ZXMsYXJjaGl2ZUxvY2F0aW9uLHtcbmNvbXB1dGVTaGE1MTIsXG5leHBlY3RlZFNoYTUxMixcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbixcbm1vZHVsZXMsXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24sXG5wYXJzZXJGb3JMYW5ndWFnZX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmxvYWRBcmNoaXZlKGxvYWRBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBpbXBvcnRBcmNoaXZlPWFzeW5jKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpPT57XG5jb25zdCBhcmNoaXZlPWF3YWl0IGxvYWRBcmNoaXZlKHJlYWRQb3dlcnMsYXJjaGl2ZUxvY2F0aW9uLG9wdGlvbnMpO1xucmV0dXJuIGFyY2hpdmUuaW1wb3J0KG9wdGlvbnMpO1xuIH07JGjNj19vbmNlLmltcG9ydEFyY2hpdmUoaW1wb3J0QXJjaGl2ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYXJzZUFyY2hpdmUiOlsicGFyc2VBcmNoaXZlIl0sImxvYWRBcmNoaXZlIjpbImxvYWRBcmNoaXZlIl0sImltcG9ydEFyY2hpdmUiOlsiaW1wb3J0QXJjaGl2ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAtzg/BBQUAAAUFAAA9AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qc3siaW1wb3J0cyI6WyIuL3BhcnNlLXByZS1janMuanMiLCIuL3BhcnNlLWpzb24uanMiLCIuL3BhcnNlLXRleHQuanMiLCIuL3BhcnNlLWJ5dGVzLmpzIiwiLi9wYXJzZS1wcmUtbWpzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlclByZUNqcyxwYXJzZXJKc29uLHBhcnNlclRleHQscGFyc2VyQnl0ZXMscGFyc2VyUHJlTWpzOyRozY9faW1wb3J0cyhbW1wiLi9wYXJzZS1wcmUtY2pzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclByZUNqcyA9ICRozY9fYSldXV1dLFtcIi4vcGFyc2UtanNvbi5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwYXJzZXJKc29uID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS10ZXh0LmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclRleHQgPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLWJ5dGVzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlckJ5dGVzID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1wcmUtbWpzLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlclByZU1qcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2U9T2JqZWN0LmZyZWV6ZShcbi8qICAgICAgICAgICAgICAgICove1xuJ3ByZS1janMtanNvbic6cGFyc2VyUHJlQ2pzLFxuJ3ByZS1tanMtanNvbic6cGFyc2VyUHJlTWpzLFxuanNvbjpwYXJzZXJKc29uLFxudGV4dDpwYXJzZXJUZXh0LFxuYnl0ZXM6cGFyc2VyQnl0ZXN9KTskaM2PX29uY2UuZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlKGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UiOlsiZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPndhplYCAAAWAgAADUAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9pbXBvcnQtYXJjaGl2ZS5qc3siaW1wb3J0cyI6WyIuL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanMiLCIuL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiXSwiZXhwb3J0cyI6WyJpbXBvcnRBcmNoaXZlIiwibG9hZEFyY2hpdmUiLCJwYXJzZUFyY2hpdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlLHBhcnNlQXJjaGl2ZUxpdGUsbG9hZEFyY2hpdmVMaXRlLGltcG9ydEFyY2hpdmVMaXRlOyRozY9faW1wb3J0cyhbW1wiLi9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzXCIsIFtbXCJkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2VcIiwgWyRozY9fYSA9PiAoZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlID0gJGjNj19hKV1dXV0sW1wiLi9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzXCIsIFtbXCJwYXJzZUFyY2hpdmVcIiwgWyRozY9fYSA9PiAocGFyc2VBcmNoaXZlTGl0ZSA9ICRozY9fYSldXSxbXCJsb2FkQXJjaGl2ZVwiLCBbJGjNj19hID0+IChsb2FkQXJjaGl2ZUxpdGUgPSAkaM2PX2EpXV0sW1wiaW1wb3J0QXJjaGl2ZVwiLCBbJGjNj19hID0+IChpbXBvcnRBcmNoaXZlTGl0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHthc3NpZ24sY3JlYXRlLGZyZWV6ZX09T2JqZWN0O1xuXG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NpZ25QYXJzZXJGb3JMYW5ndWFnZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3BhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uLC4uLnJlc3R9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGFyc2VyRm9yTGFuZ3VhZ2U9ZnJlZXplKFxuYXNzaWduKGNyZWF0ZShudWxsKSxkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxucmV0dXJuey4uLnJlc3QscGFyc2VyRm9yTGFuZ3VhZ2V9O1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlQXJjaGl2ZT1hc3luYyhcbmFyY2hpdmVCeXRlcyxcbmFyY2hpdmVMb2NhdGlvbj0nPHVua25vd24+Jyxcbm9wdGlvbnM9e30pPT5cblxucGFyc2VBcmNoaXZlTGl0ZShcbmFyY2hpdmVCeXRlcyxcbmFyY2hpdmVMb2NhdGlvbixcbmFzc2lnblBhcnNlckZvckxhbmd1YWdlKG9wdGlvbnMpKTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UucGFyc2VBcmNoaXZlKHBhcnNlQXJjaGl2ZSk7XG5jb25zdCAgICAgICAgbG9hZEFyY2hpdmU9YXN5bmMocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk9PlxubG9hZEFyY2hpdmVMaXRlKFxucmVhZFBvd2VycyxcbmFyY2hpdmVMb2NhdGlvbixcbmFzc2lnblBhcnNlckZvckxhbmd1YWdlKG9wdGlvbnMpKTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubG9hZEFyY2hpdmUobG9hZEFyY2hpdmUpO1xuY29uc3QgICAgICAgIGltcG9ydEFyY2hpdmU9YXN5bmMocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk9PlxuaW1wb3J0QXJjaGl2ZUxpdGUoXG5yZWFkUG93ZXJzLFxuYXJjaGl2ZUxvY2F0aW9uLFxuYXNzaWduUGFyc2VyRm9yTGFuZ3VhZ2Uob3B0aW9ucykpOyRozY9fb25jZS5pbXBvcnRBcmNoaXZlKGltcG9ydEFyY2hpdmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VBcmNoaXZlIjpbInBhcnNlQXJjaGl2ZSJdLCJsb2FkQXJjaGl2ZSI6WyJsb2FkQXJjaGl2ZSJdLCJpbXBvcnRBcmNoaXZlIjpbImltcG9ydEFyY2hpdmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/iUH7Nw4AADcOAAAMgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1ob29rLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3RyYW1wb2xpbmUiLCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qcyIsIi4vcG9saWN5LmpzIiwiLi9wb3dlcnMuanMiXSwiZXhwb3J0cyI6WyJleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyIiwibWFrZUltcG9ydEhvb2tNYWtlciIsIm1ha2VJbXBvcnROb3dIb29rTWFrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXN5bmNUcmFtcG9saW5lLHN5bmNUcmFtcG9saW5lLHJlc29sdmUsYXR0ZW51YXRlTW9kdWxlSG9vayxBVFRFTlVBVE9SU19DT01QQVJUTUVOVCxlbmZvcmNlTW9kdWxlUG9saWN5LHVucGFja1JlYWRQb3dlcnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby90cmFtcG9saW5lXCIsIFtbXCJhc3luY1RyYW1wb2xpbmVcIiwgWyRozY9fYSA9PiAoYXN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dLFtcInN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKHN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dXV0sW1wiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanNcIiwgW1tcInJlc29sdmVcIiwgWyRozY9fYSA9PiAocmVzb2x2ZSA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJhdHRlbnVhdGVNb2R1bGVIb29rXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZU1vZHVsZUhvb2sgPSAkaM2PX2EpXV0sW1wiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRcIiwgWyRozY9fYSA9PiAoQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dXV0sW1wiLi9wb3dlcnMuanNcIiwgW1tcInVucGFja1JlYWRQb3dlcnNcIiwgWyRozY9fYSA9PiAodW5wYWNrUmVhZFBvd2VycyA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VJbXBvcnROb3dIb29rTWFrZXIsICduYW1lJywge3ZhbHVlOiBcIm1ha2VJbXBvcnROb3dIb29rTWFrZXJcIn0pOyRozY9fb25jZS5tYWtlSW1wb3J0Tm93SG9va01ha2VyKG1ha2VJbXBvcnROb3dIb29rTWFrZXIpOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbmNvbnN0e2VudHJpZXMsa2V5cyxhc3NpZ24sY3JlYXRlfT1PYmplY3Q7XG5cbmNvbnN0e2hhc093blByb3BlcnR5fT1PYmplY3QucHJvdG90eXBlO1xuLypcblxuXG4gKi9cbmNvbnN0IGhhcz0oaGF5c3RhY2ssbmVlZGxlKT0+YXBwbHkoaGFzT3duUHJvcGVydHksaGF5c3RhY2ssW25lZWRsZV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCByZXNvbHZlTG9jYXRpb249KHJlbCxhYnMpPT5uZXcgVVJMKHJlbCxhYnMpLnRvU3RyaW5nKCk7XG5cbi8vXG5mdW5jdGlvbiBnZXRJbXBvcnRzRnJvbVJlY29yZChyZWNvcmQpe1xucmV0dXJuKGhhcyhyZWNvcmQsJ3JlY29yZCcpP3JlY29yZC5yZWNvcmQuaW1wb3J0czpyZWNvcmQuaW1wb3J0cyl8fFtdO1xuIH1cblxuLy9cbi8vXG5jb25zdCBub2RlanNDb252ZW50aW9uU2VhcmNoU3VmZml4ZXM9W1xuLy9cbicuanMnLFxuJy5qc29uJyxcbicubm9kZScsXG4vL1xuJy9pbmRleC5qcycsXG4nL2luZGV4Lmpzb24nLFxuJy9pbmRleC5ub2RlJ107XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZFJlZGlyZWN0PSh7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb259KT0+XG57XG5jb25zdCBtb2R1bGVTcGVjaWZpZXJMb2NhdGlvbj1uZXcgVVJMKFxuYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24pLlxuaHJlZjtcblxuLy9cbmxldCBzb21lTG9jYXRpb249bmV3IFVSTCgnLi8nLG1vZHVsZVNwZWNpZmllckxvY2F0aW9uKS5ocmVmO1xuXG4vL1xuLy9cblxuLy9cbmZvcig7Oyl7XG5pZihcbnNvbWVMb2NhdGlvbiE9PUFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UJiZcbnNvbWVMb2NhdGlvbiBpbiBjb21wYXJ0bWVudHMpXG57XG5jb25zdCBsb2NhdGlvbj1zb21lTG9jYXRpb247XG5jb25zdCBzb21lQ29tcGFydG1lbnREZXNjcmlwdG9yPWNvbXBhcnRtZW50RGVzY3JpcHRvcnNbbG9jYXRpb25dO1xuaWYoY29tcGFydG1lbnREZXNjcmlwdG9yPT09c29tZUNvbXBhcnRtZW50RGVzY3JpcHRvcil7XG4vL1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vL1xuLy9cbmlmKGNvbXBhcnRtZW50RGVzY3JpcHRvci5jb21wYXJ0bWVudHMuaGFzKGxvY2F0aW9uKSl7XG5yZXR1cm57XG5zcGVjaWZpZXI6YWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIsXG5jb21wYXJ0bWVudDpjb21wYXJ0bWVudHNbbG9jYXRpb25dfTtcblxuIH1cblxuLy9cbi8vXG4vL1xuaWYoXG5zb21lQ29tcGFydG1lbnREZXNjcmlwdG9yLmNvbXBhcnRtZW50cy5oYXMoXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubG9jYXRpb24pKVxuXG57XG5lbmZvcmNlTW9kdWxlUG9saWN5KFxuY29tcGFydG1lbnREZXNjcmlwdG9yLm5hbWUsXG5zb21lQ29tcGFydG1lbnREZXNjcmlwdG9yLFxue1xuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBpbXBvcnQgaG9vay4gJHtxKGFic29sdXRlTW9kdWxlU3BlY2lmaWVyKX0gaXMgcGFydCBvZiB0aGUgY29tcGFydG1lbnQgbWFwIGFuZCByZXNvbHZlcyB0byAke2xvY2F0aW9ufWB9KTtcblxuXG5yZXR1cm57XG5zcGVjaWZpZXI6YWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIsXG5jb21wYXJ0bWVudDpjb21wYXJ0bWVudHNbbG9jYXRpb25dfTtcblxuIH1cblxudGhyb3cgbmV3IEVycm9yKCBgQ291bGQgbm90IGltcG9ydCBtb2R1bGU6ICR7cShhYnNvbHV0ZU1vZHVsZVNwZWNpZmllcil9YCk7XG4gfWVsc2V7XG4vL1xuY29uc3QgcGFyZW50TG9jYXRpb249bmV3IFVSTCgnLi4vJyxzb21lTG9jYXRpb24pLmhyZWY7XG5cbi8vXG5pZihwYXJlbnRMb2NhdGlvbj09PXNvbWVMb2NhdGlvbil7XG50aHJvdyBuZXcgRXJyb3IoXG4gYENvdWxkIG5vdCBpbXBvcnQgdW5rbm93biBtb2R1bGU6ICR7cShhYnNvbHV0ZU1vZHVsZVNwZWNpZmllcil9YCk7XG5cbiB9XG5cbnNvbWVMb2NhdGlvbj1wYXJlbnRMb2NhdGlvbjtcbiB9XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcj0oe1xubW9kdWxlcz11bmRlZmluZWQsXG5leGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWQsXG5lbnRyeUNvbXBhcnRtZW50TmFtZX0pPT5cbntcbmlmKCFtb2R1bGVzJiYhZXhpdE1vZHVsZUltcG9ydEhvb2spe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gYXN5bmMoc3BlY2lmaWVyKT0+e1xuaWYobW9kdWxlcyYmaGFzKG1vZHVsZXMsc3BlY2lmaWVyKSl7XG5jb25zdCBucz1tb2R1bGVzW3NwZWNpZmllcl07XG5yZXR1cm4gZnJlZXplKHtcbmltcG9ydHM6W10sXG5leHBvcnRzOm5zP2tleXMobnMpOltdLFxuZXhlY3V0ZToobW9kdWxlRXhwb3J0cyk9Pntcbm1vZHVsZUV4cG9ydHMuZGVmYXVsdD1ucztcbmFzc2lnbihtb2R1bGVFeHBvcnRzLG5zKTtcbiB9fSk7XG5cbiB9XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZXhpdE1vZHVsZUltcG9ydEhvb2soc3BlY2lmaWVyLGVudHJ5Q29tcGFydG1lbnROYW1lKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcihleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKTtcbmNvbnN0IG5vbWluYXRlQ2FuZGlkYXRlcz0obW9kdWxlU3BlY2lmaWVyLHNlYXJjaFN1ZmZpeGVzKT0+e1xuLy9cbi8vXG5jb25zdCBjYW5kaWRhdGVzPVttb2R1bGVTcGVjaWZpZXJdO1xuZm9yKGNvbnN0IGNhbmRpZGF0ZVN1ZmZpeCBvZiBzZWFyY2hTdWZmaXhlcyl7XG5jYW5kaWRhdGVzLnB1c2goIGAke21vZHVsZVNwZWNpZmllcn0ke2NhbmRpZGF0ZVN1ZmZpeH1gKTtcbiB9XG5yZXR1cm4gY2FuZGlkYXRlcztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24qY2hvb3NlTW9kdWxlRGVzY3JpcHRvcihcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbnttYXliZVJlYWQscGFyc2Usc2hvdWxkRGVmZXJFcnJvcj0oKT0+ZmFsc2V9KVxue1xuZm9yKGNvbnN0IGNhbmRpZGF0ZVNwZWNpZmllciBvZiBjYW5kaWRhdGVzKXtcbmNvbnN0IGNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3I9bW9kdWxlRGVzY3JpcHRvcnNbY2FuZGlkYXRlU3BlY2lmaWVyXTtcbmlmKGNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3IhPT11bmRlZmluZWQpe1xuY2FuZGlkYXRlTW9kdWxlRGVzY3JpcHRvci5yZXRhaW5lZD10cnVlO1xuY29uc3R7Y29tcGFydG1lbnQ6Y2FuZGlkYXRlQ29tcGFydG1lbnROYW1lPXBhY2thZ2VMb2NhdGlvbn09XG5jYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yO1xuY29uc3QgY2FuZGlkYXRlQ29tcGFydG1lbnQ9Y29tcGFydG1lbnRzW2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZV07XG5pZihjYW5kaWRhdGVDb21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgY29tcGFydG1lbnQgbWlzc2luZyBmb3IgY2FuZGlkYXRlICR7Y2FuZGlkYXRlU3BlY2lmaWVyfSBpbiAke2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZX1gKTtcblxuIH1cbi8vXG5jb25zdCBjYW5kaWRhdGVDb21wYXJ0bWVudERlc2NyaXB0b3I9XG5jb21wYXJ0bWVudERlc2NyaXB0b3JzW2NhbmRpZGF0ZUNvbXBhcnRtZW50TmFtZV07XG5pZihjYW5kaWRhdGVDb21wYXJ0bWVudERlc2NyaXB0b3I9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYGNvbXBhcnRtZW50RGVzY3JpcHRvciBtaXNzaW5nIGZvciBjYW5kaWRhdGUgJHtjYW5kaWRhdGVTcGVjaWZpZXJ9IGluICR7Y2FuZGlkYXRlQ29tcGFydG1lbnROYW1lfWApO1xuXG4gfVxuY2FuZGlkYXRlQ29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXNbbW9kdWxlU3BlY2lmaWVyXT1cbmNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3I7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY29yZD17XG5zcGVjaWZpZXI6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6Y2FuZGlkYXRlQ29tcGFydG1lbnR9O1xuXG5yZXR1cm4gcmVjb3JkO1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG1vZHVsZUxvY2F0aW9uPXJlc29sdmVMb2NhdGlvbihjYW5kaWRhdGVTcGVjaWZpZXIscGFja2FnZUxvY2F0aW9uKTtcblxuLy9cbi8vXG5jb25zdCBtb2R1bGVCeXRlcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xueWllbGQgbWF5YmVSZWFkKG1vZHVsZUxvY2F0aW9uKTtcblxuXG5pZihtb2R1bGVCeXRlcyE9PXVuZGVmaW5lZCl7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBzb3VyY2VNYXA7XG4vL1xuY29uc3QgZW52ZWxvcGU9LyogICAgICAgICAgICAgICAgICAgICAgKi9cbnlpZWxkIHBhcnNlKFxubW9kdWxlQnl0ZXMsXG5jYW5kaWRhdGVTcGVjaWZpZXIsXG5tb2R1bGVMb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbntcbnJlYWRQb3dlcnMsXG5zb3VyY2VNYXBIb29rOlxuc291cmNlTWFwSG9vayYmKFxuKG5leHRTb3VyY2VNYXBPYmplY3QpPT57XG5zb3VyY2VNYXA9SlNPTi5zdHJpbmdpZnkobmV4dFNvdXJjZU1hcE9iamVjdCk7XG4gfSksXG5jb21wYXJ0bWVudERlc2NyaXB0b3J9KTtcblxuXG5cbmNvbnN0e1xucGFyc2VyLFxuYnl0ZXM6dHJhbnNmb3JtZWRCeXRlcyxcbnJlY29yZDpjb25jcmV0ZVJlY29yZH09XG5lbnZlbG9wZTtcblxuLy9cbi8vXG5pZihjYW5kaWRhdGVTcGVjaWZpZXIhPT1tb2R1bGVTcGVjaWZpZXIpe1xubW9kdWxlRGVzY3JpcHRvcnNbbW9kdWxlU3BlY2lmaWVyXT17XG5yZXRhaW5lZDp0cnVlLFxubW9kdWxlOmNhbmRpZGF0ZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OnBhY2thZ2VMb2NhdGlvbn07XG5cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvcmQ9e1xucmVjb3JkOmNvbmNyZXRlUmVjb3JkLFxuc3BlY2lmaWVyOmNhbmRpZGF0ZVNwZWNpZmllcixcbmltcG9ydE1ldGE6e3VybDptb2R1bGVMb2NhdGlvbn19O1xuXG5cbmxldCBzaGE1MTI7XG5pZihjb21wdXRlU2hhNTEyIT09dW5kZWZpbmVkKXtcbnNoYTUxMj1jb21wdXRlU2hhNTEyKHRyYW5zZm9ybWVkQnl0ZXMpO1xuXG5pZihzb3VyY2VNYXBIb29rIT09dW5kZWZpbmVkJiZzb3VyY2VNYXAhPT11bmRlZmluZWQpe1xuc291cmNlTWFwSG9vayhzb3VyY2VNYXAse1xuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9uLFxubW9kdWxlOmNhbmRpZGF0ZVNwZWNpZmllcixcbmxvY2F0aW9uOm1vZHVsZUxvY2F0aW9uLFxuc2hhNTEyfSk7XG5cbiB9XG4gfVxuXG5jb25zdCBwYWNrYWdlUmVsYXRpdmVMb2NhdGlvbj1tb2R1bGVMb2NhdGlvbi5zbGljZShcbnBhY2thZ2VMb2NhdGlvbi5sZW5ndGgpO1xuXG5wYWNrYWdlU291cmNlc1tjYW5kaWRhdGVTcGVjaWZpZXJdPXtcbmxvY2F0aW9uOnBhY2thZ2VSZWxhdGl2ZUxvY2F0aW9uLFxuc291cmNlTG9jYXRpb246bW9kdWxlTG9jYXRpb24sXG5wYXJzZXIsXG5ieXRlczp0cmFuc2Zvcm1lZEJ5dGVzLFxucmVjb3JkOmNvbmNyZXRlUmVjb3JkLFxuc2hhNTEyfTtcblxuaWYoIXNob3VsZERlZmVyRXJyb3IocGFyc2VyKSl7XG5mb3IoY29uc3QgaW1wb3J0U3BlY2lmaWVyIG9mIGdldEltcG9ydHNGcm9tUmVjb3JkKHJlY29yZCkpe1xuc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50KHBhY2thZ2VMb2NhdGlvbikuYWRkKFxucmVzb2x2ZShpbXBvcnRTcGVjaWZpZXIsbW9kdWxlU3BlY2lmaWVyKSk7XG5cbiB9XG4gfVxuXG5yZXR1cm4gcmVjb3JkO1xuIH1cbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUltcG9ydEhvb2tNYWtlcj0oXG5yZWFkUG93ZXJzLFxuYmFzZUxvY2F0aW9uLFxue1xuc291cmNlcz1jcmVhdGUobnVsbCksXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzPWNyZWF0ZShudWxsKSxcbmFyY2hpdmVPbmx5PWZhbHNlLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5zZWFyY2hTdWZmaXhlcz1ub2RlanNDb252ZW50aW9uU2VhcmNoU3VmZml4ZXMsXG5zb3VyY2VNYXBIb29rPXVuZGVmaW5lZCxcbmVudHJ5Q29tcGFydG1lbnROYW1lLFxuZW50cnlNb2R1bGVTcGVjaWZpZXIsXG5leGl0TW9kdWxlSW1wb3J0SG9vaz11bmRlZmluZWR9KT0+XG5cbntcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmljdGx5UmVxdWlyZWQ9bmV3IE1hcChbXG5bZW50cnlDb21wYXJ0bWVudE5hbWUsbmV3IFNldChbZW50cnlNb2R1bGVTcGVjaWZpZXJdKV1dKTtcblxuXG4vKlxuXG4gICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50PShjb21wYXJ0bWVudE5hbWUpPT57XG5sZXQgY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkPXN0cmljdGx5UmVxdWlyZWQuZ2V0KGNvbXBhcnRtZW50TmFtZSk7XG5pZihjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQhPT11bmRlZmluZWQpe1xucmV0dXJuIGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZDtcbiB9XG5jb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9bmV3IFNldCgpO1xuc3RyaWN0bHlSZXF1aXJlZC5zZXQoY29tcGFydG1lbnROYW1lLGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCk7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH07XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VJbXBvcnRIb29rPSh7XG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlTmFtZTpfcGFja2FnZU5hbWUsXG5hdHRlbnVhdG9ycyxcbnBhcnNlLFxuc2hvdWxkRGVmZXJFcnJvcixcbmNvbXBhcnRtZW50c30pPT5cbntcbi8vXG5wYWNrYWdlTG9jYXRpb249cmVzb2x2ZUxvY2F0aW9uKHBhY2thZ2VMb2NhdGlvbixiYXNlTG9jYXRpb24pO1xuY29uc3QgcGFja2FnZVNvdXJjZXM9c291cmNlc1twYWNrYWdlTG9jYXRpb25dfHxjcmVhdGUobnVsbCk7XG5zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl09cGFja2FnZVNvdXJjZXM7XG5jb25zdCBjb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnREZXNjcmlwdG9yc1twYWNrYWdlTG9jYXRpb25dfHx7fTtcbmNvbnN0e21vZHVsZXM6bW9kdWxlRGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcz1tb2R1bGVEZXNjcmlwdG9ycztcblxuLypcblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlZmVyRXJyb3I9KHNwZWNpZmllcixlcnJvcik9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaWYoc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50KHBhY2thZ2VMb2NhdGlvbikuaGFzKHNwZWNpZmllcikpe1xudGhyb3cgZXJyb3I7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY29yZD1mcmVlemUoe1xuaW1wb3J0czpbXSxcbmV4cG9ydHM6W10sXG5leGVjdXRlOigpPT57XG50aHJvdyBlcnJvcjtcbiB9fSk7XG5cbnBhY2thZ2VTb3VyY2VzW3NwZWNpZmllcl09e1xuZGVmZXJyZWRFcnJvcjplcnJvci5tZXNzYWdlfTtcblxuXG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydEhvb2s9YXN5bmMobW9kdWxlU3BlY2lmaWVyKT0+e1xuY29tcGFydG1lbnREZXNjcmlwdG9yLnJldGFpbmVkPXRydWU7XG5cbi8vXG5hd2FpdCBudWxsO1xuXG4vL1xuLy9cbnRyeXtcbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG5pZihtb2R1bGVTcGVjaWZpZXIhPT0nLicmJiFtb2R1bGVTcGVjaWZpZXIuc3RhcnRzV2l0aCgnLi8nKSl7XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG5jb25zdCByZWNvcmQ9YXdhaXQgZXhpdE1vZHVsZUltcG9ydEhvb2soXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24pO1xuXG5pZihyZWNvcmQpe1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDp0cnVlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsb2FkaW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSB3YXMgbm90IGluIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIGFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbG9hZCBpdCBhcyBhIGJ1aWx0aW5gfSk7XG5cbmlmKGFyY2hpdmVPbmx5KXtcbi8vXG4vL1xucmV0dXJuIGZyZWV6ZSh7aW1wb3J0czpbXSxleHBvcnRzOltdLGV4ZWN1dGUoKXsgfX0pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IGF0dGVudWF0ZWRSZWNvcmQ9YXdhaXQgYXR0ZW51YXRlTW9kdWxlSG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnJlY29yZCxcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5wb2xpY3ksXG5hdHRlbnVhdG9ycyk7XG5cbnJldHVybiBhdHRlbnVhdGVkUmVjb3JkO1xuIH1cbiB9XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGZpbmQgZXh0ZXJuYWwgbW9kdWxlICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IGluIHBhY2thZ2UgJHtwYWNrYWdlTG9jYXRpb259YCk7XG5cbiB9XG5cbmNvbnN0e21heWJlUmVhZH09dW5wYWNrUmVhZFBvd2VycyhyZWFkUG93ZXJzKTtcblxuY29uc3QgY2FuZGlkYXRlcz1ub21pbmF0ZUNhbmRpZGF0ZXMobW9kdWxlU3BlY2lmaWVyLHNlYXJjaFN1ZmZpeGVzKTtcblxuY29uc3QgcmVjb3JkPWF3YWl0IGFzeW5jVHJhbXBvbGluZShcbmNob29zZU1vZHVsZURlc2NyaXB0b3IsXG57XG5jYW5kaWRhdGVzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyxcbmNvbXBhcnRtZW50cyxcbmNvbXB1dGVTaGE1MTIsXG5tb2R1bGVEZXNjcmlwdG9ycyxcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VTb3VyY2VzLFxucmVhZFBvd2VycyxcbnNvdXJjZU1hcEhvb2ssXG5zdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnR9LFxuXG57bWF5YmVSZWFkLHBhcnNlLHNob3VsZERlZmVyRXJyb3J9KTtcblxuXG5pZihyZWNvcmQpe1xucmV0dXJuIHJlY29yZDtcbiB9XG5cbnRocm93IEVycm9yKFxuIGBDYW5ub3QgZmluZCBmaWxlIGZvciBpbnRlcm5hbCBtb2R1bGUgJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gKHdpdGggY2FuZGlkYXRlcyAke2NhbmRpZGF0ZXMuXG5tYXAoKHgpPT5xKHgpKS5cbmpvaW4oJywgJykgfSkgaW4gcGFja2FnZSAke3BhY2thZ2VMb2NhdGlvbn1gKTtcblxuIH1jYXRjaChlcnJvcil7XG5yZXR1cm4gZGVmZXJFcnJvcihtb2R1bGVTcGVjaWZpZXIsZXJyb3IpO1xuIH1cbiB9O1xucmV0dXJuIGltcG9ydEhvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0SG9vaztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VJbXBvcnRIb29rTWFrZXIobWFrZUltcG9ydEhvb2tNYWtlcik7XG5mdW5jdGlvbiAgICAgICAgbWFrZUltcG9ydE5vd0hvb2tNYWtlcihcbnJlYWRQb3dlcnMsXG5iYXNlTG9jYXRpb24sXG57XG5zb3VyY2VzPWNyZWF0ZShudWxsKSxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5zZWFyY2hTdWZmaXhlcz1ub2RlanNDb252ZW50aW9uU2VhcmNoU3VmZml4ZXMsXG5zb3VyY2VNYXBIb29rPXVuZGVmaW5lZCxcbmV4aXRNb2R1bGVJbXBvcnROb3dIb29rfSlcblxue1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZD1uZXcgTWFwKCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQ9KGNvbXBhcnRtZW50TmFtZSk9PntcbmxldCBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9c3RyaWN0bHlSZXF1aXJlZC5nZXQoY29tcGFydG1lbnROYW1lKTtcbmlmKGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH1cbmNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZD1uZXcgU2V0KCk7XG5zdHJpY3RseVJlcXVpcmVkLnNldChjb21wYXJ0bWVudE5hbWUsY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkKTtcbnJldHVybiBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbXBvcnROb3dIb29rPSh7XG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlTmFtZTpfcGFja2FnZU5hbWUsXG5wYXJzZSxcbmNvbXBhcnRtZW50c30pPT5cbntcbmlmKCEoJ2lzU3luY1BhcnNlcidpbiBwYXJzZSkpe1xucmV0dXJuIGZ1bmN0aW9uIGltcG9zc2libGVUcmFuc2Zvcm1JbXBvcnROb3dIb29rKCl7XG50aHJvdyBuZXcgRXJyb3IoXG4nRHluYW1pYyByZXF1aXJlcyBhcmUgb25seSBwb3NzaWJsZSB3aXRoIHN5bmNocm9ub3VzIHBhcnNlcnMgYW5kIG5vIGFzeW5jaHJvbm91cyBtb2R1bGUgdHJhbnNmb3JtcyBpbiBvcHRpb25zJyk7XG5cbiB9O1xuIH1cblxuY29uc3QgY29tcGFydG1lbnREZXNjcmlwdG9yPWNvbXBhcnRtZW50RGVzY3JpcHRvcnNbcGFja2FnZUxvY2F0aW9uXXx8e307XG5cbnBhY2thZ2VMb2NhdGlvbj1yZXNvbHZlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLGJhc2VMb2NhdGlvbik7XG5jb25zdCBwYWNrYWdlU291cmNlcz1zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl18fGNyZWF0ZShudWxsKTtcbnNvdXJjZXNbcGFja2FnZUxvY2F0aW9uXT1wYWNrYWdlU291cmNlcztcbmNvbnN0e1xubW9kdWxlczpcbm1vZHVsZURlc2NyaXB0b3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jcmVhdGUobnVsbCl9PVxuXG5jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcz1tb2R1bGVEZXNjcmlwdG9ycztcblxubGV0e3BvbGljeX09Y29tcGFydG1lbnREZXNjcmlwdG9yO1xucG9saWN5PXBvbGljeXx8Y3JlYXRlKG51bGwpO1xuXG4vL1xuLy9cbi8vXG5pZigncGFja2FnZXMnaW4gcG9saWN5JiZ0eXBlb2YgcG9saWN5LnBhY2thZ2VzPT09J29iamVjdCcpe1xuZm9yKGNvbnN0W3BhY2thZ2VOYW1lLHBhY2thZ2VQb2xpY3lJdGVtXW9mIGVudHJpZXMocG9saWN5LnBhY2thZ2VzKSl7XG5pZihcbiEocGFja2FnZU5hbWUgaW4gY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXMpJiZcbnBhY2thZ2VOYW1lIGluIGNvbXBhcnRtZW50RGVzY3JpcHRvci5zY29wZXMmJlxucGFja2FnZVBvbGljeUl0ZW0pXG57XG5jb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlc1twYWNrYWdlTmFtZV09XG5jb21wYXJ0bWVudERlc2NyaXB0b3Iuc2NvcGVzW3BhY2thZ2VOYW1lXTtcbiB9XG4gfVxuIH1cblxuY29uc3R7bWF5YmVSZWFkTm93LGlzQWJzb2x1dGV9PXJlYWRQb3dlcnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydE5vd0hvb2s9KG1vZHVsZVNwZWNpZmllcik9PntcbmlmKGlzQWJzb2x1dGUobW9kdWxlU3BlY2lmaWVyKSl7XG5jb25zdCByZWNvcmQ9ZmluZFJlZGlyZWN0KHtcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcjptb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb259KTtcblxuaWYocmVjb3JkKXtcbnJldHVybiByZWNvcmQ7XG4gfVxuIH1cblxuY29uc3QgY2FuZGlkYXRlcz1ub21pbmF0ZUNhbmRpZGF0ZXMobW9kdWxlU3BlY2lmaWVyLHNlYXJjaFN1ZmZpeGVzKTtcblxuY29uc3QgcmVjb3JkPXN5bmNUcmFtcG9saW5lKFxuY2hvb3NlTW9kdWxlRGVzY3JpcHRvcixcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbntcbm1heWJlUmVhZDptYXliZVJlYWROb3csXG5wYXJzZX0pO1xuXG5cblxuaWYocmVjb3JkKXtcbnJldHVybiByZWNvcmQ7XG4gfVxuXG5pZihleGl0TW9kdWxlSW1wb3J0Tm93SG9vayl7XG4vL1xuLy9cbmNvbnN0IGV4aXRSZWNvcmQ9ZXhpdE1vZHVsZUltcG9ydE5vd0hvb2soXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24pO1xuXG5cbmlmKCFleGl0UmVjb3JkKXtcbnRocm93IG5ldyBFcnJvciggYENvdWxkIG5vdCBpbXBvcnQgbW9kdWxlOiAke3EobW9kdWxlU3BlY2lmaWVyKX1gKTtcbiB9XG5cbnJldHVybiBleGl0UmVjb3JkO1xuIH1cblxudGhyb3cgbmV3IEVycm9yKFxuIGBDb3VsZCBub3QgaW1wb3J0IG1vZHVsZTogJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH07IHRyeSBwcm92aWRpbmcgYW4gaW1wb3J0Tm93SG9va2ApO1xuXG4gfTtcblxucmV0dXJuIGltcG9ydE5vd0hvb2s7XG4gfTtcbnJldHVybiBtYWtlSW1wb3J0Tm93SG9vaztcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyIjpbImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIiXSwibWFrZUltcG9ydEhvb2tNYWtlciI6WyJtYWtlSW1wb3J0SG9va01ha2VyIl0sIm1ha2VJbXBvcnROb3dIb29rTWFrZXIiOlsibWFrZUltcG9ydE5vd0hvb2tNYWtlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABISXK4/gIAAP4CAAArAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvanNvbi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsicGFyc2VMb2NhdGVkSnNvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlTG9jYXRlZEpzb249KHNvdXJjZSxsb2NhdGlvbik9PntcbnRyeXtcbnJldHVybiBKU09OLnBhcnNlKHNvdXJjZSk7XG4gfWNhdGNoKGVycm9yKXtcbmlmKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3Ipe1xudGhyb3cgU3ludGF4RXJyb3IoIGBDYW5ub3QgcGFyc2UgSlNPTiBmcm9tICR7bG9jYXRpb259LCAke2Vycm9yfWApO1xuIH1cbnRocm93IGVycm9yO1xuIH1cbiB9OyRozY9fb25jZS5wYXJzZUxvY2F0ZWRKc29uKHBhcnNlTG9jYXRlZEpzb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VMb2NhdGVkSnNvbiI6WyJwYXJzZUxvY2F0ZWRKc29uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGYUYM5BHgAAQR4AACsAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9saW5rLmpzeyJpbXBvcnRzIjpbIi4vbWFwLXBhcnNlci5qcyIsIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIiwiLi9wb2xpY3kuanMiXSwiZXhwb3J0cyI6WyJhc3NlbWJsZSIsImxpbmsiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZU1hcFBhcnNlcnMscmVzb2x2ZUZhbGxiYWNrLEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5ULGF0dGVudWF0ZUdsb2JhbHMsZW5mb3JjZU1vZHVsZVBvbGljeSxtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyOyRozY9faW1wb3J0cyhbW1wiLi9tYXAtcGFyc2VyLmpzXCIsIFtbXCJtYWtlTWFwUGFyc2Vyc1wiLCBbJGjNj19hID0+IChtYWtlTWFwUGFyc2VycyA9ICRozY9fYSldXV1dLFtcIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzXCIsIFtbXCJyZXNvbHZlXCIsIFskaM2PX2EgPT4gKHJlc29sdmVGYWxsYmFjayA9ICRozY9fYSldXV1dLFtcIi4vcG9saWN5LmpzXCIsIFtbXCJBVFRFTlVBVE9SU19DT01QQVJUTUVOVFwiLCBbJGjNj19hID0+IChBVFRFTlVBVE9SU19DT01QQVJUTUVOVCA9ICRozY9fYSldXSxbXCJhdHRlbnVhdGVHbG9iYWxzXCIsIFskaM2PX2EgPT4gKGF0dGVudWF0ZUdsb2JhbHMgPSAkaM2PX2EpXV0sW1wiZW5mb3JjZU1vZHVsZVBvbGljeVwiLCBbJGjNj19hID0+IChlbmZvcmNlTW9kdWxlUG9saWN5ID0gJGjNj19hKV1dLFtcIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXJcIiwgWyRozY9fYSA9PiAobWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7YXNzaWduLGNyZWF0ZSxlbnRyaWVzLGZyZWV6ZX09T2JqZWN0O1xuY29uc3R7aGFzT3duUHJvcGVydHl9PU9iamVjdC5wcm90b3R5cGU7XG5jb25zdHthcHBseX09UmVmbGVjdDtcbmNvbnN0e2FsbFNldHRsZWR9PVByb21pc2U7XG5cbi8qXG5cblxuICovXG5jb25zdCBwcm9taXNlQWxsU2V0dGxlZD1hbGxTZXR0bGVkLmJpbmQoUHJvbWlzZSk7XG5cbmNvbnN0IGRlZmF1bHRDb21wYXJ0bWVudD1Db21wYXJ0bWVudDtcblxuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGhhcz0ob2JqZWN0LGtleSk9PmFwcGx5KGhhc093blByb3BlcnR5LG9iamVjdCxba2V5XSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB0cmltTW9kdWxlU3BlY2lmaWVyUHJlZml4PShtb2R1bGVTcGVjaWZpZXIscHJlZml4KT0+e1xuaWYobW9kdWxlU3BlY2lmaWVyPT09cHJlZml4KXtcbnJldHVybicuJztcbiB9XG5pZihtb2R1bGVTcGVjaWZpZXIuc3RhcnRzV2l0aCggYCR7cHJlZml4fS9gKSl7XG5yZXR1cm4gYC4vJHttb2R1bGVTcGVjaWZpZXIuc2xpY2UocHJlZml4Lmxlbmd0aCsxKX1gO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZU1vZHVsZU1hcEhvb2s9KFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnROYW1lLFxubW9kdWxlRGVzY3JpcHRvcnMsXG5zY29wZURlc2NyaXB0b3JzKT0+XG57XG4vKlxuXG5cbiAgICovXG5jb25zdCBtb2R1bGVNYXBIb29rPShtb2R1bGVTcGVjaWZpZXIpPT57XG5jb21wYXJ0bWVudERlc2NyaXB0b3IucmV0YWluZWQ9dHJ1ZTtcblxuY29uc3QgbW9kdWxlRGVzY3JpcHRvcj1tb2R1bGVEZXNjcmlwdG9yc1ttb2R1bGVTcGVjaWZpZXJdO1xuaWYobW9kdWxlRGVzY3JpcHRvciE9PXVuZGVmaW5lZCl7XG5tb2R1bGVEZXNjcmlwdG9yLnJldGFpbmVkPXRydWU7XG5cbi8vXG4vL1xuY29uc3R7XG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnROYW1lPWNvbXBhcnRtZW50TmFtZSxcbm1vZHVsZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyLFxuZXhpdH09XG5tb2R1bGVEZXNjcmlwdG9yO1xuaWYoZXhpdCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdW5kZWZpbmVkOy8vXG4gfVxuaWYoZm9yZWlnbk1vZHVsZVNwZWNpZmllciE9PXVuZGVmaW5lZCl7XG4vL1xuaWYoIW1vZHVsZVNwZWNpZmllci5zdGFydHNXaXRoKCcuLycpKXtcbi8vXG4vL1xuZW5mb3JjZU1vZHVsZVBvbGljeShtb2R1bGVTcGVjaWZpZXIsY29tcGFydG1lbnREZXNjcmlwdG9yLHtcbmV4aXQ6ZmFsc2UsXG5lcnJvckhpbnQ6XG4nVGhpcyBjaGVjayBzaG91bGQgbm90IGJlIHJlYWNoYWJsZS4gSWYgeW91IHNlZSB0aGlzIGVycm9yLCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nfSk7XG5cbiB9XG5cbmNvbnN0IGZvcmVpZ25Db21wYXJ0bWVudD1jb21wYXJ0bWVudHNbZm9yZWlnbkNvbXBhcnRtZW50TmFtZV07XG5pZihmb3JlaWduQ29tcGFydG1lbnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBtaXNzaW5nIGNvbXBhcnRtZW50ICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfX1gKTtcblxuIH1cbnJldHVybntcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudCxcbm5hbWVzcGFjZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyfTtcblxuIH1cbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZm9yKGNvbnN0W3Njb3BlUHJlZml4LHNjb3BlRGVzY3JpcHRvcl1vZiBlbnRyaWVzKHNjb3BlRGVzY3JpcHRvcnMpKXtcbmNvbnN0IGZvcmVpZ25Nb2R1bGVTcGVjaWZpZXI9dHJpbU1vZHVsZVNwZWNpZmllclByZWZpeChcbm1vZHVsZVNwZWNpZmllcixcbnNjb3BlUHJlZml4KTtcblxuXG5pZihmb3JlaWduTW9kdWxlU3BlY2lmaWVyIT09dW5kZWZpbmVkKXtcbmNvbnN0e2NvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudE5hbWV9PXNjb3BlRGVzY3JpcHRvcjtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudE5hbWU9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBzY29wZSAke3Njb3BlUHJlZml4fSBkdWUgdG8gbWlzc2luZyBcImNvbXBhcnRtZW50XCIgcHJvcGVydHlgKTtcblxuIH1cbmNvbnN0IGZvcmVpZ25Db21wYXJ0bWVudD1jb21wYXJ0bWVudHNbZm9yZWlnbkNvbXBhcnRtZW50TmFtZV07XG5pZihmb3JlaWduQ29tcGFydG1lbnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbXBvcnQgZnJvbSBtaXNzaW5nIGNvbXBhcnRtZW50ICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfWApO1xuXG4gfVxuXG5lbmZvcmNlTW9kdWxlUG9saWN5KHNjb3BlUHJlZml4LGNvbXBhcnRtZW50RGVzY3JpcHRvcix7XG5leGl0OmZhbHNlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsaW5raW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSBpcyBwYXJ0IG9mIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIHJlc29sdmVzIHRvICR7cShcbmZvcmVpZ25Db21wYXJ0bWVudE5hbWUpXG4gfS5gfSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xubW9kdWxlRGVzY3JpcHRvcnNbbW9kdWxlU3BlY2lmaWVyXT17XG5yZXRhaW5lZDp0cnVlLFxuY29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50TmFtZSxcbm1vZHVsZTpmb3JlaWduTW9kdWxlU3BlY2lmaWVyfTtcblxucmV0dXJue1xuY29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50LFxubmFtZXNwYWNlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXJ9O1xuXG4gfVxuIH1cblxuLy9cbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG5cbnJldHVybiBtb2R1bGVNYXBIb29rO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgaW1wb3NzaWJsZUltcG9ydE5vd0hvb2tNYWtlcj0oKT0+e1xucmV0dXJuIGZ1bmN0aW9uIGltcG9zc2libGVJbXBvcnROb3dIb29rKCl7XG50aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIHJlYWQgcG93ZXJzIGRvIG5vdCBzdXBwb3J0IGR5bmFtaWMgcmVxdWlyZXMnKTtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGxpbms9KFxue2VudHJ5LGNvbXBhcnRtZW50czpjb21wYXJ0bWVudERlc2NyaXB0b3JzfSxcbm9wdGlvbnMpPT5cbntcbmNvbnN0e1xucmVzb2x2ZT1yZXNvbHZlRmFsbGJhY2ssXG5tYWtlSW1wb3J0SG9vayxcbm1ha2VJbXBvcnROb3dIb29rPWltcG9zc2libGVJbXBvcnROb3dIb29rTWFrZXIsXG5wYXJzZXJGb3JMYW5ndWFnZTpwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbj17fSxcbmdsb2JhbHM9e30sXG50cmFuc2Zvcm1zPVtdLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zLFxuX19zaGltVHJhbnNmb3Jtc19fPVtdLFxuYXJjaGl2ZU9ubHk9ZmFsc2UsXG5Db21wYXJ0bWVudD1kZWZhdWx0Q29tcGFydG1lbnR9PVxub3B0aW9ucztcblxuY29uc3R7Y29tcGFydG1lbnQ6ZW50cnlDb21wYXJ0bWVudE5hbWV9PWVudHJ5O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcnRtZW50cz1jcmVhdGUobnVsbCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhdHRlbnVhdG9ycz1tYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyKFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyk7XG5cblxuY29uc3QgcGVuZGluZ0pvYnM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXJzZXJGb3JMYW5ndWFnZT1mcmVlemUoXG5hc3NpZ24oY3JlYXRlKG51bGwpLHBhcnNlckZvckxhbmd1YWdlT3B0aW9uKSk7XG5cblxuY29uc3QgbWFwUGFyc2Vycz1tYWtlTWFwUGFyc2Vycyh7XG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtc30pO1xuXG5cbmZvcihjb25zdFtjb21wYXJ0bWVudE5hbWUsY29tcGFydG1lbnREZXNjcmlwdG9yXW9mIGVudHJpZXMoXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzKSlcbntcbmNvbnN0e1xubG9jYXRpb24sXG5uYW1lLFxucGFyc2VyczpsYW5ndWFnZUZvckV4dGVuc2lvbj17fSxcbnR5cGVzOmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyPXt9fT1cbmNvbXBhcnRtZW50RGVzY3JpcHRvcjtcblxuLy9cbi8vXG5jb25zdHtzY29wZXM6X3Njb3Blcyxtb2R1bGVzOl9tb2R1bGVzfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5jb25zdCBtb2R1bGVzPV9tb2R1bGVzfHxjcmVhdGUobnVsbCk7XG5jb25zdCBzY29wZXM9X3Njb3Blc3x8Y3JlYXRlKG51bGwpO1xuXG4vL1xuLy9cbmNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzPW1vZHVsZXM7XG5cbi8vXG4vL1xuY29uc3QgcGFyc2U9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1hcFBhcnNlcnMobGFuZ3VhZ2VGb3JFeHRlbnNpb24sbGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNob3VsZERlZmVyRXJyb3I9KGxhbmd1YWdlKT0+e1xuaWYobGFuZ3VhZ2UmJmhhcyhwYXJzZXJGb3JMYW5ndWFnZSxsYW5ndWFnZSkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3BhcnNlckZvckxhbmd1YWdlW2xhbmd1YWdlXS5cbmhldXJpc3RpY0ltcG9ydHMpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07XG5cbi8vXG4vL1xuY29uc3QgcmVzb2x2ZUhvb2s9cmVzb2x2ZTtcbmNvbnN0IGltcG9ydEhvb2s9bWFrZUltcG9ydEhvb2soe1xucGFja2FnZUxvY2F0aW9uOmxvY2F0aW9uLFxucGFja2FnZU5hbWU6bmFtZSxcbmF0dGVudWF0b3JzLFxucGFyc2UsXG5zaG91bGREZWZlckVycm9yLFxuY29tcGFydG1lbnRzfSk7XG5cblxuY29uc3QgaW1wb3J0Tm93SG9vaz1tYWtlSW1wb3J0Tm93SG9vayh7XG5wYWNrYWdlTG9jYXRpb246bG9jYXRpb24sXG5wYWNrYWdlTmFtZTpuYW1lLFxucGFyc2UsXG5jb21wYXJ0bWVudHN9KTtcblxuXG5jb25zdCBtb2R1bGVNYXBIb29rPW1ha2VNb2R1bGVNYXBIb29rKFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnRzLFxuY29tcGFydG1lbnROYW1lLFxubW9kdWxlcyxcbnNjb3Blcyk7XG5cblxuY29uc3QgY29tcGFydG1lbnQ9bmV3IENvbXBhcnRtZW50KHtcbm5hbWU6bG9jYXRpb24sXG5yZXNvbHZlSG9vayxcbmltcG9ydEhvb2ssXG5pbXBvcnROb3dIb29rLFxubW9kdWxlTWFwSG9vayxcbnRyYW5zZm9ybXMsXG5fX3NoaW1UcmFuc2Zvcm1zX18sXG5fX29wdGlvbnNfXzp0cnVlfSk7XG5cblxuaWYoIWFyY2hpdmVPbmx5KXtcbmF0dGVudWF0ZUdsb2JhbHMoXG5jb21wYXJ0bWVudC5nbG9iYWxUaGlzLFxuZ2xvYmFscyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5wb2xpY3ksXG5hdHRlbnVhdG9ycyxcbnBlbmRpbmdKb2JzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLm5hbWUpO1xuXG4gfVxuXG5jb21wYXJ0bWVudHNbY29tcGFydG1lbnROYW1lXT1jb21wYXJ0bWVudDtcbiB9XG5cbmNvbnN0IGNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tlbnRyeUNvbXBhcnRtZW50TmFtZV07XG5pZihjb21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGFzc2VtYmxlIGNvbXBhcnRtZW50IGdyYXBoIGJlY2F1c2UgdGhlIHJvb3QgY29tcGFydG1lbnQgbmFtZWQgJHtxKFxuZW50cnlDb21wYXJ0bWVudE5hbWUpXG4gfSBpcyBtaXNzaW5nIGZyb20gdGhlIGNvbXBhcnRtZW50IG1hcGApO1xuXG4gfVxuY29uc3QgYXR0ZW51YXRvcnNDb21wYXJ0bWVudD1jb21wYXJ0bWVudHNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdO1xuXG5yZXR1cm57XG5jb21wYXJ0bWVudCxcbmNvbXBhcnRtZW50cyxcbmF0dGVudWF0b3JzQ29tcGFydG1lbnQsXG5wZW5kaW5nSm9ic1Byb21pc2U6cHJvbWlzZUFsbFNldHRsZWQocGVuZGluZ0pvYnMpLnRoZW4oXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovKHJlc3VsdHMpPT57XG5jb25zdCBlcnJvcnM9cmVzdWx0cy5cbmZpbHRlcigocmVzdWx0KT0+cmVzdWx0LnN0YXR1cz09PSdyZWplY3RlZCcpLlxubWFwKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8ocmVzdWx0KT0+XG5yZXN1bHQucmVhc29uKTtcblxuaWYoZXJyb3JzLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBHbG9iYWxzIGF0dGVudWF0aW9uIGVycm9yczogJHtlcnJvcnMuXG5tYXAoKGVycm9yKT0+ZXJyb3IubWVzc2FnZSkuXG5qb2luKCcsICcpIH1gKTtcblxuIH1cbiB9KX07XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubGluayhsaW5rKTtcbmNvbnN0ICAgICAgICBhc3NlbWJsZT0oY29tcGFydG1lbnRNYXAsb3B0aW9ucyk9PlxubGluayhjb21wYXJ0bWVudE1hcCxvcHRpb25zKS5jb21wYXJ0bWVudDskaM2PX29uY2UuYXNzZW1ibGUoYXNzZW1ibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGluayI6WyJsaW5rIl0sImFzc2VtYmxlIjpbImFzc2VtYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAM/TbxZEwAAWRMAADEAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9tYXAtcGFyc2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3RyYW1wb2xpbmUiLCIuL2V4dGVuc2lvbi5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXBQYXJzZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHN5bmNUcmFtcG9saW5lLGFzeW5jVHJhbXBvbGluZSxwYXJzZUV4dGVuc2lvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3RyYW1wb2xpbmVcIiwgW1tcInN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKHN5bmNUcmFtcG9saW5lID0gJGjNj19hKV1dLFtcImFzeW5jVHJhbXBvbGluZVwiLCBbJGjNj19hID0+IChhc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2V4dGVuc2lvbi5qc1wiLCBbW1wicGFyc2VFeHRlbnNpb25cIiwgWyRozY9fYSA9PiAocGFyc2VFeHRlbnNpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxrZXlzLGhhc093blByb3BlcnR5LHZhbHVlc309T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaGFzPShvYmplY3Qsa2V5KT0+YXBwbHkoaGFzT3duUHJvcGVydHksb2JqZWN0LFtrZXldKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBleHRlbnNpb25JbXBsaWVzTGFuZ3VhZ2U9KGV4dGVuc2lvbik9PmV4dGVuc2lvbiE9PSdqcyc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRXh0ZW5zaW9uUGFyc2VyPShcbnByZWZlclN5bmNocm9ub3VzLFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRyYW5zZm9ybXM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24qZ2V0UGFyc2VyR2VuZXJhdG9yKFxuYnl0ZXMsXG5zcGVjaWZpZXIsXG5sb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbm9wdGlvbnMpXG57XG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBsYW5ndWFnZTtcbmNvbnN0IGV4dGVuc2lvbj1wYXJzZUV4dGVuc2lvbihsb2NhdGlvbik7XG5cbmlmKFxuIWV4dGVuc2lvbkltcGxpZXNMYW5ndWFnZShleHRlbnNpb24pJiZcbmhhcyhsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixzcGVjaWZpZXIpKVxue1xubGFuZ3VhZ2U9bGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXJbc3BlY2lmaWVyXTtcbiB9ZWxzZXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xubGFuZ3VhZ2U9bGFuZ3VhZ2VGb3JFeHRlbnNpb25bZXh0ZW5zaW9uXXx8ZXh0ZW5zaW9uO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHNvdXJjZU1hcDtcblxuaWYoaGFzKHRyYW5zZm9ybXMsbGFuZ3VhZ2UpKXtcbnRyeXtcbih7XG5ieXRlcyxcbnBhcnNlcjpsYW5ndWFnZSxcbnNvdXJjZU1hcH09XG55aWVsZCB0cmFuc2Zvcm1zW2xhbmd1YWdlXShcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG57XG4vL1xuLy9cbi8vXG5zb3VyY2VNYXB9KSk7XG5cblxuIH1jYXRjaChlcnIpe1xudGhyb3cgRXJyb3IoXG4gYEVycm9yIHRyYW5zZm9ybWluZyAke3EobGFuZ3VhZ2UpfSBzb3VyY2UgaW4gJHtxKGxvY2F0aW9uKX06ICR7ZXJyLm1lc3NhZ2V9YCxcbntjYXVzZTplcnJ9KTtcblxuIH1cbiB9XG5pZighaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHBhcnNlIG1vZHVsZSAke3NwZWNpZmllcn0gYXQgJHtsb2NhdGlvbn0sIG5vIHBhcnNlciBjb25maWd1cmVkIGZvciB0aGUgbGFuZ3VhZ2UgJHtsYW5ndWFnZX1gKTtcblxuIH1cbmNvbnN0e3BhcnNlfT1wYXJzZXJGb3JMYW5ndWFnZVtsYW5ndWFnZV07XG5yZXR1cm4gcGFyc2UoYnl0ZXMsc3BlY2lmaWVyLGxvY2F0aW9uLHBhY2thZ2VMb2NhdGlvbix7XG5zb3VyY2VNYXAsXG4uLi5vcHRpb25zfSk7XG5cbiB9XG5cbi8qXG5cbiAgICovXG5jb25zdCBzeW5jUGFyc2VyPShieXRlcyxzcGVjaWZpZXIsbG9jYXRpb24scGFja2FnZUxvY2F0aW9uLG9wdGlvbnMpPT57XG5jb25zdCByZXN1bHQ9c3luY1RyYW1wb2xpbmUoXG5nZXRQYXJzZXJHZW5lcmF0b3IsXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk7XG5cbmlmKCd0aGVuJ2luIHJlc3VsdCYmdHlwZW9mIHJlc3VsdC50aGVuPT09J2Z1bmN0aW9uJyl7XG50aHJvdyBuZXcgVHlwZUVycm9yKFxuJ1N5bmMgcGFyc2VyIGNhbm5vdCByZXR1cm4gYSBUaGVuYWJsZTsgZW5zdXJlIHBhcnNlciBpcyBhY3R1YWxseSBzeW5jaHJvbm91cycpO1xuXG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuc3luY1BhcnNlci5pc1N5bmNQYXJzZXI9dHJ1ZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGFzeW5jUGFyc2VyPWFzeW5jKFxuYnl0ZXMsXG5zcGVjaWZpZXIsXG5sb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbm9wdGlvbnMpPT5cbntcbnJldHVybiBhc3luY1RyYW1wb2xpbmUoXG5nZXRQYXJzZXJHZW5lcmF0b3IsXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG5pZihwcmVmZXJTeW5jaHJvbm91cyl7XG50cmFuc2Zvcm1zPXN5bmNNb2R1bGVUcmFuc2Zvcm1zO1xucmV0dXJuIHN5bmNQYXJzZXI7XG4gfWVsc2V7XG4vL1xuLy9cbnRyYW5zZm9ybXM9e1xuLi4uc3luY01vZHVsZVRyYW5zZm9ybXMsXG4uLi5tb2R1bGVUcmFuc2Zvcm1zfTtcblxuXG5yZXR1cm4gYXN5bmNQYXJzZXI7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBtYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3Jtcz17fSxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zPXt9LFxucHJlZmVyU3luY2hyb25vdXM9ZmFsc2UpXG57XG5jb25zdCBsYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXM9W107XG5jb25zdCBwcm9ibGVtcz1bXTtcbmZvcihjb25zdFtleHRlbnNpb24sbGFuZ3VhZ2Vdb2YgZW50cmllcyhsYW5ndWFnZUZvckV4dGVuc2lvbikpe1xuaWYoaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG5sYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXMucHVzaChbZXh0ZW5zaW9uLGxhbmd1YWdlXSk7XG4gfWVsc2V7XG5wcm9ibGVtcy5wdXNoKCBgJHtxKGxhbmd1YWdlKX0gZm9yIGV4dGVuc2lvbiAke3EoZXh0ZW5zaW9uKX1gKTtcbiB9XG4gfVxuaWYocHJvYmxlbXMubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoIGBObyBwYXJzZXIgYXZhaWxhYmxlIGZvciBsYW5ndWFnZTogJHtwcm9ibGVtcy5qb2luKCcsICcpfWApO1xuIH1cbnJldHVybiBtYWtlRXh0ZW5zaW9uUGFyc2VyKFxucHJlZmVyU3luY2hyb25vdXMsXG5mcm9tRW50cmllcyhsYW5ndWFnZUZvckV4dGVuc2lvbkVudHJpZXMpLFxubGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsXG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwUGFyc2Vycz0oe1xucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXN9KT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgYXN5bmNQYXJzZUZuPShsYW5ndWFnZUZvckV4dGVuc2lvbixsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcik9PlxubWFwUGFyc2Vycyhcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uLFxubGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIsXG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtcyk7XG5cblxuaWYobW9kdWxlVHJhbnNmb3JtcyYma2V5cyhtb2R1bGVUcmFuc2Zvcm1zKS5sZW5ndGg+MCl7XG5yZXR1cm4gYXN5bmNQYXJzZUZuO1xuIH1cblxuLy9cbi8vXG5pZih2YWx1ZXMocGFyc2VyRm9yTGFuZ3VhZ2UpLnNvbWUoKHtzeW5jaHJvbm91c30pPT4hc3luY2hyb25vdXMpKXtcbnJldHVybiBhc3luY1BhcnNlRm47XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xucmV0dXJuKGxhbmd1YWdlRm9yRXh0ZW5zaW9uLGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyKT0+XG5tYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zLFxudHJ1ZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFwUGFyc2VycyhtYWtlTWFwUGFyc2Vycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwUGFyc2VycyI6WyJtYWtlTWFwUGFyc2VycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAqS87kdQoAAHUKAAA8AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJqb2luIiwicmVsYXRpdml6ZSIsInJlc29sdmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG4gKi9cblxuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzb2x2ZT0oc29sdXRpb24scHJvYmxlbSk9PntcbmZvcihjb25zdCBwYXJ0IG9mIHByb2JsZW0pe1xuaWYocGFydD09PScuJ3x8cGFydD09PScnKXtcbi8vXG4gfWVsc2UgaWYocGFydD09PScuLicpe1xuaWYoc29sdXRpb24ubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuc29sdXRpb24ucG9wKCk7XG4gfWVsc2V7XG5zb2x1dGlvbi5wdXNoKHBhcnQpO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZXNvbHZlPShzcGVjLHJlZmVycmVyKT0+e1xuc3BlYz1TdHJpbmcoc3BlY3x8JycpO1xucmVmZXJyZXI9U3RyaW5nKHJlZmVycmVyfHwnJyk7XG5cbmlmKHNwZWMuc3RhcnRzV2l0aCgnLycpKXtcbnRocm93IEVycm9yKCBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IGJlZ2luIHdpdGggXCIvXCJgKTtcbiB9XG5pZighcmVmZXJyZXIuc3RhcnRzV2l0aCgnLi8nKSl7XG50aHJvdyBFcnJvciggYE1vZHVsZSByZWZlcnJlciAke3EocmVmZXJyZXIpfSBtdXN0IGJlZ2luIHdpdGggXCIuL1wiYCk7XG4gfVxuXG5jb25zdCBzcGVjUGFydHM9c3BlYy5zcGxpdCgnLycpO1xuY29uc3Qgc29sdXRpb249W107XG5jb25zdCBwcm9ibGVtPVtdO1xuaWYoc3BlY1BhcnRzWzBdPT09Jy4nfHxzcGVjUGFydHNbMF09PT0nLi4nKXtcbmNvbnN0IHJlZmVycmVyUGFydHM9cmVmZXJyZXIuc3BsaXQoJy8nKTtcbnByb2JsZW0ucHVzaCguLi5yZWZlcnJlclBhcnRzKTtcbnByb2JsZW0ucG9wKCk7XG5zb2x1dGlvbi5wdXNoKCcuJyk7XG4gfVxucHJvYmxlbS5wdXNoKC4uLnNwZWNQYXJ0cyk7XG5cbmlmKCFzb2x2ZShzb2x1dGlvbixwcm9ibGVtKSl7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IHZpYSByZWZlcnJlciAke3EoXG5yZWZlcnJlcilcbiB9IG11c3Qgbm90IHRyYXZlcnNlIGJlaGluZCBhbiBlbXB0eSBwYXRoYCk7XG5cbiB9XG5cbnJldHVybiBzb2x1dGlvbi5qb2luKCcvJyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UucmVzb2x2ZShyZXNvbHZlKTtcbmNvbnN0ICAgICAgICBqb2luPShiYXNlLHNwZWMpPT57XG5zcGVjPVN0cmluZyhzcGVjfHwnJyk7XG5iYXNlPVN0cmluZyhiYXNlfHwnJyk7XG5cbmNvbnN0IHNwZWNQYXJ0cz1zcGVjLnNwbGl0KCcvJyk7XG5jb25zdCBiYXNlUGFydHM9YmFzZS5zcGxpdCgnLycpO1xuXG5pZihzcGVjUGFydHMubGVuZ3RoPjEmJnNwZWNQYXJ0c1swXT09PScnKXtcbnRocm93IEVycm9yKCBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IHN0YXJ0IHdpdGggXCIvXCJgKTtcbiB9XG5pZihiYXNlUGFydHNbMF09PT0nLid8fGJhc2VQYXJ0c1swXT09PScuLicpe1xudGhyb3cgRXJyb3IoIGBFeHRlcm5hbCBtb2R1bGUgc3BlY2lmaWVyICR7cShiYXNlKX0gbXVzdCBiZSBhYnNvbHV0ZWApO1xuIH1cbmlmKHNwZWNQYXJ0c1swXSE9PScuJyl7XG50aHJvdyBFcnJvciggYEludGVybmFsIG1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSBtdXN0IGJlIHJlbGF0aXZlYCk7XG4gfVxuXG5jb25zdCBzb2x1dGlvbj1bXTtcbmlmKCFzb2x2ZShzb2x1dGlvbixzcGVjUGFydHMpKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gdmlhIGJhc2UgJHtxKFxuYmFzZSlcbiB9IG11c3Qgbm90IHJlZmVyIHRvIGEgbW9kdWxlIG91dHNpZGUgb2YgdGhlIGJhc2VgKTtcblxuIH1cblxucmV0dXJuW2Jhc2UsLi4uc29sdXRpb25dLmpvaW4oJy8nKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmpvaW4oam9pbik7XG5jb25zdCAgICAgICAgcmVsYXRpdml6ZT0oc3BlYyk9PntcbnNwZWM9U3RyaW5nKHNwZWN8fCcnKTtcblxuY29uc3Qgc29sdXRpb249W107XG5pZighc29sdmUoc29sdXRpb24sc3BlYy5zcGxpdCgnLycpKSl7XG50aHJvdyBFcnJvcihcbiBgTW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3Qgbm90IHRyYXZlcnNlIGJlaGluZCBhbiBlbXB0eSBwYXRoYCk7XG5cbiB9XG5cbnJldHVyblsnLicsLi4uc29sdXRpb25dLmpvaW4oJy8nKTtcbiB9OyRozY9fb25jZS5yZWxhdGl2aXplKHJlbGF0aXZpemUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVzb2x2ZSI6WyJyZXNvbHZlIl0sImpvaW4iOlsiam9pbiJdLCJyZWxhdGl2aXplIjpbInJlbGF0aXZpemUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAT0y9IeAEAADgBAAAMgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLWJ5dGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VCeXRlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZUJ5dGVzPShieXRlcyxfc3BlY2lmaWVyLF9sb2NhdGlvbixfcGFja2FnZUxvY2F0aW9uKT0+e1xuLy9cbmNvbnN0IGJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIoYnl0ZXMubGVuZ3RoKTtcbmNvbnN0IGJ5dGVzVmlldz1uZXcgVWludDhBcnJheShidWZmZXIpO1xuYnl0ZXNWaWV3LnNldChieXRlcyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9YnVmZmVyO1xuIH07XG5cbnJldHVybntcbnBhcnNlcjonYnl0ZXMnLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VCeXRlcyhwYXJzZUJ5dGVzKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZUJ5dGVzLFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlQnl0ZXMiOlsicGFyc2VCeXRlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADdEsKIyBAAAMgQAABGAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtY2pzLXNoYXJlZC1leHBvcnQtd3JhcHBlci5qc3siaW1wb3J0cyI6WyIuL3Bvd2Vycy5qcyJdLCJleHBvcnRzIjpbImdldE1vZHVsZVBhdGhzIiwid3JhcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyxpc1JlYWROb3dQb3dlcnM7JGjNj19pbXBvcnRzKFtbXCIuL3Bvd2Vycy5qc1wiLCBbW1wiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHNcIiwgWyRozY9fYSA9PiAoZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMgPSAkaM2PX2EpXV0sW1wiaXNSZWFkTm93UG93ZXJzXCIsIFskaM2PX2EgPT4gKGlzUmVhZE5vd1Bvd2VycyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcbmNvbnN0e2ZyZWV6ZSxrZXlzLGNyZWF0ZSxoYXNPd25Qcm9wZXJ0eSxkZWZpbmVQcm9wZXJ0eX09T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBoYXM9KG9iamVjdCxrZXkpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxvYmplY3QsW2tleV0pO1xuXG4vKlxuXG4gKi9cbmNvbnN0IG5vVHJhaWxpbmdTbGFzaD0ocGF0aCk9PntcbmNvbnN0IGw9cGF0aC5sZW5ndGgtMTtcbnJldHVybiBwYXRoW2xdPT09J1xcXFwnfHxwYXRoW2xdPT09Jy8nP3BhdGguc2xpY2UoMCwtMSk6cGF0aDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNb2R1bGVQYXRocz0ocmVhZFBvd2Vycyxsb2NhdGlvbik9PntcbmlmKFxucmVhZFBvd2VycyYmXG50eXBlb2YgcmVhZFBvd2VycyE9PSdmdW5jdGlvbicmJlxucmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKVxue1xubGV0IGZpbGVuYW1lPWxvY2F0aW9uO1xubGV0IGRpcm5hbWU7XG50cnl7XG5kaXJuYW1lPW5ldyBVUkwoJy4vJyxmaWxlbmFtZSkuaHJlZjtcbiB9Y2F0Y2goXyl7XG5yZXR1cm57XG5maWxlbmFtZTpudWxsLFxuZGlybmFtZTpudWxsfTtcblxuIH1cblxuZmlsZW5hbWU9cmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKGZpbGVuYW1lKS50b1N0cmluZygpO1xuZGlybmFtZT1ub1RyYWlsaW5nU2xhc2gocmVhZFBvd2Vycy5maWxlVVJMVG9QYXRoKGRpcm5hbWUpLnRvU3RyaW5nKCkpO1xuXG5yZXR1cm57XG5maWxlbmFtZSxcbmRpcm5hbWV9O1xuXG4gfWVsc2V7XG5yZXR1cm57XG5maWxlbmFtZTpudWxsLFxuZGlybmFtZTpudWxsfTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmdldE1vZHVsZVBhdGhzKGdldE1vZHVsZVBhdGhzKTtcbmNvbnN0ICAgICAgICB3cmFwPSh7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZCxcbmNvbXBhcnRtZW50LFxucmVzb2x2ZWRJbXBvcnRzLFxubG9jYXRpb24sXG5yZWFkUG93ZXJzfSk9Plxue1xuLy9cbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHQ9Y3JlYXRlKFxuY29tcGFydG1lbnQuZ2xvYmFsVGhpcy5PYmplY3QucHJvdG90eXBlKTtcblxuXG4vL1xuLy9cbmNvbnN0IHByb21vdGVUb05hbWVkRXhwb3J0PShwcm9wLHZhbHVlKT0+e1xuLy9cbmlmKHByb3AhPT0nZGVmYXVsdCcpe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmRbcHJvcF09dmFsdWU7XG4gfVxuIH07XG5cbmNvbnN0IHJlZGVmaW5lZD1uZXcgU2V0KCk7XG5cbmNvbnN0IG9yaWdpbmFsRXhwb3J0cz1uZXcgUHJveHkobW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdCx7XG5zZXQoX3RhcmdldCxwcm9wLHZhbHVlKXtcbnByb21vdGVUb05hbWVkRXhwb3J0KHByb3AsdmFsdWUpO1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdFtwcm9wXT12YWx1ZTtcbnJldHVybiB0cnVlO1xuIH0sXG5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQscHJvcCxkZXNjcmlwdG9yKXtcbmlmKGhhcyhkZXNjcmlwdG9yLCd2YWx1ZScpKXtcbi8vXG4vL1xucHJvbW90ZVRvTmFtZWRFeHBvcnQocHJvcCxkZXNjcmlwdG9yLnZhbHVlKTtcbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlZmluZVByb3BlcnR5KHRhcmdldCxwcm9wLGRlc2NyaXB0b3IpO1xuLy9cbi8vXG5yZWRlZmluZWQuYWRkKHByb3ApO1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbmxldCBmaW5hbEV4cG9ydHM9b3JpZ2luYWxFeHBvcnRzO1xuXG5jb25zdCBtb2R1bGU9ZnJlZXplKHtcbmdldCBleHBvcnRzKCl7XG5yZXR1cm4gZmluYWxFeHBvcnRzO1xuIH0sXG5zZXQgZXhwb3J0cyh2YWx1ZSl7XG5maW5hbEV4cG9ydHM9dmFsdWU7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlPShpbXBvcnRTcGVjaWZpZXIpPT57XG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBuYW1lc3BhY2U7XG5cbmlmKCFoYXMocmVzb2x2ZWRJbXBvcnRzLGltcG9ydFNwZWNpZmllcikpe1xuaWYoaXNSZWFkTm93UG93ZXJzKHJlYWRQb3dlcnMpKXtcbm5hbWVzcGFjZT1jb21wYXJ0bWVudC5pbXBvcnROb3coaW1wb3J0U3BlY2lmaWVyKTtcbiB9ZWxzZXtcbmNvbnN0IGludmFsaWRQcm9wcz1maW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyhyZWFkUG93ZXJzKS5zb3J0KCk7XG50aHJvdyBuZXcgRXJyb3IoXG4gYFN5bmNocm9ub3VzIHJlYWRQb3dlcnMgcmVxdWlyZWQgZm9yIGR5bmFtaWMgaW1wb3J0IG9mICR7YXNzZXJ0LnF1b3RlKGltcG9ydFNwZWNpZmllcil9OyBtaXNzaW5nIG9yIGludmFsaWQgcHJvcChzKTogJHtpbnZhbGlkUHJvcHMuam9pbignLCAnKX1gKTtcblxuIH1cbiB9ZWxzZXtcbm5hbWVzcGFjZT1jb21wYXJ0bWVudC5pbXBvcnROb3cocmVzb2x2ZWRJbXBvcnRzW2ltcG9ydFNwZWNpZmllcl0pO1xuIH1cblxuLy9cbi8vXG5pZihoYXMobmFtZXNwYWNlLCdkZWZhdWx0Jykpe1xucmV0dXJuIG5hbWVzcGFjZS5kZWZhdWx0O1xuIH1lbHNle1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9XG4gfTtcbmlmKHR5cGVvZiByZWFkUG93ZXJzPT09J29iamVjdCcmJnJlYWRQb3dlcnMucmVxdWlyZVJlc29sdmUpe1xuY29uc3R7cmVxdWlyZVJlc29sdmV9PXJlYWRQb3dlcnM7XG5yZXF1aXJlLnJlc29sdmU9ZnJlZXplKChzcGVjaWZpZXIsb3B0aW9ucyk9PlxucmVxdWlyZVJlc29sdmUobG9jYXRpb24sc3BlY2lmaWVyLG9wdGlvbnMpKTtcblxuIH1lbHNle1xucmVxdWlyZS5yZXNvbHZlPWZyZWV6ZSgoc3BlY2lmaWVyKT0+e1xuY29uc3QgZXJyb3I9RXJyb3IoXG4gYENhbm5vdCBmaW5kIG1vZHVsZSAnJHtzcGVjaWZpZXJ9J1xcbkFkZCByZXF1aXJlUmVzb2x2ZSB0byBFbmRvIENvbXBhcnRtZW50IE1hcHBlciByZWFkUG93ZXJzLmApO1xuXG5kZWZpbmVQcm9wZXJ0eShlcnJvciwnY29kZScse3ZhbHVlOidNT0RVTEVfTk9UX0ZPVU5EJ30pO1xudGhyb3cgZXJyb3I7XG4gfSk7XG4gfVxuXG5mcmVlemUocmVxdWlyZSk7XG5cbmNvbnN0IGFmdGVyRXhlY3V0ZT0oKT0+e1xuY29uc3QgZXhwb3J0c0hhdmVCZWVuT3ZlcndyaXR0ZW49ZmluYWxFeHBvcnRzIT09b3JpZ2luYWxFeHBvcnRzO1xuLy9cbi8vXG4vL1xuaWYoZXhwb3J0c0hhdmVCZWVuT3ZlcndyaXR0ZW4pe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdD1maW5hbEV4cG9ydHM7XG5mb3IoY29uc3QgcHJvcCBvZiBrZXlzKG1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHR8fHt9KSl7XG5pZihwcm9wIT09J2RlZmF1bHQnKXtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkW3Byb3BdPW1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHRbcHJvcF07XG4gfVxuIH1cbiB9ZWxzZXtcbmZvcihjb25zdCBwcm9wIG9mIHJlZGVmaW5lZCl7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZFtwcm9wXT1tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0W3Byb3BdO1xuIH1cbiB9XG4gfTtcblxucmV0dXJue1xubW9kdWxlLFxubW9kdWxlRXhwb3J0czpvcmlnaW5hbEV4cG9ydHMsXG5hZnRlckV4ZWN1dGUsXG5yZXF1aXJlfTtcblxuIH07JGjNj19vbmNlLndyYXAod3JhcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNb2R1bGVQYXRocyI6WyJnZXRNb2R1bGVQYXRocyJdLCJ3cmFwIjpbIndyYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA92/PPtwEAADcBAAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLWpzb24uanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlSnNvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXJzZUxvY2F0ZWRKc29uOyRozY9faW1wb3J0cyhbW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VKc29uPShieXRlcyxfc3BlY2lmaWVyLGxvY2F0aW9uLF9wYWNrYWdlTG9jYXRpb24pPT57XG5jb25zdCBzb3VyY2U9dGV4dERlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9cGFyc2VMb2NhdGVkSnNvbihzb3VyY2UsbG9jYXRpb24pO1xuIH07XG5yZXR1cm57XG5wYXJzZXI6J2pzb24nLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VKc29uKHBhcnNlSnNvbik7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VKc29uLFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlSnNvbiI6WyJwYXJzZUpzb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtcxvGCsHAAArBwAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLXByZS1janMuanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIiwiLi9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlUHJlQ2pzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlTG9jYXRlZEpzb24sd3JhcCxnZXRNb2R1bGVQYXRoczskaM2PX2ltcG9ydHMoW1tcIi4vanNvbi5qc1wiLCBbW1wicGFyc2VMb2NhdGVkSnNvblwiLCBbJGjNj19hID0+IChwYXJzZUxvY2F0ZWRKc29uID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzXCIsIFtbXCJ3cmFwXCIsIFskaM2PX2EgPT4gKHdyYXAgPSAkaM2PX2EpXV0sW1wiZ2V0TW9kdWxlUGF0aHNcIiwgWyRozY9fYSA9PiAoZ2V0TW9kdWxlUGF0aHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZVByZUNqcz0oXG5ieXRlcyxcbl9zcGVjaWZpZXIsXG5sb2NhdGlvbixcbl9wYWNrYWdlTG9jYXRpb24sXG57cmVhZFBvd2Vyc309e30pPT5cbntcbmNvbnN0IHRleHQ9dGV4dERlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbmNvbnN0e3NvdXJjZSxpbXBvcnRzLGV4cG9ydHMscmVleHBvcnRzfT1wYXJzZUxvY2F0ZWRKc29uKFxudGV4dCxcbmxvY2F0aW9uKTtcblxuXG5jb25zdHtmaWxlbmFtZSxkaXJuYW1lfT1nZXRNb2R1bGVQYXRocyhyZWFkUG93ZXJzLGxvY2F0aW9uKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBleGVjdXRlPShtb2R1bGVFbnZpcm9ubWVudFJlY29yZCxjb21wYXJ0bWVudCxyZXNvbHZlZEltcG9ydHMpPT57XG5jb25zdCBmdW5jdG9yPWNvbXBhcnRtZW50LmV2YWx1YXRlKHNvdXJjZSk7XG5cbmNvbnN0e3JlcXVpcmUsbW9kdWxlRXhwb3J0cyxtb2R1bGUsYWZ0ZXJFeGVjdXRlfT13cmFwKHtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLFxuY29tcGFydG1lbnQsXG5yZXNvbHZlZEltcG9ydHMsXG5sb2NhdGlvbixcbnJlYWRQb3dlcnN9KTtcblxuXG4vL1xuZnVuY3Rvci5jYWxsKFxubW9kdWxlRXhwb3J0cyxcbnJlcXVpcmUsXG5tb2R1bGVFeHBvcnRzLFxubW9kdWxlLFxuZmlsZW5hbWUsXG5kaXJuYW1lKTtcblxuXG5hZnRlckV4ZWN1dGUoKTtcbiB9O1xuXG5yZXR1cm57XG5wYXJzZXI6J3ByZS1janMtanNvbicsXG5ieXRlcyxcbnJlY29yZDp7XG5pbXBvcnRzLFxucmVleHBvcnRzLFxuZXhwb3J0cyxcbmV4ZWN1dGV9fTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VQcmVDanMocGFyc2VQcmVDanMpO1xuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0OntcbnBhcnNlOnBhcnNlUHJlQ2pzLFxuaGV1cmlzdGljSW1wb3J0czp0cnVlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VQcmVDanMiOlsicGFyc2VQcmVDanMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6VsSGO4EAADuBAAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLXByZS1tanMuanN7ImltcG9ydHMiOlsiLi9qc29uLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlUHJlTWpzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlTG9jYXRlZEpzb247JGjNj19pbXBvcnRzKFtbXCIuL2pzb24uanNcIiwgW1tcInBhcnNlTG9jYXRlZEpzb25cIiwgWyRozY9fYSA9PiAocGFyc2VMb2NhdGVkSnNvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VQcmVNanM9KFxuYnl0ZXMsXG5fc3BlY2lmaWVyLFxubG9jYXRpb24sXG5fcGFja2FnZUxvY2F0aW9uLFxue3NvdXJjZU1hcFVybH09e30pPT5cbntcbmNvbnN0IHRleHQ9dGV4dERlY29kZXIuZGVjb2RlKGJ5dGVzKTtcbmNvbnN0IHJlY29yZD1wYXJzZUxvY2F0ZWRKc29uKHRleHQsbG9jYXRpb24pO1xuaWYoc291cmNlTWFwVXJsKXtcbi8vXG5yZWNvcmQuX19zeW5jTW9kdWxlUHJvZ3JhbV9fKz0gYC8vIyBzb3VyY2VNYXBwaW5nVVJMPSR7c291cmNlTWFwVXJsfVxcbmA7XG4gfWVsc2V7XG4vL1xucmVjb3JkLl9fc3luY01vZHVsZVByb2dyYW1fXys9IGAvLyMgc291cmNlVVJMPSR7bG9jYXRpb259XFxuYDtcbiB9XG5yZXR1cm57XG5wYXJzZXI6J3ByZS1tanMtanNvbicsXG5ieXRlcyxcbnJlY29yZH07XG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZVByZU1qcyhwYXJzZVByZU1qcyk7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VQcmVNanMsXG5oZXVyaXN0aWNJbXBvcnRzOmZhbHNlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VQcmVNanMiOlsicGFyc2VQcmVNanMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuTwRNJIEAACSBAAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLXRleHQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImRlZmF1bHQiLCJwYXJzZVRleHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZnJlZXplPU9iamVjdC5mcmVlemU7XG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgcGFyc2VUZXh0PShieXRlcyxfc3BlY2lmaWVyLF9sb2NhdGlvbixfcGFja2FnZUxvY2F0aW9uKT0+e1xuY29uc3QgdGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbXBvcnRzPWZyZWV6ZShbXSk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBleGVjdXRlPShleHBvcnRzKT0+e1xuZXhwb3J0cy5kZWZhdWx0PXRleHQ7XG4gfTtcblxucmV0dXJue1xucGFyc2VyOid0ZXh0JyxcbmJ5dGVzLFxucmVjb3JkOmZyZWV6ZSh7XG5pbXBvcnRzLFxuZXhwb3J0czpmcmVlemUoWydkZWZhdWx0J10pLFxuZXhlY3V0ZTpmcmVlemUoZXhlY3V0ZSl9KX07XG5cblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnBhcnNlVGV4dChwYXJzZVRleHQpO1xuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0OntcbnBhcnNlOnBhcnNlVGV4dCxcbmhldXJpc3RpY0ltcG9ydHM6ZmFsc2UsXG5zeW5jaHJvbm91czp0cnVlfX07JGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJwYXJzZVRleHQiOlsicGFyc2VUZXh0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJvA0jcuFgAALhYAADQAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wb2xpY3ktZm9ybWF0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhc3NlcnRQYWNrYWdlUG9saWN5IiwiYXNzZXJ0UG9saWN5IiwiZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uIiwiaXNBbGxvd2luZ0V2ZXJ5dGhpbmciLCJpc0F0dGVudWF0aW9uRGVmaW5pdGlvbiIsInBvbGljeUxvb2t1cEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtlbnRyaWVzLGtleXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgQVRURU5VQVRPUl9LRVk9J2F0dGVudWF0ZSc7XG5jb25zdCBBVFRFTlVBVE9SX1BBUkFNU19LRVk9J3BhcmFtcyc7XG5jb25zdCBXSUxEQ0FSRF9QT0xJQ1lfVkFMVUU9J2FueSc7XG5jb25zdCBQT0xJQ1lfRklFTERTX0xPT0tVUD0vKiAgICAgICAgICAgICAgICAqL1tcbididWlsdGlucycsXG4nZ2xvYmFscycsXG4ncGFja2FnZXMnXTtcblxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBvbGljeUxvb2t1cEhlbHBlcj0ocGFja2FnZVBvbGljeSxmaWVsZCxpdGVtTmFtZSk9PntcbmlmKCFQT0xJQ1lfRklFTERTX0xPT0tVUC5pbmNsdWRlcyhmaWVsZCkpe1xudGhyb3cgRXJyb3IoIGBJbnZhbGlkIGZpZWxkICR7cShmaWVsZCl9YCk7XG4gfVxuaWYoXG50eXBlb2YgcGFja2FnZVBvbGljeSE9PSdvYmplY3QnfHxcbnBhY2thZ2VQb2xpY3k9PT1udWxsfHxcbiFwYWNrYWdlUG9saWN5W2ZpZWxkXSlcbntcbnJldHVybiBmYWxzZTtcbiB9XG5cbmlmKHBhY2thZ2VQb2xpY3lbZmllbGRdPT09V0lMRENBUkRfUE9MSUNZX1ZBTFVFKXtcbnJldHVybiB0cnVlO1xuIH1cblxuY29uc3QgdmFsdWU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYWNrYWdlUG9saWN5W2ZpZWxkXTtcblxuaWYoaXRlbU5hbWUgaW4gdmFsdWUpe1xucmV0dXJuIHZhbHVlW2l0ZW1OYW1lXTtcbiB9XG5yZXR1cm4gZmFsc2U7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnBvbGljeUxvb2t1cEhlbHBlcihwb2xpY3lMb29rdXBIZWxwZXIpO1xuY29uc3QgICAgICAgIGlzQWxsb3dpbmdFdmVyeXRoaW5nPShwb2xpY3lWYWx1ZSk9PlxucG9saWN5VmFsdWU9PT1XSUxEQ0FSRF9QT0xJQ1lfVkFMVUU7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuaXNBbGxvd2luZ0V2ZXJ5dGhpbmcoaXNBbGxvd2luZ0V2ZXJ5dGhpbmcpO1xuY29uc3QgICAgICAgIGlzQXR0ZW51YXRpb25EZWZpbml0aW9uPShhbGxlZ2VkRGVmaW5pdGlvbik9PntcbnJldHVybiBCb29sZWFuKFxuYWxsZWdlZERlZmluaXRpb24mJlxudHlwZW9mIGFsbGVnZWREZWZpbml0aW9uPT09J29iamVjdCcmJlxudHlwZW9mIGFsbGVnZWREZWZpbml0aW9uW0FUVEVOVUFUT1JfS0VZXT09PSdzdHJpbmcnfHwvL1xuaXNBcnJheShhbGxlZ2VkRGVmaW5pdGlvbikvL1xuKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmlzQXR0ZW51YXRpb25EZWZpbml0aW9uKGlzQXR0ZW51YXRpb25EZWZpbml0aW9uKTtcbmNvbnN0ICAgICAgICBnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb249KGF0dGVudWF0aW9uRGVmaW5pdGlvbik9PntcbmlmKCFpc0F0dGVudWF0aW9uRGVmaW5pdGlvbihhdHRlbnVhdGlvbkRlZmluaXRpb24pKXtcbnRocm93IEVycm9yKFxuIGBJbnZhbGlkIGF0dGVudWF0aW9uICR7cShcbmF0dGVudWF0aW9uRGVmaW5pdGlvbilcbiB9LCBtdXN0IGJlIGFuIGFycmF5IG9mIHBhcmFtcyBmb3IgZGVmYXVsdCBhdHRlbnVhdG9yIG9yIGFuIG9iamVjdCB3aXRoIGFuIGF0dGVudWF0b3Iga2V5YCk7XG5cbiB9XG5pZihpc0FycmF5KGF0dGVudWF0aW9uRGVmaW5pdGlvbikpe1xucmV0dXJue1xuZGlzcGxheU5hbWU6JzxkZWZhdWx0IGF0dGVudWF0b3I+JyxcbnNwZWNpZmllcjpudWxsLFxucGFyYW1zOmF0dGVudWF0aW9uRGVmaW5pdGlvbn07XG5cbiB9ZWxzZXtcbnJldHVybntcbmRpc3BsYXlOYW1lOmF0dGVudWF0aW9uRGVmaW5pdGlvbltBVFRFTlVBVE9SX0tFWV0sXG5zcGVjaWZpZXI6YXR0ZW51YXRpb25EZWZpbml0aW9uW0FUVEVOVUFUT1JfS0VZXSxcbnBhcmFtczphdHRlbnVhdGlvbkRlZmluaXRpb25bQVRURU5VQVRPUl9QQVJBTVNfS0VZXX07XG5cbiB9XG4gfTtcblxuLy9cbiRozY9fb25jZS5nZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24oZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKTtjb25zdCBpc1JlY29yZE9mPShpdGVtLHByZWRpY2F0ZSk9PntcbmlmKHR5cGVvZiBpdGVtIT09J29iamVjdCd8fGl0ZW09PT1udWxsfHxpc0FycmF5KGl0ZW0pKXtcbnJldHVybiBmYWxzZTtcbiB9XG5yZXR1cm4gZW50cmllcyhpdGVtKS5ldmVyeSgoW2tleSx2YWx1ZV0pPT5wcmVkaWNhdGUodmFsdWUsa2V5KSk7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNCb29sZWFuPShpdGVtKT0+dHlwZW9mIGl0ZW09PT0nYm9vbGVhbic7XG5cbi8vXG5jb25zdCBwcmVkaWNhdGVPcj1cbiguLi5wcmVkaWNhdGVzKT0+XG4oaXRlbSk9PlxucHJlZGljYXRlcy5zb21lKChwKT0+cChpdGVtKSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBpc1BvbGljeUl0ZW09KGl0ZW0pPT5cbml0ZW09PT11bmRlZmluZWR8fFxuaXRlbT09PVdJTERDQVJEX1BPTElDWV9WQUxVRXx8XG5pc1JlY29yZE9mKGl0ZW0saXNCb29sZWFuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYWNrYWdlUG9saWN5PShhbGxlZ2VkUGFja2FnZVBvbGljeSxwYXRoLHVybCk9PntcbmlmKGFsbGVnZWRQYWNrYWdlUG9saWN5PT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCBpblVybD11cmw/IGAgaW4gJHtxKHVybCl9YDonJztcblxuY29uc3QgcGFja2FnZVBvbGljeT1PYmplY3QoYWxsZWdlZFBhY2thZ2VQb2xpY3kpO1xuYXNzZXJ0KFxuYWxsZWdlZFBhY2thZ2VQb2xpY3k9PT1wYWNrYWdlUG9saWN5JiYhaXNBcnJheShhbGxlZ2VkUGFja2FnZVBvbGljeSksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZFBhY2thZ2VQb2xpY3kpfSR7aW5Vcmx9YCk7XG5cbmNvbnN0e1xucGFja2FnZXMsXG5idWlsdGlucyxcbmdsb2JhbHMsXG5ub0dsb2JhbEZyZWV6ZSxcbmRlZmF1bHRBdHRlbnVhdG9yOl9pZ25vcmUsLy9cbi8vXG5vcHRpb25zLC8vXG4uLi5leHRyYX09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3BhY2thZ2VQb2xpY3k7XG5cbmFzc2VydChcbmtleXMoZXh0cmEpLmxlbmd0aD09PTAsXG4gYCR7cGF0aH0gbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKGtleXMoZXh0cmEpKX0ke2luVXJsfWApO1xuXG5cbmFzc2VydChcbm5vR2xvYmFsRnJlZXplPT09dW5kZWZpbmVkfHx0eXBlb2Ygbm9HbG9iYWxGcmVlemU9PT0nYm9vbGVhbicsXG4gYCR7cGF0aH0ubm9HbG9iYWxGcmVlemUgbXVzdCBiZSBhIGJvb2xlYW4sIGdvdCAke3Eoe1xubm9HbG9iYWxGcmVlemV9KVxuIH0ke2luVXJsfWApO1xuXG5cbmlzUG9saWN5SXRlbShwYWNrYWdlcyl8fFxuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0ucGFja2FnZXMgbXVzdCBiZSBhIHJlY29yZCBvZiBib29sZWFucywgZ290ICR7cSh7XG5wYWNrYWdlc30pXG4gfSR7aW5Vcmx9YCk7XG5cblxuaXNQb2xpY3lJdGVtKGdsb2JhbHMpfHxcbmlzQXR0ZW51YXRpb25EZWZpbml0aW9uKGdsb2JhbHMpfHxcbmFzc2VydC5mYWlsKFxuIGAke3BhdGh9Lmdsb2JhbHMgbXVzdCBiZSBhIHJlY29yZCBvZiBib29sZWFucyBvciBhIHNpbmdsZSBhdHRlbnVhdGlvbiwgZ290ICR7cShcbntcbmdsb2JhbHN9KVxuXG4gfSR7aW5Vcmx9YCk7XG5cblxuaXNQb2xpY3lJdGVtKGJ1aWx0aW5zKXx8XG5pc1JlY29yZE9mKGJ1aWx0aW5zLHByZWRpY2F0ZU9yKGlzQm9vbGVhbixpc0F0dGVudWF0aW9uRGVmaW5pdGlvbikpfHxcbmFzc2VydC5mYWlsKFxuIGAke3BhdGh9LmJ1aWx0aW5zIG11c3QgYmUgYSByZWNvcmQgb2YgYm9vbGVhbnMgb3IgYXR0ZW51YXRpb25zLCBnb3QgJHtxKHtcbmJ1aWx0aW5zfSlcbiB9JHtpblVybH1gKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0UGFja2FnZVBvbGljeShhc3NlcnRQYWNrYWdlUG9saWN5KTtcbmNvbnN0ICAgICAgICBhc3NlcnRQb2xpY3k9KGFsbGVnZWRQb2xpY3kpPT57XG5pZihhbGxlZ2VkUG9saWN5PT09dW5kZWZpbmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCBwb2xpY3k9T2JqZWN0KGFsbGVnZWRQb2xpY3kpO1xuYXNzZXJ0KFxuYWxsZWdlZFBvbGljeT09PXBvbGljeSYmIUFycmF5LmlzQXJyYXkocG9saWN5KSxcbiBgcG9saWN5IG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkUG9saWN5fWApO1xuXG5cbmNvbnN0e3Jlc291cmNlcyxlbnRyeSxkZWZhdWx0QXR0ZW51YXRvciwuLi5leHRyYX09cG9saWN5O1xuYXNzZXJ0KFxua2V5cyhleHRyYSkubGVuZ3RoPT09MCxcbiBgcG9saWN5IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShrZXlzKGV4dHJhKSl9YCk7XG5cblxuYXNzZXJ0KFxudHlwZW9mIHJlc291cmNlcz09PSdvYmplY3QnJiZyZXNvdXJjZXMhPT1udWxsJiYhaXNBcnJheShyZXNvdXJjZXMpLFxuIGBwb2xpY3kucmVzb3VyY2VzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHtxKHJlc291cmNlcyl9YCk7XG5cbmFzc2VydChcbiFkZWZhdWx0QXR0ZW51YXRvcnx8dHlwZW9mIGRlZmF1bHRBdHRlbnVhdG9yPT09J3N0cmluZycsXG4gYHBvbGljeS5kZWZhdWx0QXR0ZW51YXRvciBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGRlZmF1bHRBdHRlbnVhdG9yKX1gKTtcblxuXG5hc3NlcnRQYWNrYWdlUG9saWN5KGVudHJ5LCBgcG9saWN5LmVudHJ5YCk7XG5cbmZvcihjb25zdFtrZXksdmFsdWVdb2YgZW50cmllcyhyZXNvdXJjZXMpKXtcbmFzc2VydFBhY2thZ2VQb2xpY3kodmFsdWUsIGBwb2xpY3kucmVzb3VyY2VzW1wiJHtrZXl9XCJdYCk7XG4gfVxuIH07JGjNj19vbmNlLmFzc2VydFBvbGljeShhc3NlcnRQb2xpY3kpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicG9saWN5TG9va3VwSGVscGVyIjpbInBvbGljeUxvb2t1cEhlbHBlciJdLCJpc0FsbG93aW5nRXZlcnl0aGluZyI6WyJpc0FsbG93aW5nRXZlcnl0aGluZyJdLCJpc0F0dGVudWF0aW9uRGVmaW5pdGlvbiI6WyJpc0F0dGVudWF0aW9uRGVmaW5pdGlvbiJdLCJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24iOlsiZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uIl0sImFzc2VydFBhY2thZ2VQb2xpY3kiOlsiYXNzZXJ0UGFja2FnZVBvbGljeSJdLCJhc3NlcnRQb2xpY3kiOlsiYXNzZXJ0UG9saWN5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAE3wXPAZJQAAGSUAAC0AAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wb2xpY3kuanN7ImltcG9ydHMiOlsiLi9wb2xpY3ktZm9ybWF0LmpzIl0sImV4cG9ydHMiOlsiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQiLCJhdHRlbnVhdGVHbG9iYWxzIiwiYXR0ZW51YXRlTW9kdWxlSG9vayIsImRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3kiLCJkZXRlY3RBdHRlbnVhdG9ycyIsImVuZm9yY2VNb2R1bGVQb2xpY3kiLCJnZXRQb2xpY3lGb3JQYWNrYWdlIiwibWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24saXNBbGxvd2luZ0V2ZXJ5dGhpbmcsaXNBdHRlbnVhdGlvbkRlZmluaXRpb24scG9saWN5TG9va3VwSGVscGVyOyRozY9faW1wb3J0cyhbW1wiLi9wb2xpY3ktZm9ybWF0LmpzXCIsIFtbXCJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb25cIiwgWyRozY9fYSA9PiAoZ2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uID0gJGjNj19hKV1dLFtcImlzQWxsb3dpbmdFdmVyeXRoaW5nXCIsIFskaM2PX2EgPT4gKGlzQWxsb3dpbmdFdmVyeXRoaW5nID0gJGjNj19hKV1dLFtcImlzQXR0ZW51YXRpb25EZWZpbml0aW9uXCIsIFskaM2PX2EgPT4gKGlzQXR0ZW51YXRpb25EZWZpbml0aW9uID0gJGjNj19hKV1dLFtcInBvbGljeUxvb2t1cEhlbHBlclwiLCBbJGjNj19hID0+IChwb2xpY3lMb29rdXBIZWxwZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxlbnRyaWVzLHZhbHVlcyxhc3NpZ24sZnJlZXplLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UPSc8QVRURU5VQVRPUlM+JztcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQoQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQpO1xuY29uc3Qgc2VsZWN0aXZlQ29weT0oZnJvbSx0byxsaXN0KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwcm9wcztcbmlmKCFsaXN0KXtcbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZnJvbSk7XG5wcm9wcz1vd25LZXlzKGZyb20pLmZpbHRlcigoa2V5KT0+ZGVzY3Nba2V5XS5lbnVtZXJhYmxlKTtcbiB9ZWxzZXtcbnByb3BzPWxpc3Q7XG4gfVxuZm9yKGxldCBpbmRleD0wO2luZGV4PHByb3BzLmxlbmd0aDtpbmRleCs9MSl7XG5jb25zdCBrZXk9cHJvcHNbaW5kZXhdO1xuLy9cbi8vXG50b1trZXldPWZyb21ba2V5XTtcbiB9XG5yZXR1cm4gdG87XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbGxlY3RBdHRlbnVhdG9ycz0oYXR0ZW51YXRvcnMscG9saWN5RnJhZ21lbnQpPT57XG5pZignYXR0ZW51YXRlJ2luIHBvbGljeUZyYWdtZW50KXtcbmF0dGVudWF0b3JzLnB1c2gocG9saWN5RnJhZ21lbnQuYXR0ZW51YXRlKTtcbiB9XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKHBvbGljeUZyYWdtZW50KSl7XG5pZih0eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmdmFsdWUhPT1udWxsKXtcbmNvbGxlY3RBdHRlbnVhdG9ycyhhdHRlbnVhdG9ycyx2YWx1ZSk7XG4gfVxuIH1cbiB9O1xuXG5jb25zdCBhdHRlbnVhdG9yc0NhY2hlPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGV0ZWN0QXR0ZW51YXRvcnM9KHBvbGljeSk9PntcbmlmKCFwb2xpY3kpe1xucmV0dXJuW107XG4gfVxuaWYoIWF0dGVudWF0b3JzQ2FjaGUuaGFzKHBvbGljeSkpe1xuY29uc3QgYXR0ZW51YXRvcnM9W107XG5pZihwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3Ipe1xuYXR0ZW51YXRvcnMucHVzaChwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3IpO1xuIH1cbmNvbGxlY3RBdHRlbnVhdG9ycyhhdHRlbnVhdG9ycyxwb2xpY3kpO1xuYXR0ZW51YXRvcnNDYWNoZS5zZXQocG9saWN5LGF0dGVudWF0b3JzKTtcbiB9XG5yZXR1cm4gYXR0ZW51YXRvcnNDYWNoZS5nZXQocG9saWN5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGV0ZWN0QXR0ZW51YXRvcnMoZGV0ZWN0QXR0ZW51YXRvcnMpO1xuY29uc3QgZ2VuZXJhdGVDYW5vbmljYWxOYW1lPSh7aXNFbnRyeT1mYWxzZSxuYW1lLHBhdGh9KT0+e1xuaWYoaXNFbnRyeSl7XG50aHJvdyBFcnJvcignRW50cnkgbW9kdWxlIGNhbm5vdCBiZSBpZGVudGlmaWVkIHdpdGggYSBjYW5vbmljYWxOYW1lJyk7XG4gfVxuaWYobmFtZT09PUFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UKXtcbnJldHVybiBBVFRFTlVBVE9SU19DT01QQVJUTUVOVDtcbiB9XG5yZXR1cm4gcGF0aC5qb2luKCc+Jyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3k9KG5hbWluZ0tpdCxwYWNrYWdlUG9saWN5KT0+e1xuaWYobmFtaW5nS2l0LmlzRW50cnkpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjYW5vbmljYWxOYW1lPWdlbmVyYXRlQ2Fub25pY2FsTmFtZShuYW1pbmdLaXQpO1xucmV0dXJuISFwb2xpY3lMb29rdXBIZWxwZXIocGFja2FnZVBvbGljeSwncGFja2FnZXMnLGNhbm9uaWNhbE5hbWUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeShkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5KTtcbmNvbnN0ICAgICAgICBnZXRQb2xpY3lGb3JQYWNrYWdlPShuYW1pbmdLaXQscG9saWN5KT0+e1xuaWYoIXBvbGljeSl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmlmKG5hbWluZ0tpdC5pc0VudHJ5KXtcbnJldHVybiBwb2xpY3kuZW50cnk7XG4gfVxuY29uc3QgY2Fub25pY2FsTmFtZT1nZW5lcmF0ZUNhbm9uaWNhbE5hbWUobmFtaW5nS2l0KTtcbmlmKGNhbm9uaWNhbE5hbWU9PT1BVFRFTlVBVE9SU19DT01QQVJUTUVOVCl7XG5yZXR1cm57XG5kZWZhdWx0QXR0ZW51YXRvcjpwb2xpY3kuZGVmYXVsdEF0dGVudWF0b3IsXG5wYWNrYWdlczonYW55J307XG5cbiB9XG5pZihwb2xpY3kucmVzb3VyY2VzJiZwb2xpY3kucmVzb3VyY2VzW2Nhbm9uaWNhbE5hbWVdIT09dW5kZWZpbmVkKXtcbnJldHVybiBwb2xpY3kucmVzb3VyY2VzW2Nhbm9uaWNhbE5hbWVdO1xuIH1lbHNle1xuLy9cbnJldHVybiBjcmVhdGUobnVsbCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0UG9saWN5Rm9yUGFja2FnZShnZXRQb2xpY3lGb3JQYWNrYWdlKTtcbmNvbnN0IGdldEdsb2JhbHNMaXN0PShwYWNrYWdlUG9saWN5KT0+e1xuaWYoIXBhY2thZ2VQb2xpY3l8fCFwYWNrYWdlUG9saWN5Lmdsb2JhbHMpe1xucmV0dXJuW107XG4gfVxucmV0dXJuIGVudHJpZXMocGFja2FnZVBvbGljeS5nbG9iYWxzKS5cbmZpbHRlcigoW19rZXksdmFsdWVdKT0+dmFsdWUpLlxubWFwKChba2V5LF92dmFsdWVdKT0+a2V5KTtcbiB9O1xuXG5jb25zdCBHTE9CQUxfQVRURU5VQVRPUj0nYXR0ZW51YXRlR2xvYmFscyc7XG5jb25zdCBNT0RVTEVfQVRURU5VQVRPUj0nYXR0ZW51YXRlTW9kdWxlJztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGltcG9ydEF0dGVudWF0b3JGb3JEZWZpbml0aW9uPWFzeW5jKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuYXR0ZW51YXRvcnNQcm92aWRlcixcbmF0dGVudWF0b3JFeHBvcnROYW1lKT0+XG57XG5pZighYXR0ZW51YXRvcnNQcm92aWRlcil7XG50aHJvdyBFcnJvciggYGF0dGVudWF0b3JzUHJvdmlkZXIgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IGF0dGVudWF0b3JzYCk7XG4gfVxuY29uc3R7c3BlY2lmaWVyLHBhcmFtcyxkaXNwbGF5TmFtZX09Z2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uKTtcblxuY29uc3QgYXR0ZW51YXRvcj1hd2FpdCBhdHRlbnVhdG9yc1Byb3ZpZGVyLmltcG9ydChzcGVjaWZpZXIpO1xuaWYoIWF0dGVudWF0b3JbYXR0ZW51YXRvckV4cG9ydE5hbWVdKXtcbnRocm93IEVycm9yKFxuIGBBdHRlbnVhdG9yICR7cShkaXNwbGF5TmFtZSl9IGRvZXMgbm90IGV4cG9ydCAke3EoYXR0ZW51YXRvckV4cG9ydE5hbWUpfWApO1xuXG4gfVxuLy9cbmNvbnN0IGF0dGVudWF0ZT1hdHRlbnVhdG9yW2F0dGVudWF0b3JFeHBvcnROYW1lXS5iaW5kKGF0dGVudWF0b3IscGFyYW1zKTtcbnJldHVybiBhdHRlbnVhdGU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcj0oXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzKT0+XG57XG5sZXQgaW1wb3J0QXR0ZW51YXRvcjtcbmxldCBkZWZhdWx0QXR0ZW51YXRvcjtcbi8vXG4vL1xuaWYoIWNvbXBhcnRtZW50RGVzY3JpcHRvcnNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdKXtcbmltcG9ydEF0dGVudWF0b3I9YXN5bmMoKT0+e1xudGhyb3cgRXJyb3IoIGBObyBhdHRlbnVhdG9ycyBzcGVjaWZpZWQgaW4gcG9saWN5YCk7XG4gfTtcbiB9ZWxzZXtcbmRlZmF1bHRBdHRlbnVhdG9yPVxuY29tcGFydG1lbnREZXNjcmlwdG9yc1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF0ucG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yO1xuXG4vL1xuLy9cbi8vXG4vKlxuXG5cblxuICAgICAqL1xuaW1wb3J0QXR0ZW51YXRvcj1hc3luYyhhdHRlbnVhdG9yU3BlY2lmaWVyKT0+e1xuaWYoIWF0dGVudWF0b3JTcGVjaWZpZXIpe1xuaWYoIWRlZmF1bHRBdHRlbnVhdG9yKXtcbnRocm93IEVycm9yKCBgTm8gZGVmYXVsdCBhdHRlbnVhdG9yIHNwZWNpZmllZCBpbiBwb2xpY3lgKTtcbiB9XG5hdHRlbnVhdG9yU3BlY2lmaWVyPWRlZmF1bHRBdHRlbnVhdG9yO1xuIH1cbmNvbnN0e25hbWVzcGFjZX09XG5hd2FpdCBjb21wYXJ0bWVudHNbQVRURU5VQVRPUlNfQ09NUEFSVE1FTlRdLmltcG9ydChhdHRlbnVhdG9yU3BlY2lmaWVyKTtcbnJldHVybiBuYW1lc3BhY2U7XG4gfTtcbiB9XG5cbnJldHVybntcbmltcG9ydDppbXBvcnRBdHRlbnVhdG9yfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyKG1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIpO1xuYXN5bmMgZnVuY3Rpb24gYXR0ZW51YXRlR2xvYmFsVGhpcyh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmdsb2JhbFRoaXMsXG5nbG9iYWxzfSlcbntcbmNvbnN0IGF0dGVudWF0ZT1hd2FpdCBpbXBvcnRBdHRlbnVhdG9yRm9yRGVmaW5pdGlvbihcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmF0dGVudWF0b3JzLFxuR0xPQkFMX0FUVEVOVUFUT1IpO1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG5cbmNvbnN0IHJlc3VsdD0vKiAgICAgICAqL2F0dGVudWF0ZShnbG9iYWxzLGdsb2JhbFRoaXMpO1xuaWYodHlwZW9mIHJlc3VsdD09PSdvYmplY3QnJiZyZXN1bHQhPT1udWxsKXtcbmFzc2lnbihnbG9iYWxUaGlzLHJlc3VsdCk7XG4gfVxuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGF0dGVudWF0ZUdsb2JhbHM9KFxuZ2xvYmFsVGhpcyxcbmdsb2JhbHMsXG5wYWNrYWdlUG9saWN5LFxuYXR0ZW51YXRvcnMsXG5wZW5kaW5nSm9icyxcbm5hbWU9Jzx1bmtub3duPicpPT5cbntcbmxldCBmcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQ9KCk9PntcbmZyZWV6ZShnbG9iYWxUaGlzKTtcbiB9O1xuaWYocGFja2FnZVBvbGljeSYmcGFja2FnZVBvbGljeS5ub0dsb2JhbEZyZWV6ZSl7XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQ9KCk9PnsgfTtcbiB9XG5pZighcGFja2FnZVBvbGljeXx8aXNBbGxvd2luZ0V2ZXJ5dGhpbmcocGFja2FnZVBvbGljeS5nbG9iYWxzKSl7XG5zZWxlY3RpdmVDb3B5KGdsb2JhbHMsZ2xvYmFsVGhpcyk7XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQoKTtcbnJldHVybjtcbiB9XG5pZihpc0F0dGVudWF0aW9uRGVmaW5pdGlvbihwYWNrYWdlUG9saWN5Lmdsb2JhbHMpKXtcbmNvbnN0IGF0dGVudWF0aW9uRGVmaW5pdGlvbj1wYWNrYWdlUG9saWN5Lmdsb2JhbHM7XG5jb25zdHtkaXNwbGF5TmFtZX09Z2V0QXR0ZW51YXRvckZyb21EZWZpbml0aW9uKGF0dGVudWF0aW9uRGVmaW5pdGlvbik7XG5jb25zdCBhdHRlbnVhdGlvblByb21pc2U9UHJvbWlzZS5yZXNvbHZlKCkvL1xuLnRoZW4oKCk9PlxuYXR0ZW51YXRlR2xvYmFsVGhpcyh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbixcbmdsb2JhbFRoaXMsXG5nbG9iYWxzfSkpLlxuXG5cbnRoZW4oZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0LChlcnJvcik9PntcbmZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dCgpO1xudGhyb3cgRXJyb3IoXG4gYEVycm9yIHdoaWxlIGF0dGVudWF0aW5nIGdsb2JhbHMgZm9yICR7cShuYW1lKX0gd2l0aCAke3EoXG5kaXNwbGF5TmFtZSlcbiB9OiAke3EoZXJyb3IubWVzc2FnZSl9YC8vXG4pO1xuIH0pO1xucGVuZGluZ0pvYnMucHVzaChhdHRlbnVhdGlvblByb21pc2UpO1xuXG5yZXR1cm47XG4gfVxuY29uc3QgbGlzdD1nZXRHbG9iYWxzTGlzdChwYWNrYWdlUG9saWN5KTtcbnNlbGVjdGl2ZUNvcHkoZ2xvYmFscyxnbG9iYWxUaGlzLGxpc3QpO1xuZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0KCk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuYXR0ZW51YXRlR2xvYmFscyhhdHRlbnVhdGVHbG9iYWxzKTtcbmNvbnN0IGRpYWdub3NlTW9kdWxlUG9saWN5PShlcnJvckhpbnQpPT57XG5pZighZXJyb3JIaW50KXtcbnJldHVybicnO1xuIH1cbnJldHVybiBgIChpbmZvOiAke2Vycm9ySGludH0pYDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBlbmZvcmNlTW9kdWxlUG9saWN5PShcbnNwZWNpZmllcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbntleGl0LGVycm9ySGludH09e30pPT5cbntcbmNvbnN0e3BvbGljeSxtb2R1bGVzLGxhYmVsfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5pZighcG9saWN5KXtcbnJldHVybjtcbiB9XG5cbmlmKCFleGl0KXtcbmlmKCFtb2R1bGVzW3NwZWNpZmllcl0pe1xudGhyb3cgRXJyb3IoXG4gYEltcG9ydGluZyAke3Eoc3BlY2lmaWVyKX0gaW4gJHtxKFxubGFiZWwpXG4gfSB3YXMgbm90IGFsbG93ZWQgYnkgcGFja2FnZXMgcG9saWN5ICR7cShcbnBvbGljeS5wYWNrYWdlcylcbiB9JHtkaWFnbm9zZU1vZHVsZVBvbGljeShlcnJvckhpbnQpfWApO1xuXG4gfVxucmV0dXJuO1xuIH1cblxuaWYoIXBvbGljeUxvb2t1cEhlbHBlcihwb2xpY3ksJ2J1aWx0aW5zJyxzcGVjaWZpZXIpKXtcbnRocm93IEVycm9yKFxuIGBJbXBvcnRpbmcgJHtxKHNwZWNpZmllcil9IHdhcyBub3QgYWxsb3dlZCBieSBwb2xpY3kgYnVpbHRpbnM6JHtxKFxucG9saWN5LmJ1aWx0aW5zKVxuIH0ke2RpYWdub3NlTW9kdWxlUG9saWN5KGVycm9ySGludCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5lbmZvcmNlTW9kdWxlUG9saWN5KGVuZm9yY2VNb2R1bGVQb2xpY3kpO1xuYXN5bmMgZnVuY3Rpb24gYXR0ZW51YXRlTW9kdWxlKHtcbmF0dGVudWF0b3JzLFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxub3JpZ2luYWxNb2R1bGVSZWNvcmR9KVxue1xuY29uc3QgYXR0ZW51YXRlPWF3YWl0IGltcG9ydEF0dGVudWF0b3JGb3JEZWZpbml0aW9uKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuYXR0ZW51YXRvcnMsXG5NT0RVTEVfQVRURU5VQVRPUik7XG5cblxuLy9cbi8vXG5cbnJldHVybiBmcmVlemUoe1xuaW1wb3J0czpvcmlnaW5hbE1vZHVsZVJlY29yZC5pbXBvcnRzLFxuLy9cbi8vXG5leHBvcnRzOm9yaWdpbmFsTW9kdWxlUmVjb3JkLmV4cG9ydHMsXG5leGVjdXRlOihtb2R1bGVFeHBvcnRzLGNvbXBhcnRtZW50LHJlc29sdmVkSW1wb3J0cyk9PntcbmNvbnN0IG5zPXt9O1xub3JpZ2luYWxNb2R1bGVSZWNvcmQuZXhlY3V0ZShucyxjb21wYXJ0bWVudCxyZXNvbHZlZEltcG9ydHMpO1xuY29uc3QgYXR0ZW51YXRlZD1hdHRlbnVhdGUobnMpO1xubW9kdWxlRXhwb3J0cy5kZWZhdWx0PWF0dGVudWF0ZWQ7XG5hc3NpZ24obW9kdWxlRXhwb3J0cyxhdHRlbnVhdGVkKTtcbiB9fSk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGF0dGVudWF0ZU1vZHVsZUhvb2s9YXN5bmMoXG5zcGVjaWZpZXIsXG5vcmlnaW5hbE1vZHVsZVJlY29yZCxcbnBvbGljeSxcbmF0dGVudWF0b3JzKT0+XG57XG5jb25zdCBwb2xpY3lWYWx1ZT1wb2xpY3lMb29rdXBIZWxwZXIocG9saWN5LCdidWlsdGlucycsc3BlY2lmaWVyKTtcbmlmKCFwb2xpY3l8fHBvbGljeVZhbHVlPT09dHJ1ZSl7XG5yZXR1cm4gb3JpZ2luYWxNb2R1bGVSZWNvcmQ7XG4gfVxuXG5pZighcG9saWN5VmFsdWUpe1xudGhyb3cgRXJyb3IoXG4gYEF0dGVudWF0aW9uIGZhaWxlZCAnJHtzcGVjaWZpZXJ9JyB3YXMgbm90IGluIHBvbGljeSBidWlsdGluczoke3EoXG5wb2xpY3kuYnVpbHRpbnMpXG4gfWApO1xuXG4gfVxucmV0dXJuIGF0dGVudWF0ZU1vZHVsZSh7XG5hdHRlbnVhdG9ycyxcbmF0dGVudWF0aW9uRGVmaW5pdGlvbjpwb2xpY3lWYWx1ZSxcbm9yaWdpbmFsTW9kdWxlUmVjb3JkfSk7XG5cbiB9OyRozY9fb25jZS5hdHRlbnVhdGVNb2R1bGVIb29rKGF0dGVudWF0ZU1vZHVsZUhvb2spO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQiOlsiQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQiXSwiZGV0ZWN0QXR0ZW51YXRvcnMiOlsiZGV0ZWN0QXR0ZW51YXRvcnMiXSwiZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSI6WyJkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5Il0sImdldFBvbGljeUZvclBhY2thZ2UiOlsiZ2V0UG9saWN5Rm9yUGFja2FnZSJdLCJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyIjpbIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIiXSwiYXR0ZW51YXRlR2xvYmFscyI6WyJhdHRlbnVhdGVHbG9iYWxzIl0sImVuZm9yY2VNb2R1bGVQb2xpY3kiOlsiZW5mb3JjZU1vZHVsZVBvbGljeSJdLCJhdHRlbnVhdGVNb2R1bGVIb29rIjpbImF0dGVudWF0ZU1vZHVsZUhvb2siXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATcxCbg0IAAANCAAALQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3Bvd2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMiLCJpc1JlYWROb3dQb3dlcnMiLCJ1bnBhY2tSZWFkUG93ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2Fub25pY2FsU2hpbT1hc3luYyhwYXRoKT0+cGF0aDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bnBhY2tSZWFkUG93ZXJzPShwb3dlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZWFkO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtYXliZVJlYWQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGNhbm9uaWNhbDtcblxuaWYodHlwZW9mIHBvd2Vycz09PSdmdW5jdGlvbicpe1xucmVhZD1wb3dlcnM7XG4gfWVsc2V7XG4oe3JlYWQsbWF5YmVSZWFkLGNhbm9uaWNhbH09LyogICAgICAgICAgICAgICAgICAgICAgICAgICovcG93ZXJzKTtcbiB9XG5cbmlmKGNhbm9uaWNhbD09PXVuZGVmaW5lZCl7XG5jYW5vbmljYWw9Y2Fub25pY2FsU2hpbTtcbiB9XG5cbmlmKG1heWJlUmVhZD09PXVuZGVmaW5lZCl7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1heWJlUmVhZD0ocGF0aCk9PlxuLyogICAgICAgICAgICAgICAgICovcmVhZChwYXRoKS5jYXRjaCgoX2Vycm9yKT0+dW5kZWZpbmVkKTtcbiB9XG5cbnJldHVybntcbi4uLnBvd2VycyxcbnJlYWQsXG5tYXliZVJlYWQsXG5jYW5vbmljYWx9O1xuXG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS51bnBhY2tSZWFkUG93ZXJzKHVucGFja1JlYWRQb3dlcnMpO1xuY29uc3QgcmVxdWlyZWRSZWFkTm93UG93ZXJzUHJvcHM9ZnJlZXplKFxuLyogICAgICAgICAgICAgICAgKi9bJ2ZpbGVVUkxUb1BhdGgnLCdpc0Fic29sdXRlJywnbWF5YmVSZWFkTm93J10pO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUmVhZE5vd1Bvd2Vycz0odmFsdWUpPT5cbkJvb2xlYW4oXG52YWx1ZSYmXG50eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmXG5yZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wcy5ldmVyeShcbihwcm9wKT0+cHJvcCBpbiB2YWx1ZSYmdHlwZW9mIHZhbHVlW3Byb3BdPT09J2Z1bmN0aW9uJykpO1xuXG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzUmVhZE5vd1Bvd2Vycyhpc1JlYWROb3dQb3dlcnMpO1xuY29uc3QgICAgICAgIGZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzPSh2YWx1ZSk9PntcbmlmKCF2YWx1ZXx8dHlwZW9mIHZhbHVlPT09J2Z1bmN0aW9uJyl7XG5yZXR1cm5bLi4ucmVxdWlyZWRSZWFkTm93UG93ZXJzUHJvcHNdO1xuIH1cbnJldHVybiByZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wcy5maWx0ZXIoXG4ocHJvcCk9PiEocHJvcCBpbiB2YWx1ZSl8fHR5cGVvZiB2YWx1ZVtwcm9wXSE9PSdmdW5jdGlvbicpO1xuXG4gfTskaM2PX29uY2UuZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMoZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidW5wYWNrUmVhZFBvd2VycyI6WyJ1bnBhY2tSZWFkUG93ZXJzIl0sImlzUmVhZE5vd1Bvd2VycyI6WyJpc1JlYWROb3dQb3dlcnMiXSwiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMiOlsiZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAANQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3R5cGVzLWV4dGVybmFsLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGOc6lAEAAJQBAAAhAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2Vudi1vcHRpb25zLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvc3JjL2Vudi1vcHRpb25zLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIiwiZ2V0RW52aXJvbm1lbnRPcHRpb24iLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IiwibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLy9cbi8vXG5jb25zdCB1bmN1cnJ5VGhpcz1cbihmbik9PlxuKHJlY2VpdmVyLC4uLmFyZ3MpPT5cbmFwcGx5KGZuLHJlY2VpdmVyLGFyZ3MpO1xuY29uc3QgYXJyYXlQdXNoPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5SW5jbHVkZXM9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbmNvbnN0IHN0cmluZ1NwbGl0PXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUuc3BsaXQpO1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBGYWlsPShsaXRlcmFscywuLi5hcmdzKT0+e1xubGV0IG1zZz1saXRlcmFsc1swXTtcbmZvcihsZXQgaT0wO2k8YXJncy5sZW5ndGg7aSs9MSl7XG5tc2c9IGAke21zZ30ke2FyZ3NbaV19JHtsaXRlcmFsc1tpKzFdfWA7XG4gfVxudGhyb3cgRXJyb3IobXNnKTtcbiB9O1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVudmlyb25tZW50Q2FwdG9yPShhR2xvYmFsLGRyb3BOYW1lcz1mYWxzZSk9PntcbmNvbnN0IGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz1bXTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb249KFxub3B0aW9uTmFtZSxcbmRlZmF1bHRTZXR0aW5nLFxub3B0T3RoZXJWYWx1ZXM9dW5kZWZpbmVkKT0+XG57XG50eXBlb2Ygb3B0aW9uTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lICR7cShvcHRpb25OYW1lKX0gbXVzdCBiZSBhIHN0cmluZy5gO1xudHlwZW9mIGRlZmF1bHRTZXR0aW5nPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIGRlZmF1bHQgc2V0dGluZyAke3EoXG5kZWZhdWx0U2V0dGluZylcbiB9IG11c3QgYmUgYSBzdHJpbmcuYDtcblxuLyogICAgICAgICAgICAgICAgICovXG5sZXQgc2V0dGluZz1kZWZhdWx0U2V0dGluZztcbmNvbnN0IGdsb2JhbFByb2Nlc3M9YUdsb2JhbC5wcm9jZXNzfHx1bmRlZmluZWQ7XG5jb25zdCBnbG9iYWxFbnY9XG50eXBlb2YgZ2xvYmFsUHJvY2Vzcz09PSdvYmplY3QnJiZnbG9iYWxQcm9jZXNzLmVudnx8dW5kZWZpbmVkO1xuaWYodHlwZW9mIGdsb2JhbEVudj09PSdvYmplY3QnKXtcbmlmKG9wdGlvbk5hbWUgaW4gZ2xvYmFsRW52KXtcbmlmKCFkcm9wTmFtZXMpe1xuYXJyYXlQdXNoKGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyxvcHRpb25OYW1lKTtcbiB9XG5jb25zdCBvcHRpb25WYWx1ZT1nbG9iYWxFbnZbb3B0aW9uTmFtZV07XG4vL1xudHlwZW9mIG9wdGlvblZhbHVlPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWVkICR7cShcbm9wdGlvbk5hbWUpXG4gfSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUsIGdvdCAke3EoXG5vcHRpb25WYWx1ZSlcbiB9YDtcbnNldHRpbmc9b3B0aW9uVmFsdWU7XG4gfVxuIH1cbm9wdE90aGVyVmFsdWVzPT09dW5kZWZpbmVkfHxcbnNldHRpbmc9PT1kZWZhdWx0U2V0dGluZ3x8XG5hcnJheUluY2x1ZGVzKG9wdE90aGVyVmFsdWVzLHNldHRpbmcpfHxcbkZhaWwgYFVucmVjb2duaXplZCAke3Eob3B0aW9uTmFtZSl9IHZhbHVlICR7cShcbnNldHRpbmcpXG4gfS4gRXhwZWN0ZWQgb25lIG9mICR7cShbZGVmYXVsdFNldHRpbmcsLi4ub3B0T3RoZXJWYWx1ZXNdKX1gO1xucmV0dXJuIHNldHRpbmc7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbik7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Q9KG9wdGlvbk5hbWUpPT57XG5jb25zdCBvcHRpb249Z2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnJyk7XG5yZXR1cm4gZnJlZXplKG9wdGlvbj09PScnP1tdOnN0cmluZ1NwbGl0KG9wdGlvbiwnLCcpKTtcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpO1xuXG5jb25zdCBlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzPShvcHRpb25OYW1lLGVsZW1lbnQpPT5cbmFycmF5SW5jbHVkZXMoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChvcHRpb25OYW1lKSxlbGVtZW50KTtcblxuY29uc3QgZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPSgpPT57XG5yZXR1cm4gZnJlZXplKFsuLi5jYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXNdKTtcbiB9O1xuZnJlZXplKGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyk7XG5cbnJldHVybiBmcmVlemUoe1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxcbmdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc30pO1xuXG4gfTskaM2PX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTskaM2PX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD8cGkx3wcAAN8HAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuOC9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuXG5jb25zdCBnbG9iYWxBc3NlcnQ9Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmlmKGdsb2JhbEFzc2VydD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0LCBpbXBvcnQgJ3NlcycgYmVmb3JlICdAZW5kby9lcnJvcnMnYCk7XG5cbiB9XG5cbmNvbnN0IG1pc3Npbmc9LyogICAgICAgICAgICAgICAgKi9bXG4ndHlwZW9mJyxcbidlcnJvcicsXG4nZmFpbCcsXG4nZXF1YWwnLFxuJ3N0cmluZycsXG4nbm90ZScsXG4nZGV0YWlscycsXG4nRmFpbCcsXG4ncXVvdGUnLFxuLy9cbi8vXG4vL1xuLy9cbidtYWtlQXNzZXJ0J10uXG5maWx0ZXIoKG5hbWUpPT5nbG9iYWxBc3NlcnRbbmFtZV09PT11bmRlZmluZWQpO1xuaWYobWlzc2luZy5sZW5ndGg+MCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGluaXRpYWxpemUgQGVuZG8vZXJyb3JzLCBtaXNzaW5nIGdsb2JhbFRoaXMuYXNzZXJ0IG1ldGhvZHMgJHttaXNzaW5nLmpvaW4oXG4nLCAnKVxuIH1gKTtcblxuIH1cblxuLy9cbi8vXG4vL1xuY29uc3R7XG5iYXJlLFxuZGV0YWlsczpyZWRhY3RlZCxcbmVycm9yOm1ha2VFcnJvcixcbkZhaWw6dGhyb3dSZWRhY3RlZCxcbm1ha2VBc3NlcnQ6X29taXR0ZWRNYWtlQXNzZXJ0LFxubm90ZSxcbnF1b3RlLFxuLi4uYXNzZXJ0aW9uc309XG5nbG9iYWxBc3NlcnQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4kaM2PX29uY2UucmVkYWN0ZWQocmVkYWN0ZWQpOyRozY9fb25jZS5tYWtlRXJyb3IobWFrZUVycm9yKTskaM2PX29uY2UudGhyb3dSZWRhY3RlZCh0aHJvd1JlZGFjdGVkKTskaM2PX29uY2Uubm90ZShub3RlKTskaM2PX29uY2UucXVvdGUocXVvdGUpO2NvbnN0IGFzc2VydD0odmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpPT5cbmdsb2JhbEFzc2VydCh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk7JGjNj19vbmNlLmFzc2VydChhc3NlcnQpO1xuT2JqZWN0LmFzc2lnbihhc3NlcnQsYXNzZXJ0aW9ucyk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGJhcmVPclF1b3RlPWJhcmV8fHF1b3RlO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLmJhcmVPclF1b3RlKGJhcmVPclF1b3RlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlZGFjdGVkIjpbInJlZGFjdGVkIl0sIlgiOlsicmVkYWN0ZWQiXSwibWFrZUVycm9yIjpbIm1ha2VFcnJvciJdLCJ0aHJvd1JlZGFjdGVkIjpbInRocm93UmVkYWN0ZWQiXSwiRmFpbCI6WyJ0aHJvd1JlZGFjdGVkIl0sIm5vdGUiOlsibm90ZSJdLCJhbm5vdGF0ZUVycm9yIjpbIm5vdGUiXSwicXVvdGUiOlsicXVvdGUiXSwicSI6WyJxdW90ZSJdLCJhc3NlcnQiOlsiYXNzZXJ0Il0sImJhcmUiOlsiYmFyZU9yUXVvdGUiXSwiYiI6WyJiYXJlT3JRdW90ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL0UuanN7ImltcG9ydHMiOlsiLi90cmFjay10dXJucy5qcyIsIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHJhY2tUdXJucyxtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL3RyYWNrLXR1cm5zLmpzXCIsIFtbXCJ0cmFja1R1cm5zXCIsIFskaM2PX2EgPT4gKHRyYWNrVHVybnMgPSAkaM2PX2EpXV1dXSxbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWwsZXJyb3I6bWFrZUVycm9yfT1hc3NlcnQ7XG5jb25zdHthc3NpZ24sY3JlYXRlfT1PYmplY3Q7XG5cbi8qXG5cbiAqL1xuXG5jb25zdCBvblNlbmQ9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX1NFTkRfQlJFQUtQT0lOVFMnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJhc2VGcmVlemFibGVQcm94eUhhbmRsZXI9e1xuc2V0KF90YXJnZXQsX3Byb3AsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuaXNFeHRlbnNpYmxlKF90YXJnZXQpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5zZXRQcm90b3R5cGVPZihfdGFyZ2V0LF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmRlbGV0ZVByb3BlcnR5KF90YXJnZXQsX3Byb3Ape1xucmV0dXJuIGZhbHNlO1xuIH19O1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbmlmKHRoaXMhPT1yZWNlaXZlcil7XG4vL1xucmV0dXJuIEhhbmRsZWRQcm9taXNlLnJlamVjdChcbm1ha2VFcnJvcihcblggYFVuZXhwZWN0ZWQgcmVjZWl2ZXIgZm9yIFwiJHtxKHByb3BlcnR5S2V5KX1cIiBtZXRob2Qgb2YgRSgke3EoXG5yZWNpcGllbnQpXG4gfSlgKSk7XG5cblxuIH1cblxuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQscHJvcGVydHlLZXkpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2QocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnQXJyYXk9W10pPT57XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uKHJlY2lwaWVudCxhcmdBcnJheSk7XG4gfSxcbmhhczooX3RhcmdldCxfcCk9Pntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVTZW5kT25seVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG4vL1xudGhpcz09PXJlY2VpdmVyfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcmVjZWl2ZXIgZm9yIFwiJHtxKFxucHJvcGVydHlLZXkpXG4gfVwiIG1ldGhvZCBvZiBFLnNlbmRPbmx5KCR7cShyZWNpcGllbnQpfSlgO1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQscHJvcGVydHlLZXkpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZFNlbmRPbmx5KHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdzQXJyYXk9W10pPT57XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb25TZW5kT25seShyZWNpcGllbnQsYXJnc0FycmF5KTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfSxcbmhhczooX3RhcmdldCxfcCk9Pntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUVHZXRQcm94eUhhbmRsZXI9KHgsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuaGFzOihfdGFyZ2V0LF9wcm9wKT0+dHJ1ZSxcbmdldDooX3RhcmdldCxwcm9wKT0+SGFuZGxlZFByb21pc2UuZ2V0KHgscHJvcCl9KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0IG1ha2VFPShIYW5kbGVkUHJvbWlzZSk9PntcbnJldHVybiBoYXJkZW4oXG5hc3NpZ24oXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbi8vXG4oeCk9PmhhcmRlbihuZXcgUHJveHkoKCk9PnsgfSxtYWtlRVByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxue1xuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXQ6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoY3JlYXRlKG51bGwpLG1ha2VFR2V0UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbnJlc29sdmU6SGFuZGxlZFByb21pc2UucmVzb2x2ZSxcblxuLypcblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbnNlbmRPbmx5Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KCgpPT57IH0sbWFrZUVTZW5kT25seVByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG53aGVuOih4LG9uZnVsZmlsbGVkLG9ucmVqZWN0ZWQpPT5cbkhhbmRsZWRQcm9taXNlLnJlc29sdmUoeCkudGhlbihcbi4uLnRyYWNrVHVybnMoW29uZnVsZmlsbGVkLG9ucmVqZWN0ZWRdKSl9KSk7XG5cblxuXG5cbiB9O1xuXG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6bWFrZUV9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABAg46yqDAAAqgwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGdldFByb3RvdHlwZU9mLGZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcblxuY29uc3QgbnR5cGVvZj0oc3BlY2ltZW4pPT5zcGVjaW1lbj09PW51bGw/J251bGwnOnR5cGVvZiBzcGVjaW1lbjtcblxuY29uc3Qgb25EZWxpdmVyeT1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fREVMSVZFUllfQlJFQUtQT0lOVFMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlU3RyaW5naWZpZWQ9KGEsYik9PntcbmlmKHR5cGVvZiBhPT09dHlwZW9mIGIpe1xuY29uc3QgbGVmdD1TdHJpbmcoYSk7XG5jb25zdCByaWdodD1TdHJpbmcoYik7XG4vL1xucmV0dXJuIGxlZnQ8cmlnaHQ/LTE6bGVmdD5yaWdodD8xOjA7XG4gfVxuaWYodHlwZW9mIGE9PT0nc3ltYm9sJyl7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3RyaW5nJyk7XG5yZXR1cm4tMTtcbiB9XG5hc3NlcnQodHlwZW9mIGE9PT0nc3RyaW5nJyk7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3ltYm9sJyk7XG5yZXR1cm4gMTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZE5hbWVzPSh2YWwpPT57XG5sZXQgbGF5ZXI9dmFsO1xuY29uc3QgbmFtZXM9bmV3IFNldCgpOy8vXG53aGlsZShsYXllciE9PW51bGwmJmxheWVyIT09T2JqZWN0LnByb3RvdHlwZSl7XG4vL1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhsYXllcik7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25LZXlzKGRlc2NzKSl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07XG4vL1xuLy9cbiRozY9fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7ZnJlZXplKGdldE1ldGhvZE5hbWVzKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlGdW5jdGlvbj0ocmVjaXBpZW50LGFyZ3MpPT57XG50eXBlb2YgcmVjaXBpZW50PT09J2Z1bmN0aW9uJ3x8XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBpbnZva2UgdGFyZ2V0IGFzIGEgZnVuY3Rpb247IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkocmVjaXBpZW50LHVuZGVmaW5lZCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UubG9jYWxBcHBseUZ1bmN0aW9uKGxvY2FsQXBwbHlGdW5jdGlvbik7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5TWV0aG9kPShyZWNpcGllbnQsbWV0aG9kTmFtZSxhcmdzKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBsb2NhbEFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ3MpO1xuIH1cbmlmKHJlY2lwaWVudD09PXVuZGVmaW5lZHx8cmVjaXBpZW50PT09bnVsbCl7XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBkZWxpdmVyICR7cShtZXRob2ROYW1lKX0gdG8gdGFyZ2V0OyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmbj1yZWNpcGllbnRbbWV0aG9kTmFtZV07XG5pZihmbj09PXVuZGVmaW5lZCl7XG5hc3NlcnQuZmFpbChcblggYHRhcmdldCBoYXMgbm8gbWV0aG9kICR7cShtZXRob2ROYW1lKX0sIGhhcyAke3EoXG5nZXRNZXRob2ROYW1lcyhyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZ0eXBlPW50eXBlb2YoZm4pO1xudHlwZW9mIGZuPT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBpbnZva2VkIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9IGlzIG5vdCBhIGZ1bmN0aW9uOyBpdCBpcyBhICR7cShcbmZ0eXBlKVxuIH1gO1xuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxtZXRob2ROYW1lKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KGZuLHJlY2lwaWVudCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UubG9jYWxBcHBseU1ldGhvZChsb2NhbEFwcGx5TWV0aG9kKTtcblxuY29uc3QgICAgICAgIGxvY2FsR2V0PSh0LGtleSk9PnRba2V5XTskaM2PX29uY2UubG9jYWxHZXQobG9jYWxHZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwibG9jYWxBcHBseUZ1bmN0aW9uIjpbImxvY2FsQXBwbHlGdW5jdGlvbiJdLCJsb2NhbEFwcGx5TWV0aG9kIjpbImxvY2FsQXBwbHlNZXRob2QiXSwibG9jYWxHZXQiOlsibG9jYWxHZXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7cXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2hhc093bixmcmVlemUsZW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBpc0pTT05SZWNvcmQ9KHZhbCk9PlxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZ2YWwhPT1udWxsJiYhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaW1wbGlmeVRhZz0odGFnKT0+e1xuZm9yKGNvbnN0IHByZWZpeCBvZlsnQWxsZWdlZDogJywnRGVidWdOYW1lOiAnXSl7XG5pZih0YWcuc3RhcnRzV2l0aChwcmVmaXgpKXtcbnJldHVybiB0YWcuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gfVxuIH1cbnJldHVybiB0YWc7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI9KG9wdGlvbk5hbWUpPT57XG5sZXQgYnJlYWtwb2ludHM9SlNPTi5wYXJzZShnZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCdudWxsJykpO1xuXG5pZihicmVha3BvaW50cz09PW51bGwpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGJyZWFrcG9pbnRzVGFibGU7XG5cbmNvbnN0IGdldEJyZWFrcG9pbnRzPSgpPT5icmVha3BvaW50cztcbmZyZWV6ZShnZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNldEJyZWFrcG9pbnRzPShuZXdCcmVha3BvaW50cz1icmVha3BvaW50cyk9PntcbmlzSlNPTlJlY29yZChuZXdCcmVha3BvaW50cyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24gdG8gYmUgYSBKU09OIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG5ld0JyZWFrcG9pbnRzVGFibGU9e19fcHJvdG9fXzpudWxsfTtcblxuZm9yKGNvbnN0W3RhZyxtZXRob2RCUHNdb2YgZW50cmllcyhuZXdCcmVha3BvaW50cykpe1xudGFnPT09c2ltcGxpZnlUYWcodGFnKXx8XG5GYWlsIGBKdXN0IHVzZSBzaW1wbGUgdGFnICR7cShzaW1wbGlmeVRhZyh0YWcpKX0gcmF0aGVyIHRoYW4gJHtxKHRhZyl9YDtcbmlzSlNPTlJlY29yZChtZXRob2RCUHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKFxudGFnKVxuIH0gdG8gYmUgYSBKU09OIG1ldGhvZHMgYnJlYWtwb2ludHMgcmVjb3JkYDtcbmZvcihjb25zdFttZXRob2ROYW1lLGNvdW50XW9mIGVudHJpZXMobWV0aG9kQlBzKSl7XG5jb3VudD09PScqJ3x8XG50eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmXG5OdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudCkmJlxuY291bnQ+PTB8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EodGFnKX0uJHtxKFxubWV0aG9kTmFtZSlcbiB9IHRvIGJlIFwiKlwiIG9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgO1xuXG5jb25zdCBjbGFzc0JQcz1oYXNPd24obmV3QnJlYWtwb2ludHNUYWJsZSxtZXRob2ROYW1lKT9cbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV06XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdPXtcbi8vXG5fX3Byb3RvX186bnVsbH07XG5cbmNsYXNzQlBzW3RhZ109Y291bnQ7XG4gfVxuIH1cbmJyZWFrcG9pbnRzPW5ld0JyZWFrcG9pbnRzO1xuYnJlYWtwb2ludHNUYWJsZT1uZXdCcmVha3BvaW50c1RhYmxlO1xuIH07XG5mcmVlemUoc2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzaG91bGRCcmVha3BvaW50PShyZWNpcGllbnQsbWV0aG9kTmFtZSk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgY2xhc3NCUHM9YnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXXx8YnJlYWtwb2ludHNUYWJsZVsnKiddO1xuaWYoY2xhc3NCUHM9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmxldCB0YWc9c2ltcGxpZnlUYWcocmVjaXBpZW50W1N5bWJvbC50b1N0cmluZ1RhZ10pO1xubGV0IGNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG50YWc9JyonO1xuY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuaWYoY291bnQ9PT0nKicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY291bnQ9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydCh0eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmY291bnQ+PTEpO1xuY2xhc3NCUHNbdGFnXT1jb3VudC0xO1xucmV0dXJuIGZhbHNlO1xuIH07XG5mcmVlemUoc2hvdWxkQnJlYWtwb2ludCk7XG5cbmNvbnN0IGJyZWFrcG9pbnRUZXN0ZXI9ZnJlZXplKHtcbmdldEJyZWFrcG9pbnRzLFxuc2V0QnJlYWtwb2ludHMsXG5zaG91bGRCcmVha3BvaW50fSk7XG5cbmJyZWFrcG9pbnRUZXN0ZXIuc2V0QnJlYWtwb2ludHMoKTtcbnJldHVybiBicmVha3BvaW50VGVzdGVyO1xuIH07JGjNj19vbmNlLm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcihtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xuZnJlZXplKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiOlsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbm8tc2hpbS5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL2V4cG9ydHMuanMiXSwiZXhwb3J0cyI6WyJFIiwiSGFuZGxlZFByb21pc2UiXSwicmVleHBvcnRzIjpbIi4vZXhwb3J0cy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlRTskaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChtYWtlRSA9ICRozY9fYSldXV1dLFtcIi4vZXhwb3J0cy5qc1wiLCBbXV1dKTsgICBcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGhwPUhhbmRsZWRQcm9taXNlOyRozY9fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjNj19vbmNlLkUoRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJIYW5kbGVkUHJvbWlzZSI6WyJocCJdLCJFIjpbIkUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy90cmFjay10dXJucy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbInRyYWNrVHVybnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXSxbXCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzXCIsIFskaM2PX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmxldCBoaWRkZW5QcmlvckVycm9yO1xubGV0IGhpZGRlbkN1cnJlbnRUdXJuPTA7XG5sZXQgaGlkZGVuQ3VycmVudEV2ZW50PTA7XG5cbi8vXG5jb25zdCBWRVJCT1NFPWVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMoJ0RFQlVHJywndHJhY2stdHVybnMnKTtcblxuLy9cbi8vXG5jb25zdCBFTkFCTEVEPVxuZ2V0RW52aXJvbm1lbnRPcHRpb24oJ1RSQUNLX1RVUk5TJywnZGlzYWJsZWQnLFsnZW5hYmxlZCddKT09PSdlbmFibGVkJztcblxuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgYWRkUmVqZWN0aW9uTm90ZT0oZGV0YWlsc05vdGUpPT4ocmVhc29uKT0+e1xuaWYocmVhc29uIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShyZWFzb24sZGV0YWlsc05vdGUpO1xuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1JFSkVDVEVEIGF0IHRvcCBvZiBldmVudCBsb29wJyxyZWFzb24pO1xuIH1cbiB9O1xuXG5jb25zdCB3cmFwRnVuY3Rpb249XG4oZnVuYyxzZW5kaW5nRXJyb3IsWCk9PlxuKC4uLmFyZ3MpPT57XG5oaWRkZW5QcmlvckVycm9yPXNlbmRpbmdFcnJvcjtcbmhpZGRlbkN1cnJlbnRUdXJuKz0xO1xuaGlkZGVuQ3VycmVudEV2ZW50PTA7XG50cnl7XG5sZXQgcmVzdWx0O1xudHJ5e1xucmVzdWx0PWZ1bmMoLi4uYXJncyk7XG4gfWNhdGNoKGVycil7XG5pZihlcnIgaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKFxuZXJyLFxuWCBgVGhyb3duIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdUSFJPV04gdG8gdG9wIG9mIGV2ZW50IGxvb3AnLGVycik7XG4gfVxudGhyb3cgZXJyO1xuIH1cbi8vXG5jb25zdCBkZXRhaWxzTm90ZT1YIGBSZWplY3Rpb24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gO1xuUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkuY2F0Y2goYWRkUmVqZWN0aW9uTm90ZShkZXRhaWxzTm90ZSkpO1xucmV0dXJuIHJlc3VsdDtcbiB9ZmluYWxseXtcbmhpZGRlblByaW9yRXJyb3I9dW5kZWZpbmVkO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0cmFja1R1cm5zPShmdW5jcyk9PntcbmlmKCFFTkFCTEVEfHx0eXBlb2YgZ2xvYmFsVGhpcz09PSd1bmRlZmluZWQnfHwhZ2xvYmFsVGhpcy5hc3NlcnQpe1xucmV0dXJuIGZ1bmNzO1xuIH1cbmNvbnN0e2RldGFpbHM6WCxub3RlOmFubm90YXRlRXJyb3J9PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5oaWRkZW5DdXJyZW50RXZlbnQrPTE7XG5jb25zdCBzZW5kaW5nRXJyb3I9RXJyb3IoXG4gYEV2ZW50OiAke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuaWYoaGlkZGVuUHJpb3JFcnJvciE9PXVuZGVmaW5lZCl7XG5hbm5vdGF0ZUVycm9yKHNlbmRpbmdFcnJvcixYIGBDYXVzZWQgYnk6ICR7aGlkZGVuUHJpb3JFcnJvcn1gKTtcbiB9XG5cbnJldHVybiAoLyogICAgICAgICAgICAqL1xuZnVuY3MubWFwKChmdW5jKT0+ZnVuYyYmd3JhcEZ1bmN0aW9uKGZ1bmMsc2VuZGluZ0Vycm9yLFgpKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UudHJhY2tUdXJucyh0cmFja1R1cm5zKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRyYWNrVHVybnMiOlsidHJhY2tUdXJucyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvdXRpbHMuanN7ImltcG9ydHMiOlsiLi9zcmMvbG9jYWwuanMiLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvbG9jYWwuanNcIiwgW11dLFtcIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9sb2NhbC5qcyI6W1siZ2V0TWV0aG9kTmFtZXMiLCJnZXRNZXRob2ROYW1lcyJdXSwiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyI6W1sibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIiwibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACxWDaYUgIAAFICAAAZAAAAQGVuZG8vZXhvLXYxLjUuNy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiLCIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIl0sImV4cG9ydHMiOltudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL2V4by1tYWtlcnMuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZXhvLW1ha2Vycy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL2dldC1pbnRlcmZhY2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjpbWyJHRVRfSU5URVJGQUNFX0dVQVJEIiwiR0VUX0lOVEVSRkFDRV9HVUFSRCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAPoHfvdcUAADXFAAAIgAAAEBlbmRvL2V4by12MS41Ljcvc3JjL2V4by1tYWtlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyIsIi4vZXhvLXRvb2xzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzc0tpdCIsImluaXRFbXB0eSIsIm1ha2VFeG8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgb2JqZWN0TWFwLGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMsRmFpbCxxLGRlZmVuZFByb3RvdHlwZSxkZWZlbmRQcm90b3R5cGVLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzXCIsIFskaM2PX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL2V4by10b29scy5qc1wiLCBbW1wiZGVmZW5kUHJvdG90eXBlXCIsIFskaM2PX2EgPT4gKGRlZmVuZFByb3RvdHlwZSA9ICRozY9fYSldXSxbXCJkZWZlbmRQcm90b3R5cGVLaXRcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3R7Y3JlYXRlLHNlYWwsZnJlZXplLGRlZmluZVByb3BlcnR5LHZhbHVlc309T2JqZWN0O1xuXG4vL1xuY29uc3QgTEFCRUxfSU5TVEFOQ0VTPWVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMoJ0RFQlVHJywnbGFiZWwtaW5zdGFuY2VzJyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVNlbGY9KHByb3RvLGluc3RhbmNlQ291bnQpPT57XG5jb25zdCBzZWxmPWNyZWF0ZShwcm90byk7XG5pZihMQUJFTF9JTlNUQU5DRVMpe1xuZGVmaW5lUHJvcGVydHkoc2VsZixTeW1ib2wudG9TdHJpbmdUYWcse1xudmFsdWU6IGAke3Byb3RvW1N5bWJvbC50b1N0cmluZ1RhZ119IyR7aW5zdGFuY2VDb3VudH1gLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSk7XG5cbiB9XG5yZXR1cm4gaGFyZGVuKHNlbGYpO1xuIH07XG5cbmNvbnN0IGVtcHR5UmVjb3JkPWhhcmRlbih7fSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGluaXRFbXB0eT0oKT0+ZW1wdHlSZWNvcmQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmluaXRFbXB0eShpbml0RW1wdHkpO1xuY29uc3QgICAgICAgIGRlZmluZUV4b0NsYXNzPShcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zPXt9KT0+XG57XG5oYXJkZW4obWV0aG9kcyk7XG5jb25zdHtcbmZpbmlzaD11bmRlZmluZWQsXG5yZWNlaXZlQW1wbGlmaWVyPXVuZGVmaW5lZCxcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcj11bmRlZmluZWR9PVxub3B0aW9ucztcbnJlY2VpdmVBbXBsaWZpZXI9PT11bmRlZmluZWR8fFxuRmFpbCBgT25seSBmYWNldHMgb2YgYW4gZXhvIGNsYXNzIGtpdCBjYW4gYmUgYW1wbGlmaWVkICR7cSh0YWcpfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dE1hcD1uZXcgV2Vha01hcCgpO1xuY29uc3QgcHJvdG89ZGVmZW5kUHJvdG90eXBlKFxudGFnLFxuKHNlbGYpPT4vKiAgICAgICAgICAgICAgKi9jb250ZXh0TWFwLmdldChzZWxmKSxcbm1ldGhvZHMsXG50cnVlLFxuaW50ZXJmYWNlR3VhcmQpO1xuXG5sZXQgaW5zdGFuY2VDb3VudD0wO1xuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbnN0YW5jZT0oLi4uYXJncyk9Pntcbi8vXG5jb25zdCBzdGF0ZT1zZWFsKGluaXQoLi4uYXJncykpO1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IHNlbGY9bWFrZVNlbGYocHJvdG8saW5zdGFuY2VDb3VudCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD1mcmVlemUoe3N0YXRlLHNlbGZ9KTtcbmNvbnRleHRNYXAuc2V0KHNlbGYsY29udGV4dCk7XG5pZihmaW5pc2gpe1xuZmluaXNoKGNvbnRleHQpO1xuIH1cbnJldHVybiBzZWxmO1xuIH07XG5cbmlmKHJlY2VpdmVJbnN0YW5jZVRlc3Rlcil7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc0luc3RhbmNlPShleG8sZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmZhY2V0TmFtZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBmYWNldE5hbWUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGFuIGV4byBjbGFzcyBraXQ6ICR7cShcbnRhZylcbiB9IGhhcyBubyBmYWNldCAke3EoZmFjZXROYW1lKX1gO1xucmV0dXJuIGNvbnRleHRNYXAuaGFzKGV4byk7XG4gfTtcbmhhcmRlbihpc0luc3RhbmNlKTtcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcihpc0luc3RhbmNlKTtcbiB9XG5cbnJldHVybiBoYXJkZW4obWFrZUluc3RhbmNlKTtcbiB9OyRozY9fb25jZS5kZWZpbmVFeG9DbGFzcyhkZWZpbmVFeG9DbGFzcyk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbm1ldGhvZHNLaXQsXG5vcHRpb25zPXt9KT0+XG57XG5oYXJkZW4obWV0aG9kc0tpdCk7XG5jb25zdHtcbmZpbmlzaD11bmRlZmluZWQsXG5yZWNlaXZlQW1wbGlmaWVyPXVuZGVmaW5lZCxcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcj11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IGNvbnRleHRNYXBLaXQ9b2JqZWN0TWFwKG1ldGhvZHNLaXQsKCk9Pm5ldyBXZWFrTWFwKCkpO1xuY29uc3QgZ2V0Q29udGV4dEtpdD1vYmplY3RNYXAoXG5jb250ZXh0TWFwS2l0LFxuKGNvbnRleHRNYXApPT4oZmFjZXQpPT5jb250ZXh0TWFwLmdldChmYWNldCkpO1xuXG5jb25zdCBwcm90b3R5cGVLaXQ9ZGVmZW5kUHJvdG90eXBlS2l0KFxudGFnLFxuZ2V0Q29udGV4dEtpdCxcbm1ldGhvZHNLaXQsXG50cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXQpO1xuXG5sZXQgaW5zdGFuY2VDb3VudD0wO1xuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbnN0YW5jZUtpdD0oLi4uYXJncyk9Pntcbi8vXG5jb25zdCBzdGF0ZT1zZWFsKGluaXQoLi4uYXJncykpO1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHQ9e3N0YXRlLGZhY2V0czpudWxsfTtcbmluc3RhbmNlQ291bnQrPTE7XG5jb25zdCBmYWNldHM9b2JqZWN0TWFwKHByb3RvdHlwZUtpdCwocHJvdG8sZmFjZXROYW1lKT0+e1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcbmNvbnRleHRNYXBLaXRbZmFjZXROYW1lXS5zZXQoc2VsZixjb250ZXh0KTtcbnJldHVybiBzZWxmO1xuIH0pO1xuY29udGV4dC5mYWNldHM9ZmFjZXRzO1xuLy9cbmZyZWV6ZShjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICovY29udGV4dC5mYWNldHMpO1xuIH07XG5cbmlmKHJlY2VpdmVBbXBsaWZpZXIpe1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW1wbGlmeT0oZXhvRmFjZXQpPT57XG5mb3IoY29uc3QgY29udGV4dE1hcCBvZiB2YWx1ZXMoY29udGV4dE1hcEtpdCkpe1xuaWYoY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKXtcbmNvbnN0e2ZhY2V0c309Y29udGV4dE1hcC5nZXQoZXhvRmFjZXQpO1xucmV0dXJuIGZhY2V0cztcbiB9XG4gfVxudGhyb3cgRmFpbCBgTXVzdCBiZSBhIGZhY2V0IG9mICR7cSh0YWcpfTogJHtleG9GYWNldH1gO1xuIH07XG5oYXJkZW4oYW1wbGlmeSk7XG5yZWNlaXZlQW1wbGlmaWVyKGFtcGxpZnkpO1xuIH1cblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4b0ZhY2V0LGZhY2V0TmFtZT11bmRlZmluZWQpPT57XG5pZihmYWNldE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHZhbHVlcyhjb250ZXh0TWFwS2l0KS5zb21lKChjb250ZXh0TWFwKT0+XG5jb250ZXh0TWFwLmhhcyhleG9GYWNldCkpO1xuXG4gfVxuYXNzZXJ0LnR5cGVvZihmYWNldE5hbWUsJ3N0cmluZycpO1xuY29uc3QgY29udGV4dE1hcD1jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV07XG5jb250ZXh0TWFwIT09dW5kZWZpbmVkfHxcbkZhaWwgYGV4byBjbGFzcyBraXQgJHtxKHRhZyl9IGhhcyBubyBmYWNldCBuYW1lZCAke3EoZmFjZXROYW1lKX1gO1xucmV0dXJuIGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2VLaXQpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzS2l0KGRlZmluZUV4b0NsYXNzS2l0KTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUV4bz0odGFnLGludGVyZmFjZUd1YXJkLG1ldGhvZHMsb3B0aW9ucz11bmRlZmluZWQpPT57XG5jb25zdCBtYWtlSW5zdGFuY2U9ZGVmaW5lRXhvQ2xhc3MoXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXRFbXB0eSxcbm1ldGhvZHMsXG5vcHRpb25zKTtcblxucmV0dXJuIG1ha2VJbnN0YW5jZSgpO1xuIH07JGjNj19vbmNlLm1ha2VFeG8obWFrZUV4byk7XG5oYXJkZW4obWFrZUV4byk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpbml0RW1wdHkiOlsiaW5pdEVtcHR5Il0sImRlZmluZUV4b0NsYXNzIjpbImRlZmluZUV4b0NsYXNzIl0sImRlZmluZUV4b0NsYXNzS2l0IjpbImRlZmluZUV4b0NsYXNzS2l0Il0sIm1ha2VFeG8iOlsibWFrZUV4byJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADO7lsG5i8AAOYvAAAhAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZmFyIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lcnJvcnMiLCIuL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6WyJkZWZlbmRQcm90b3R5cGUiLCJkZWZlbmRQcm90b3R5cGVLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMsaGFzT3duUHJvcGVydHlPZix0b1Rocm93YWJsZSxFLEZhcixtdXN0TWF0Y2gsTSxpc0F3YWl0QXJnR3VhcmQsaXNSYXdHdWFyZCxnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCxnZXRNZXRob2RHdWFyZFBheWxvYWQsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGdldENvcHlNYXBFbnRyaWVzLGxpc3REaWZmZXJlbmNlLG9iamVjdE1hcCxxLEZhaWwsR0VUX0lOVEVSRkFDRV9HVUFSRDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanNcIiwgW1tcImdldE1ldGhvZE5hbWVzXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZE5hbWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcInRvVGhyb3dhYmxlXCIsIFskaM2PX2EgPT4gKHRvVGhyb3dhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJpc0F3YWl0QXJnR3VhcmRcIiwgWyRozY9fYSA9PiAoaXNBd2FpdEFyZ0d1YXJkID0gJGjNj19hKV1dLFtcImlzUmF3R3VhcmRcIiwgWyRozY9fYSA9PiAoaXNSYXdHdWFyZCA9ICRozY9fYSldXSxbXCJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRNZXRob2RHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9nZXQtaW50ZXJmYWNlLmpzXCIsIFtbXCJHRVRfSU5URVJGQUNFX0dVQVJEXCIsIFskaM2PX2EgPT4gKEdFVF9JTlRFUkZBQ0VfR1VBUkQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0e2FwcGx5LG93bktleXN9PVJlZmxlY3Q7XG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBSYXdNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoTS5yYXcoKSk7XG5cbmNvbnN0IFJFREFDVEVEX1JBV19BUkc9JzxyZWRhY3RlZCByYXcgYXJnPic7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBQYXNzYWJsZU1ldGhvZEd1YXJkPU0uY2FsbCgpLnJlc3QoTS5hbnkoKSkucmV0dXJucyhNLmFueSgpKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRTeW5jQXJncz0oc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWw9dW5kZWZpbmVkKT0+e1xuY29uc3R7XG5kZWNsYXJlZExlbixcbmhhc1Jlc3RBcmdHdWFyZCxcbnJlc3RBcmdHdWFyZElzUmF3LFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlc309XG5tYXRjaENvbmZpZztcblxuLy9cbi8vXG5sZXQgbWF0Y2hhYmxlQXJncz1zeW5jQXJncztcbmlmKHJlc3RBcmdHdWFyZElzUmF3JiZzeW5jQXJncy5sZW5ndGg+ZGVjbGFyZWRMZW4pe1xuY29uc3QgcmVzdExlbj1zeW5jQXJncy5sZW5ndGgtZGVjbGFyZWRMZW47XG5jb25zdCByZWRhY3RlZFJlc3Q9QXJyYXkocmVzdExlbikuZmlsbChSRURBQ1RFRF9SQVdfQVJHKTtcbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzLnNsaWNlKDAsZGVjbGFyZWRMZW4pLC4uLnJlZGFjdGVkUmVzdF07XG4gfWVsc2UgaWYoXG5yZWRhY3RlZEluZGljZXMubGVuZ3RoPjAmJlxucmVkYWN0ZWRJbmRpY2VzWzBdPHN5bmNBcmdzLmxlbmd0aClcbntcbi8vXG4vL1xubWF0Y2hhYmxlQXJncz1bLi4uc3luY0FyZ3NdO1xuIH1cblxuZm9yKGNvbnN0IGkgb2YgcmVkYWN0ZWRJbmRpY2VzKXtcbmlmKGk+PW1hdGNoYWJsZUFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbm1hdGNoYWJsZUFyZ3NbaV09UkVEQUNURURfUkFXX0FSRztcbiB9XG5cbm11c3RNYXRjaChoYXJkZW4obWF0Y2hhYmxlQXJncykscGFyYW1zUGF0dGVybixsYWJlbCk7XG5cbmlmKGhhc1Jlc3RBcmdHdWFyZCl7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfVxuc3luY0FyZ3MubGVuZ3RoPD1kZWNsYXJlZExlbnx8XG5GYWlsIGAke3EobGFiZWwpfSBhY2NlcHRzIGF0IG1vc3QgJHtxKGRlY2xhcmVkTGVuKX0gYXJndW1lbnRzLCBub3QgJHtxKFxuc3luY0FyZ3MubGVuZ3RoKVxuIH06ICR7c3luY0FyZ3N9YDtcbnJldHVybiBzeW5jQXJncztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJ1aWxkTWF0Y2hDb25maWc9KG1ldGhvZEd1YXJkUGF5bG9hZCk9PntcbmNvbnN0e1xuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmRQYXlsb2FkO1xuXG5jb25zdCBtYXRjaGFibGVBcmdHdWFyZHM9Wy4uLmFyZ0d1YXJkcywuLi5vcHRpb25hbEFyZ0d1YXJkc107XG5cbmNvbnN0IHJlZGFjdGVkSW5kaWNlcz1bXTtcbmZvcihsZXQgaT0wO2k8bWF0Y2hhYmxlQXJnR3VhcmRzLmxlbmd0aDtpKz0xKXtcbmlmKGlzUmF3R3VhcmQobWF0Y2hhYmxlQXJnR3VhcmRzW2ldKSl7XG5tYXRjaGFibGVBcmdHdWFyZHNbaV09UkVEQUNURURfUkFXX0FSRztcbnJlZGFjdGVkSW5kaWNlcy5wdXNoKGkpO1xuIH1cbiB9XG5cbi8vXG5sZXQgbWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPXJlc3RBcmdHdWFyZDtcbmlmKGlzUmF3R3VhcmQobWF0Y2hhYmxlUmVzdEFyZ0d1YXJkKSl7XG5tYXRjaGFibGVSZXN0QXJnR3VhcmQ9TS5hcnJheU9mKFJFREFDVEVEX1JBV19BUkcpO1xuIH1cbmNvbnN0IG1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZD1oYXJkZW4oe1xuLi4ubWV0aG9kR3VhcmRQYXlsb2FkLFxuYXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZSgwLGFyZ0d1YXJkcy5sZW5ndGgpLFxub3B0aW9uYWxBcmdHdWFyZHM6bWF0Y2hhYmxlQXJnR3VhcmRzLnNsaWNlKGFyZ0d1YXJkcy5sZW5ndGgpLFxucmVzdEFyZ0d1YXJkOm1hdGNoYWJsZVJlc3RBcmdHdWFyZH0pO1xuXG5cbmNvbnN0IHBhcmFtc1BhdHRlcm49TS5zcGxpdEFycmF5KFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLmFyZ0d1YXJkcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5vcHRpb25hbEFyZ0d1YXJkcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5yZXN0QXJnR3VhcmQpO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuZGVjbGFyZWRMZW46bWF0Y2hhYmxlQXJnR3VhcmRzLmxlbmd0aCxcbmhhc1Jlc3RBcmdHdWFyZDpyZXN0QXJnR3VhcmQhPT11bmRlZmluZWQsXG5yZXN0QXJnR3VhcmRJc1JhdzpyZXN0QXJnR3VhcmQhPT1tYXRjaGFibGVSZXN0QXJnR3VhcmQsXG5wYXJhbXNQYXR0ZXJuLFxucmVkYWN0ZWRJbmRpY2VzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY01ldGhvZD0oXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk9Plxue1xuY29uc3R7cmV0dXJuR3VhcmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmNvbnN0IGlzUmF3UmV0dXJuPWlzUmF3R3VhcmQocmV0dXJuR3VhcmQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3R7c3luY01ldGhvZH09e1xuLy9cbnN5bmNNZXRob2QoLi4uc3luY0FyZ3Mpe1xudHJ5e1xuY29uc3QgY29udGV4dD1nZXRDb250ZXh0KHRoaXMpO1xuLy9cbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbmNvbnN0IHJlc3VsdD1hcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKHJlc3VsdCkscmV0dXJuR3VhcmQsIGAke2xhYmVsfTogcmVzdWx0YCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9Y2F0Y2godGhyb3duVGhpbmcpe1xudGhyb3cgdG9UaHJvd2FibGUodGhyb3duVGhpbmcpO1xuIH1cbiB9fTtcblxucmV0dXJuIHN5bmNNZXRob2Q7XG4gfTtcblxuLypcblxuICovXG5jb25zdCBkZXN5bmM9KG1ldGhvZEd1YXJkUGF5bG9hZCk9PntcbmNvbnN0e1xuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmRQYXlsb2FkO1xuIWlzQXdhaXRBcmdHdWFyZChyZXN0QXJnR3VhcmQpfHxcbkZhaWwgYFJlc3QgYXJncyBtYXkgbm90IGJlIGF3YWl0ZWQ6ICR7cmVzdEFyZ0d1YXJkfWA7XG5jb25zdCByYXdBcmdHdWFyZHM9Wy4uLmFyZ0d1YXJkcywuLi5vcHRpb25hbEFyZ0d1YXJkc107XG5cbmNvbnN0IGF3YWl0SW5kZXhlcz1bXTtcbmZvcihsZXQgaT0wO2k8cmF3QXJnR3VhcmRzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGFyZ0d1YXJkPXJhd0FyZ0d1YXJkc1tpXTtcbmlmKGlzQXdhaXRBcmdHdWFyZChhcmdHdWFyZCkpe1xucmF3QXJnR3VhcmRzW2ldPWdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGFyZ0d1YXJkKS5hcmdHdWFyZDtcbmF3YWl0SW5kZXhlcy5wdXNoKGkpO1xuIH1cbiB9XG5yZXR1cm57XG5hd2FpdEluZGV4ZXMsXG5yYXdNZXRob2RHdWFyZFBheWxvYWQ6e1xuLi4ubWV0aG9kR3VhcmRQYXlsb2FkLFxuYXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZSgwLGFyZ0d1YXJkcy5sZW5ndGgpLFxub3B0aW9uYWxBcmdHdWFyZHM6cmF3QXJnR3VhcmRzLnNsaWNlKGFyZ0d1YXJkcy5sZW5ndGgpfX07XG5cblxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kQXN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcblxuY29uc3R7YXdhaXRJbmRleGVzLHJhd01ldGhvZEd1YXJkUGF5bG9hZH09ZGVzeW5jKG1ldGhvZEd1YXJkUGF5bG9hZCk7XG5jb25zdCBtYXRjaENvbmZpZz1idWlsZE1hdGNoQ29uZmlnKHJhd01ldGhvZEd1YXJkUGF5bG9hZCk7XG5cbmNvbnN0e2FzeW5jTWV0aG9kfT17XG4vL1xuYXN5bmNNZXRob2QoLi4uYXJncyl7XG5jb25zdCBhd2FpdExpc3Q9W107XG5mb3IoY29uc3QgaSBvZiBhd2FpdEluZGV4ZXMpe1xuaWYoaT49YXJncy5sZW5ndGgpe1xuYnJlYWs7XG4gfVxuYXdhaXRMaXN0LnB1c2goYXJnc1tpXSk7XG4gfVxuY29uc3QgcD1Qcm9taXNlLmFsbChhd2FpdExpc3QpO1xuY29uc3Qgc3luY0FyZ3M9Wy4uLmFyZ3NdO1xuY29uc3QgcmVzdWx0UD1FLndoZW4oXG5wLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovKGF3YWl0ZWRBcmdzKT0+e1xuZm9yKGxldCBqPTA7ajxhd2FpdGVkQXJncy5sZW5ndGg7ais9MSl7XG5zeW5jQXJnc1thd2FpdEluZGV4ZXNbal1dPWF3YWl0ZWRBcmdzW2pdO1xuIH1cbi8vXG4vL1xuY29uc3QgY29udGV4dD1nZXRDb250ZXh0KHRoaXMpO1xuY29uc3QgcmVhbEFyZ3M9ZGVmZW5kU3luY0FyZ3Moc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWwpO1xucmV0dXJuIGFwcGx5KGJlaGF2aW9yTWV0aG9kLGNvbnRleHQscmVhbEFyZ3MpO1xuIH0pO1xuXG5yZXR1cm4gRS53aGVuKHJlc3VsdFAsKGZ1bGZpbGxtZW50KT0+e1xuaWYoIWlzUmF3UmV0dXJuKXtcbm11c3RNYXRjaChoYXJkZW4oZnVsZmlsbG1lbnQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiBmdWxmaWxsbWVudDtcbiB9KS5jYXRjaCgocmVhc29uKT0+XG4vL1xuLy9cblByb21pc2UucmVqZWN0KHRvVGhyb3dhYmxlKHJlYXNvbikpKTtcblxuIH19O1xuXG5yZXR1cm4gYXN5bmNNZXRob2Q7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZE1ldGhvZD0oZ2V0Q29udGV4dCxiZWhhdmlvck1ldGhvZCxtZXRob2RHdWFyZCxsYWJlbCk9PntcbmNvbnN0IG1ldGhvZEd1YXJkUGF5bG9hZD1nZXRNZXRob2RHdWFyZFBheWxvYWQobWV0aG9kR3VhcmQpO1xuY29uc3R7Y2FsbEtpbmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmlmKGNhbGxLaW5kPT09J3N5bmMnKXtcbnJldHVybiBkZWZlbmRTeW5jTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpO1xuXG4gfWVsc2V7XG5hc3NlcnQoY2FsbEtpbmQ9PT0nYXN5bmMnKTtcbnJldHVybiBkZWZlbmRBc3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGJpbmRNZXRob2Q9KFxubWV0aG9kVGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk9Plxue1xuYXNzZXJ0LnR5cGVvZihiZWhhdmlvck1ldGhvZCwnZnVuY3Rpb24nKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0Q29udGV4dD0ocmVwcmVzZW50YXRpdmUpPT57XG5yZXByZXNlbnRhdGl2ZXx8XG4vL1xuRmFpbCBgTWV0aG9kICR7bWV0aG9kVGFnfSBjYWxsZWQgd2l0aG91dCAndGhpcycgb2JqZWN0YDtcbmNvbnN0IGNvbnRleHQ9Y29udGV4dFByb3ZpZGVyKHJlcHJlc2VudGF0aXZlKTtcbmlmKGNvbnRleHQ9PT11bmRlZmluZWQpe1xudGhyb3cgRmFpbCBgJHtxKFxubWV0aG9kVGFnKVxuIH0gbWF5IG9ubHkgYmUgYXBwbGllZCB0byBhIHZhbGlkIGluc3RhbmNlOiAke3JlcHJlc2VudGF0aXZlfWA7XG4gfVxucmV0dXJuIGNvbnRleHQ7XG4gfTtcblxuY29uc3QgbWV0aG9kPWRlZmVuZE1ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkLFxubWV0aG9kVGFnKTtcblxuXG5kZWZpbmVQcm9wZXJ0aWVzKG1ldGhvZCx7XG5uYW1lOnt2YWx1ZTptZXRob2RUYWd9LFxubGVuZ3RoOnt2YWx1ZTpiZWhhdmlvck1ldGhvZC5sZW5ndGh9fSk7XG5cbnJldHVybiBtZXRob2Q7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmVuZFByb3RvdHlwZT0oXG50YWcsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZHMsXG50aGlzZnVsTWV0aG9kcz1mYWxzZSxcbmludGVyZmFjZUd1YXJkPXVuZGVmaW5lZCk9Plxue1xuY29uc3QgcHJvdG90eXBlPXt9O1xuY29uc3QgbWV0aG9kTmFtZXM9Z2V0TWV0aG9kTmFtZXMoYmVoYXZpb3JNZXRob2RzKS5maWx0ZXIoXG4vL1xuLy9cbihrZXkpPT57XG5pZihrZXkhPT0nY29uc3RydWN0b3InKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IGNvbnN0cnVjdG9yPWJlaGF2aW9yTWV0aG9kcy5jb25zdHJ1Y3RvcjtcbnJldHVybiEoXG5jb25zdHJ1Y3Rvci5wcm90b3R5cGUmJlxuY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPT09Y29uc3RydWN0b3IpO1xuXG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgbWV0aG9kR3VhcmRzO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkZWZhdWx0R3VhcmRzO1xuaWYoaW50ZXJmYWNlR3VhcmQpe1xuY29uc3R7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOm1nLFxuc3ltYm9sTWV0aG9kR3VhcmRzLFxuc2xvcHB5LFxuZGVmYXVsdEd1YXJkczpkZz1zbG9wcHk/J3Bhc3NhYmxlJzpkZWZhdWx0R3VhcmRzfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG5tZXRob2RHdWFyZHM9aGFyZGVuKHtcbi4uLm1nLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkcyYmXG5mcm9tRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyhzeW1ib2xNZXRob2RHdWFyZHMpKSl9KTtcblxuZGVmYXVsdEd1YXJkcz1kZztcbntcbmNvbnN0IG1ldGhvZEd1YXJkTmFtZXM9b3duS2V5cyhtZXRob2RHdWFyZHMpO1xuY29uc3QgdW5pbXBsZW1lbnRlZD1saXN0RGlmZmVyZW5jZShtZXRob2RHdWFyZE5hbWVzLG1ldGhvZE5hbWVzKTtcbnVuaW1wbGVtZW50ZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmltcGxlbWVudGVkKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5pZihkZWZhdWx0R3VhcmRzPT09dW5kZWZpbmVkKXtcbmNvbnN0IHVuZ3VhcmRlZD1saXN0RGlmZmVyZW5jZShtZXRob2ROYW1lcyxtZXRob2RHdWFyZE5hbWVzKTtcbnVuZ3VhcmRlZC5sZW5ndGg9PT0wfHxcbkZhaWwgYG1ldGhvZHMgJHtxKHVuZ3VhcmRlZCl9IG5vdCBndWFyZGVkIGJ5ICR7cShpbnRlcmZhY2VOYW1lKX1gO1xuIH1cbiB9XG4gfVxuXG5mb3IoY29uc3QgcHJvcCBvZiBtZXRob2ROYW1lcyl7XG5jb25zdCBvcmlnaW5hbE1ldGhvZD1iZWhhdmlvck1ldGhvZHNbcHJvcF07XG5jb25zdHtzaGlmdGVkTWV0aG9kfT17XG5zaGlmdGVkTWV0aG9kKC4uLmFyZ3Mpe1xucmV0dXJuIG9yaWdpbmFsTWV0aG9kKHRoaXMsLi4uYXJncyk7XG4gfX07XG5cbmNvbnN0IGJlaGF2aW9yTWV0aG9kPXRoaXNmdWxNZXRob2RzP29yaWdpbmFsTWV0aG9kOnNoaWZ0ZWRNZXRob2Q7XG4vL1xuLy9cbmxldCBtZXRob2RHdWFyZD1tZXRob2RHdWFyZHMmJm1ldGhvZEd1YXJkc1twcm9wXTtcbmlmKCFtZXRob2RHdWFyZCl7XG5zd2l0Y2goZGVmYXVsdEd1YXJkcyl7XG5jYXNlIHVuZGVmaW5lZDp7XG5pZih0aGlzZnVsTWV0aG9kcyl7XG5tZXRob2RHdWFyZD1QYXNzYWJsZU1ldGhvZEd1YXJkO1xuIH1lbHNle1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdwYXNzYWJsZSc6e1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbmJyZWFrO1xuIH1cbmNhc2UncmF3Jzp7XG5tZXRob2RHdWFyZD1SYXdNZXRob2RHdWFyZDtcbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGRlZmF1bHRHdWFyZHMgJHtxKGRlZmF1bHRHdWFyZHMpfWA7XG4gfX1cblxuIH1cbnByb3RvdHlwZVtwcm9wXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EocHJvcCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkKTtcblxuIH1cblxuaWYoIWhhc093blByb3BlcnR5T2YocHJvdG90eXBlLEdFVF9JTlRFUkZBQ0VfR1VBUkQpKXtcbmNvbnN0IGdldEludGVyZmFjZUd1YXJkTWV0aG9kPXtcbltHRVRfSU5URVJGQUNFX0dVQVJEXSgpe1xuLy9cbnJldHVybiBpbnRlcmZhY2VHdWFyZDtcbiB9fVtcbkdFVF9JTlRFUkZBQ0VfR1VBUkRdO1xucHJvdG90eXBlW0dFVF9JTlRFUkZBQ0VfR1VBUkRdPWJpbmRNZXRob2QoXG4gYEluICR7cShHRVRfSU5URVJGQUNFX0dVQVJEKX0gbWV0aG9kIG9mICgke3RhZ30pYCxcbmNvbnRleHRQcm92aWRlcixcbmdldEludGVyZmFjZUd1YXJkTWV0aG9kLFxuUGFzc2FibGVNZXRob2RHdWFyZCk7XG5cbiB9XG5cbnJldHVybiBGYXIoXG50YWcsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucHJvdG90eXBlKTtcblxuXG4gfTskaM2PX29uY2UuZGVmZW5kUHJvdG90eXBlKGRlZmVuZFByb3RvdHlwZSk7XG5oYXJkZW4oZGVmZW5kUHJvdG90eXBlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmVuZFByb3RvdHlwZUtpdD0oXG50YWcsXG5jb250ZXh0UHJvdmlkZXJLaXQsXG5iZWhhdmlvck1ldGhvZHNLaXQsXG50aGlzZnVsTWV0aG9kcz1mYWxzZSxcbmludGVyZmFjZUd1YXJkS2l0PXVuZGVmaW5lZCk9Plxue1xuY29uc3QgZmFjZXROYW1lcz1vd25LZXlzKGJlaGF2aW9yTWV0aG9kc0tpdCkuc29ydCgpO1xuZmFjZXROYW1lcy5sZW5ndGg+MXx8RmFpbCBgQSBtdWx0aS1mYWNldCBvYmplY3QgbXVzdCBoYXZlIG11bHRpcGxlIGZhY2V0c2A7XG5pZihpbnRlcmZhY2VHdWFyZEtpdCl7XG5jb25zdCBpbnRlcmZhY2VOYW1lcz1vd25LZXlzKGludGVyZmFjZUd1YXJkS2l0KTtcbmNvbnN0IGV4dHJhSW50ZXJmYWNlTmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxpbnRlcmZhY2VOYW1lcyk7XG5leHRyYUludGVyZmFjZU5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgSW50ZXJmYWNlcyAke3EoZXh0cmFJbnRlcmZhY2VOYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGludGVyZmFjZU5hbWVzLGZhY2V0TmFtZXMpO1xuZXh0cmFGYWNldE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgRmFjZXRzICR7cShleHRyYUZhY2V0TmFtZXMpfSBvZiAke3EodGFnKX0gbm90IGd1YXJkZWQgYnkgaW50ZXJmYWNlc2A7XG4gfVxuY29uc3QgY29udGV4dE1hcE5hbWVzPW93bktleXMoY29udGV4dFByb3ZpZGVyS2l0KTtcbmNvbnN0IGV4dHJhQ29udGV4dE5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsY29udGV4dE1hcE5hbWVzKTtcbmV4dHJhQ29udGV4dE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgQ29udGV4dHMgJHtxKGV4dHJhQ29udGV4dE5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoY29udGV4dE1hcE5hbWVzLGZhY2V0TmFtZXMpO1xuZXh0cmFGYWNldE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgRmFjZXRzICR7cShleHRyYUZhY2V0TmFtZXMpfSBvZiAke3EodGFnKX0gbWlzc2luZyBjb250ZXh0c2A7XG5jb25zdCBwcm90b0tpdD1vYmplY3RNYXAoYmVoYXZpb3JNZXRob2RzS2l0LChiZWhhdmlvck1ldGhvZHMsZmFjZXROYW1lKT0+XG5kZWZlbmRQcm90b3R5cGUoXG4gYCR7dGFnfSAke1N0cmluZyhmYWNldE5hbWUpfWAsXG5jb250ZXh0UHJvdmlkZXJLaXRbZmFjZXROYW1lXSxcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzLFxuaW50ZXJmYWNlR3VhcmRLaXQmJmludGVyZmFjZUd1YXJkS2l0W2ZhY2V0TmFtZV0pKTtcblxuXG5yZXR1cm4gcHJvdG9LaXQ7XG4gfTskaM2PX29uY2UuZGVmZW5kUHJvdG90eXBlS2l0KGRlZmVuZFByb3RvdHlwZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZlbmRQcm90b3R5cGUiOlsiZGVmZW5kUHJvdG90eXBlIl0sImRlZmVuZFByb3RvdHlwZUtpdCI6WyJkZWZlbmRQcm90b3R5cGVLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARpM8bjYCAAA2AgAAJQAAAEBlbmRvL2V4by12MS41Ljcvc3JjL2dldC1pbnRlcmZhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX0lOVEVSRkFDRV9HVUFSRD0nX19nZXRJbnRlcmZhY2VHdWFyZF9fJztcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLkdFVF9JTlRFUkZBQ0VfR1VBUkQoR0VUX0lOVEVSRkFDRV9HVUFSRCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHRVRfSU5URVJGQUNFX0dVQVJEIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAHQAAAEBlbmRvL2V4by12MS41Ljcvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAQGVuZG8vZmFyLXYxLjEuOS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIixudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyJAZW5kby9ldmVudHVhbC1zZW5kIjpbWyJFIiwiRSJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siRmFyIiwiRmFyIl0sWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl0sWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABp8BmfMwoAADMKAAA1AAAAQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIvc3JjL2NvbXBhcnRtZW50LXdyYXBwZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQsICduYW1lJywge3ZhbHVlOiBcIndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50XCJ9KTskaM2PX29uY2Uud3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQod3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQpOyAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGNvbXBhcnRtZW50T3B0aW9ucz0oLi4uYXJncyk9PntcbmlmKGFyZ3MubGVuZ3RoPT09MCl7XG5yZXR1cm57fTtcbiB9XG5pZihcbmFyZ3MubGVuZ3RoPT09MSYmXG50eXBlb2YgYXJnc1swXT09PSdvYmplY3QnJiZcbmFyZ3NbMF0hPT1udWxsJiZcbidfX29wdGlvbnNfXydpbiBhcmdzWzBdKVxue1xuY29uc3R7X19vcHRpb25zX18sLi4ub3B0aW9uc309YXJnc1swXTtcbmFzc2VydChcbl9fb3B0aW9uc19fPT09dHJ1ZSxcbiBgQ29tcGFydG1lbnQgY29uc3RydWN0b3Igb25seSBzdXBwb3J0cyB0cnVlIF9fb3B0aW9uc19fIHNpZ2lsLCBnb3QgJHtfX29wdGlvbnNfX31gKTtcblxucmV0dXJuIG9wdGlvbnM7XG4gfWVsc2V7XG5jb25zdFtcbmdsb2JhbHM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL3t9LFxubW9kdWxlcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3t9LFxub3B0aW9ucz17fV09XG5hcmdzO1xuYXNzZXJ0LmVxdWFsKFxub3B0aW9ucy5tb2R1bGVzLFxudW5kZWZpbmVkLFxuIGBDb21wYXJ0bWVudCBjb25zdHJ1Y3RvciBtdXN0IHJlY2VpdmUgZWl0aGVyIGEgbW9kdWxlIG1hcCBhcmd1bWVudCBvciBtb2R1bGVzIG9wdGlvbiwgbm90IGJvdGhgKTtcblxuYXNzZXJ0LmVxdWFsKFxub3B0aW9ucy5nbG9iYWxzLFxudW5kZWZpbmVkLFxuIGBDb21wYXJ0bWVudCBjb25zdHJ1Y3RvciBtdXN0IHJlY2VpdmUgZWl0aGVyIGdsb2JhbHMgYXJndW1lbnQgb3Igb3B0aW9uLCBub3QgYm90aGApO1xuXG5yZXR1cm57XG4uLi5vcHRpb25zLFxuZ2xvYmFscyxcbm1vZHVsZXN9O1xuXG4gfVxuIH07XG5cbmZ1bmN0aW9uICAgICAgICB3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudChcbk9sZENvbXBhcnRtZW50LFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zLFxuaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKVxue1xuLy9cbi8vXG4vL1xuY29uc3QgTmV3Q29tcGFydG1lbnQ9ZnVuY3Rpb24gQ29tcGFydG1lbnQoLi4uYXJncyl7XG5jb25zdHt0cmFuc2Zvcm1zOm9sZFRyYW5zZm9ybXM9W10sLi4ub3RoZXJPcHRpb25zfT1cbmNvbXBhcnRtZW50T3B0aW9ucyguLi5hcmdzKTtcbmNvbnN0IG5ld1RyYW5zZm9ybXM9Wy4uLm9sZFRyYW5zZm9ybXMsLi4uaW5lc2NhcGFibGVUcmFuc2Zvcm1zXTtcbmNvbnN0IG5ld09wdGlvbnM9e1xuLi4ub3RoZXJPcHRpb25zLFxudHJhbnNmb3JtczpuZXdUcmFuc2Zvcm1zLFxuX19vcHRpb25zX186dHJ1ZX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbmlmKG5ldy50YXJnZXQ9PT11bmRlZmluZWQpe1xuLy9cbnRocm93IEVycm9yKCdDb21wYXJ0bWVudCBtdXN0IGJlIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yJyk7XG4gfVxuXG4vL1xuXG5jb25zdCBjPVJlZmxlY3QuY29uc3RydWN0KE9sZENvbXBhcnRtZW50LFtuZXdPcHRpb25zXSxuZXcudGFyZ2V0KTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmMuZ2xvYmFsVGhpcy5Db21wYXJ0bWVudD1OZXdDb21wYXJ0bWVudDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZm9yKGNvbnN0IHByb3Agb2YgUmVmbGVjdC5vd25LZXlzKGluZXNjYXBhYmxlR2xvYmFsUHJvcGVydGllcykpe1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGMuZ2xvYmFsVGhpcyxwcm9wLHtcbnZhbHVlOmluZXNjYXBhYmxlR2xvYmFsUHJvcGVydGllc1twcm9wXSxcbndyaXRhYmxlOnRydWUsXG4vL1xuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTp0cnVlfSk7XG5cbiB9XG5cbnJldHVybiBjO1xuIH07XG5cbi8vXG5OZXdDb21wYXJ0bWVudC5wcm90b3R5cGU9T2xkQ29tcGFydG1lbnQucHJvdG90eXBlO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxucmV0dXJuIE5ld0NvbXBhcnRtZW50O1xuIH1cblxuLy9cbi8vXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCI6WyJ3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAcxpBeIwwAACMMAAAnAAAAQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qcyIsIkBlbmRvL2Jhc2U2NCIsIkBlbmRvL2Vycm9ycyIsIi4vY29tcGFydG1lbnQtd3JhcHBlci5qcyJdLCJleHBvcnRzIjpbImltcG9ydEJ1bmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXJzZUFyY2hpdmUsZGVjb2RlQmFzZTY0LEZhaWwsd3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIvaW1wb3J0LWFyY2hpdmUuanNcIiwgW1tcInBhcnNlQXJjaGl2ZVwiLCBbJGjNj19hID0+IChwYXJzZUFyY2hpdmUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9iYXNlNjRcIiwgW1tcImRlY29kZUJhc2U2NFwiLCBbJGjNj19hID0+IChkZWNvZGVCYXNlNjQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29tcGFydG1lbnQtd3JhcHBlci5qc1wiLCBbW1wid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnRcIiwgWyRozY9fYSA9PiAod3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpbXBvcnRCdW5kbGUsICduYW1lJywge3ZhbHVlOiBcImltcG9ydEJ1bmRsZVwifSk7JGjNj19vbmNlLmltcG9ydEJ1bmRsZShpbXBvcnRCdW5kbGUpOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuXG5hc3luYyBmdW5jdGlvbiAgICAgICAgaW1wb3J0QnVuZGxlKGJ1bmRsZSxvcHRpb25zPXt9LHBvd2Vycz17fSl7XG5hd2FpdCBudWxsO1xuY29uc3R7XG5idW5kbGVVcmw9dW5kZWZpbmVkLFxuZmlsZVByZWZpeCxcbmVuZG93bWVudHM6b3B0RW5kb3dtZW50cz17fSxcbi8vXG4vL1xudHJhbnNmb3Jtcz1bXSxcbmluZXNjYXBhYmxlVHJhbnNmb3Jtcz1bXSxcbmluZXNjYXBhYmxlR2xvYmFsUHJvcGVydGllcz17fSxcbmV4cGVjdGVkU2hhNTEyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3R7XG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb249dW5kZWZpbmVkfT1cbnBvd2VycztcbmNvbnN0IGVuZG93bWVudHM9e1xuVGV4dEVuY29kZXIsXG5UZXh0RGVjb2RlcixcblVSTDpnbG9iYWxUaGlzLlVSTCwvL1xuQmFzZTY0Omdsb2JhbFRoaXMuQmFzZTY0LC8vXG5hdG9iOmdsb2JhbFRoaXMuYXRvYixcbmJ0b2E6Z2xvYmFsVGhpcy5idG9hLFxuLi4ub3B0RW5kb3dtZW50c307XG5cblxubGV0IENvbXBhcnRtZW50VG9Vc2U9Q29tcGFydG1lbnQ7XG5pZihcbmluZXNjYXBhYmxlVHJhbnNmb3Jtcy5sZW5ndGh8fFxuT2JqZWN0LmtleXMoaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKS5sZW5ndGgpXG57XG4vL1xuQ29tcGFydG1lbnRUb1VzZT13cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudChcbkNvbXBhcnRtZW50LFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zLFxuaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKTtcblxuIH1cblxubGV0IGNvbXBhcnRtZW50O1xuXG5jb25zdHttb2R1bGVGb3JtYXR9PWJ1bmRsZTtcbmlmKG1vZHVsZUZvcm1hdD09PSdlbmRvWmlwQmFzZTY0Jyl7XG5jb25zdHtlbmRvWmlwQmFzZTY0fT1idW5kbGU7XG5jb25zdCBieXRlcz1kZWNvZGVCYXNlNjQoZW5kb1ppcEJhc2U2NCk7XG5jb25zdCBhcmNoaXZlPWF3YWl0IHBhcnNlQXJjaGl2ZShieXRlcyxidW5kbGVVcmwse1xuY29tcHV0ZVNoYTUxMixcbmV4cGVjdGVkU2hhNTEyLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9ufSk7XG5cbi8vXG4vL1xuY29uc3R7bmFtZXNwYWNlfT1hd2FpdCBhcmNoaXZlWydpbXBvcnQnXSh7XG5nbG9iYWxzOmVuZG93bWVudHMsXG5fX3NoaW1UcmFuc2Zvcm1zX186dHJhbnNmb3Jtcyxcbi8vXG5Db21wYXJ0bWVudDpDb21wYXJ0bWVudFRvVXNlfSk7XG5cbi8vXG5yZXR1cm4gbmFtZXNwYWNlO1xuIH1cblxubGV0e3NvdXJjZX09YnVuZGxlO1xuY29uc3R7c291cmNlTWFwfT1idW5kbGU7XG5pZihtb2R1bGVGb3JtYXQ9PT0nZ2V0RXhwb3J0Jyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnNvdXJjZT0gYCgke3NvdXJjZX0pXFxuJHtzb3VyY2VNYXB8fCcnfWA7XG4gfWVsc2UgaWYobW9kdWxlRm9ybWF0PT09J25lc3RlZEV2YWx1YXRlJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZW5kb3dtZW50cy5uZXN0ZWRFdmFsdWF0ZT0oc3JjKT0+Y29tcGFydG1lbnQuZXZhbHVhdGUoc3JjKTtcbnNvdXJjZT0gYCgke3NvdXJjZX0pXFxuJHtzb3VyY2VNYXB8fCcnfWA7XG4gfWVsc2UgaWYobW9kdWxlRm9ybWF0PT09J2VuZG9TY3JpcHQnKXtcbi8vXG4gfWVsc2V7XG5GYWlsIGB1bnJlY29nbml6ZWQgbW9kdWxlRm9ybWF0ICcke21vZHVsZUZvcm1hdH0nYDtcbiB9XG5cbmNvbXBhcnRtZW50PW5ldyBDb21wYXJ0bWVudFRvVXNlKGVuZG93bWVudHMse30se3RyYW5zZm9ybXN9KTtcbmhhcmRlbihjb21wYXJ0bWVudC5nbG9iYWxUaGlzKTtcbmNvbnN0IHJlc3VsdD1jb21wYXJ0bWVudC5ldmFsdWF0ZShzb3VyY2UpO1xuaWYobW9kdWxlRm9ybWF0PT09J2VuZG9TY3JpcHQnKXtcbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbi8vXG5jb25zdCBuYW1lc3BhY2U9cmVzdWx0KGZpbGVQcmVmaXgpO1xuLy9cbnJldHVybiBuYW1lc3BhY2U7XG4gfVxuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpbXBvcnRCdW5kbGUiOlsiaW1wb3J0QnVuZGxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAABAZW5kby9tYXJzaGFsLXYxLjYuMi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiLCIuL3NyYy9tYXJzaGFsLmpzIiwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIiwiLi9zcmMvcmFua09yZGVyLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJwYXJzZSIsInBhcnNlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanNcIiwgW11dLFtcIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3NyYy9yYW5rT3JkZXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjpbWyJRQ0xBU1MiLCJRQ0xBU1MiXV0sIi4vc3JjL21hcnNoYWwuanMiOltbIm1ha2VNYXJzaGFsIiwibWFrZU1hcnNoYWwiXV0sIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjpbWyJzdHJpbmdpZnkiLCJzdHJpbmdpZnkiXSxbInBhcnNlIiwicGFyc2UiXV0sIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjpbWyJkZWNvZGVUb0p1c3RpbiIsImRlY29kZVRvSnVzdGluIl1dLCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6W1sibWFrZVBhc3NhYmxlS2l0IiwibWFrZVBhc3NhYmxlS2l0Il0sWyJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiXSxbIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSJdLFsiaXNFbmNvZGVkUmVtb3RhYmxlIiwiaXNFbmNvZGVkUmVtb3RhYmxlIl0sWyJ6ZXJvUGFkIiwiemVyb1BhZCJdLFsicmVjb3JkTmFtZXMiLCJyZWNvcmROYW1lcyJdLFsicmVjb3JkVmFsdWVzIiwicmVjb3JkVmFsdWVzIl1dLCIuL3NyYy9yYW5rT3JkZXIuanMiOltbInRyaXZpYWxDb21wYXJhdG9yIiwidHJpdmlhbENvbXBhcmF0b3IiXSxbImFzc2VydFJhbmtTb3J0ZWQiLCJhc3NlcnRSYW5rU29ydGVkIl0sWyJjb21wYXJlUmFuayIsImNvbXBhcmVSYW5rIl0sWyJpc1JhbmtTb3J0ZWQiLCJpc1JhbmtTb3J0ZWQiXSxbInNvcnRCeVJhbmsiLCJzb3J0QnlSYW5rIl0sWyJjb21wYXJlQW50aVJhbmsiLCJjb21wYXJlQW50aVJhbmsiXSxbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IiwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXSxbImdldFBhc3NTdHlsZUNvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiXSxbImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sWyJ1bmlvblJhbmtDb3ZlcnMiLCJ1bmlvblJhbmtDb3ZlcnMiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbImRlZXBseUZ1bGZpbGxlZCIsImRlZXBseUZ1bGZpbGxlZCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA12xbpVlDAABZQwAAKgAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiaXNFbmNvZGVkUmVtb3RhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZVBhc3NhYmxlS2l0IiwicGFzc1N0eWxlUHJlZml4ZXMiLCJyZWNvcmROYW1lcyIsInJlY29yZFZhbHVlcyIsInplcm9QYWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRozY9fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRozY9fb25jZS5yZWNvcmRWYWx1ZXMocmVjb3JkVmFsdWVzKTtcbmhhcmRlbihyZWNvcmRWYWx1ZXMpO1xuXG5jb25zdCB6ZXJvZXM9QXJyYXkoMTYpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGkpPT4nMCcucmVwZWF0KGkpKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHplcm9QYWQ9KG4sc2l6ZSk9PntcbmNvbnN0IG5TdHI9IGAke259YDtcbmNvbnN0IGZpbGxMZW49c2l6ZS1uU3RyLmxlbmd0aDtcbmlmKGZpbGxMZW49PT0wKXJldHVybiBuU3RyO1xuYXNzZXJ0KGZpbGxMZW4+MCYmZmlsbExlbjx6ZXJvZXMubGVuZ3RoKTtcbnJldHVybiBgJHt6ZXJvZXNbZmlsbExlbl19JHtuU3RyfWA7XG4gfTskaM2PX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRozY9fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVBhc3NhYmxlKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZUVuY29kZVBhc3NhYmxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlUGFzc2FibGU9KGRlY29kZU9wdGlvbnMpPT57XG5jb25zdHtkZWNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGRlY29kZU9wdGlvbnMpO1xucmV0dXJuIGRlY29kZVBhc3NhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaM2PX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxuLy9cbi8vXG4vL1xudW5kZWZpbmVkOid6J307JGjNj19vbmNlLnBhc3NTdHlsZVByZWZpeGVzKHBhc3NTdHlsZVByZWZpeGVzKTtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVByZWZpeGVzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVByZWZpeGVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlY29yZE5hbWVzIjpbInJlY29yZE5hbWVzIl0sInJlY29yZFZhbHVlcyI6WyJyZWNvcmRWYWx1ZXMiXSwiemVyb1BhZCI6WyJ6ZXJvUGFkIl0sIm1ha2VQYXNzYWJsZUtpdCI6WyJtYWtlUGFzc2FibGVLaXQiXSwibWFrZUVuY29kZVBhc3NhYmxlIjpbIm1ha2VFbmNvZGVQYXNzYWJsZSJdLCJtYWtlRGVjb2RlUGFzc2FibGUiOlsibWFrZURlY29kZVBhc3NhYmxlIl0sImlzRW5jb2RlZFJlbW90YWJsZSI6WyJpc0VuY29kZWRSZW1vdGFibGUiXSwicGFzc1N0eWxlUHJlZml4ZXMiOlsicGFzc1N0eWxlUHJlZml4ZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb0NhcERhdGEuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIlFDTEFTUyIsIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSIsIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxpc09iamVjdCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsXG5kZWZpbmVQcm9wZXJ0aWVzLFxuaXMsXG5lbnRyaWVzLFxuZnJvbUVudHJpZXMsXG5mcmVlemV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUUNMQVNTPSdAcWNsYXNzJzskaM2PX29uY2UuUUNMQVNTKFFDTEFTUyk7XG5cblxuLypcblxuXG4gKi9cbmNvbnN0IGhhc1FDbGFzcz0oZW5jb2RlZCk9Pmhhc093blByb3BlcnR5T2YoZW5jb2RlZCxRQ0xBU1MpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBxY2xhc3NNYXRjaGVzPShlbmNvZGVkLHFjbGFzcyk9PlxuaXNPYmplY3QoZW5jb2RlZCkmJlxuIWlzQXJyYXkoZW5jb2RlZCkmJlxuaGFzUUNsYXNzKGVuY29kZWQpJiZcbmVuY29kZWRbUUNMQVNTXT09PXFjbGFzcztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHJlbSk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyKT0+RmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7ZXJyfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvQ2FwRGF0YT0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPWRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhPWRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGE9ZG9udEVuY29kZUVycm9yVG9DYXBEYXRhfT1cbmVuY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb0NhcERhdGFSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdzdHJpbmcnOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybntbUUNMQVNTXTondW5kZWZpbmVkJ307XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybntbUUNMQVNTXTonTmFOJ307XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106J0luZmluaXR5J307XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJue1tRQ0xBU1NdOictSW5maW5pdHknfTtcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm57XG5bUUNMQVNTXTonYmlnaW50JyxcbmRpZ2l0czpTdHJpbmcocGFzc2FibGUpfTtcblxuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm57XG5bUUNMQVNTXTonc3ltYm9sJyxcbm5hbWV9O1xuXG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHBhc3NhYmxlLFFDTEFTUykpe1xuLy9cbmNvbnN0e1tRQ0xBU1NdOnFjbGFzc1ZhbHVlLC4uLnJlc3R9PXBhc3NhYmxlO1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD17XG5bUUNMQVNTXTonaGlsYmVydCcsXG5vcmlnaW5hbDplbmNvZGVUb0NhcERhdGFSZWN1cihxY2xhc3NWYWx1ZSl9O1xuXG5pZihvd25LZXlzKHJlc3QpLmxlbmd0aD49MSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXN1bHQucmVzdD1lbmNvZGVUb0NhcERhdGFSZWN1cihmcmVlemUocmVzdCkpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W25hbWUsZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG5bUUNMQVNTXTondGFnZ2VkJyxcbnRhZzpnZXRUYWcocGFzc2FibGUpLFxucGF5bG9hZDplbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEoXG5wYXNzYWJsZSxcbmVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcblxuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MpXG4gfSAke3EoJ3Nsb3QnKX06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQcm9taXNlVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnc2xvdCcpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ3Nsb3QnKVxuIH06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdlcnJvcicpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUyxcbidlcnJvcicpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb0NhcERhdGE9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKGVuY29kZUVycm9yVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKSk7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YSk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvQ2FwRGF0YShtYWtlRW5jb2RlVG9DYXBEYXRhKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9DYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YT0oc2xvdEVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgb3IgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Nsb3RFbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbUNhcERhdGE9KGVycm9yRW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyb3JFbmNvZGluZ31gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tQ2FwRGF0YT0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhPWRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGE9ZG9udERlY29kZUVycm9yRnJvbUNhcERhdGF9PVxuZGVjb2RlT3B0aW9ucztcblxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9PT1kZWNvZGVQcm9taXNlRnJvbUNhcERhdGF8fFxuRmFpbCBgQW4gaW1wbGVtZW50YXRpb24gcmVzdHJpY3Rpb24gZm9yIG5vdzogSWYgZWl0aGVyIGRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhIG9yIGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSBpcyBwcm92aWRlZCwgYm90aCBtdXN0IGJlIHByb3ZpZGVkIGFuZCB0aGV5IG11c3QgYmUgdGhlIHNhbWU6ICR7cShcbmRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhKVxuIH0gdnMgJHtxKGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSl9YDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbUNhcERhdGE9KGpzb25FbmNvZGVkKT0+e1xuaWYoIWlzT2JqZWN0KGpzb25FbmNvZGVkKSl7XG4vL1xucmV0dXJuIGpzb25FbmNvZGVkO1xuIH1cbmlmKGlzQXJyYXkoanNvbkVuY29kZWQpKXtcbnJldHVybiBqc29uRW5jb2RlZC5tYXAoKGVuY29kZWRWYWwpPT5kZWNvZGVGcm9tQ2FwRGF0YShlbmNvZGVkVmFsKSk7XG4gfWVsc2UgaWYoaGFzUUNsYXNzKGpzb25FbmNvZGVkKSl7XG5jb25zdCBxY2xhc3M9anNvbkVuY29kZWRbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkICR7cShRQ0xBU1MpfSB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5zd2l0Y2gocWNsYXNzKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZSctSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1qc29uRW5jb2RlZDtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm4gQmlnSW50KGRpZ2l0cyk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3I7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PWpzb25FbmNvZGVkO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PWpzb25FbmNvZGVkO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLGRlY29kZUZyb21DYXBEYXRhKHBheWxvYWQpKTtcbiB9XG5jYXNlJ3Nsb3QnOntcbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZWQ9ZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEoXG5qc29uRW5jb2RlZCxcbmRlY29kZUZyb21DYXBEYXRhKTtcblxuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBkZWNvZGVkO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG5pZihwYXNzU3R5bGVPZihkZWNvZGVkKT09PSdlcnJvcicpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbUNhcERhdGEgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke2RlY29kZWR9YDtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PWpzb25FbmNvZGVkO1xuaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwnb3JpZ2luYWwnKXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtqc29uRW5jb2RlZH1gO1xuLy9cbmNvbnN0IHJlc3VsdD17W1FDTEFTU106ZGVjb2RlRnJvbUNhcERhdGEob3JpZ2luYWwpfTtcbmlmKGhhc093blByb3BlcnR5T2YoanNvbkVuY29kZWQsJ3Jlc3QnKSl7XG5jb25zdCBpc05vbkVtcHR5T2JqZWN0PVxudHlwZW9mIHJlc3Q9PT0nb2JqZWN0JyYmXG5yZXN0IT09bnVsbCYmXG5vd25LZXlzKHJlc3QpLmxlbmd0aD49MTtcbmlmKCFpc05vbkVtcHR5T2JqZWN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgbXVzdCBiZSBhIG5vbi1lbXB0eSBvYmplY3Q6ICR7cmVzdH1gO1xuIH1cbmNvbnN0IHJlc3RPYmo9ZGVjb2RlRnJvbUNhcERhdGEocmVzdCk7XG4vL1xuLy9cbi8vXG4haGFzT3duUHJvcGVydHlPZihyZXN0T2JqLFFDTEFTUyl8fFxuRmFpbCBgUmVzdCBtdXN0IG5vdCBjb250YWluIGl0cyBvd24gZGVmaW5pdGlvbiBvZiAke3EoUUNMQVNTKX1gO1xuZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyZXN0T2JqKSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuY2FzZSdpYmlkJzp7XG50aHJvdyBGYWlsIGBUaGUgY2FwRGF0YSBwcm90b2NvbCBubyBsb25nZXIgc3VwcG9ydHMgJHtxKFFDTEFTUyl9ICR7cShcbnFjbGFzcylcbiB9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZXtcbmFzc2VydCh0eXBlb2YganNvbkVuY29kZWQ9PT0nb2JqZWN0JyYmanNvbkVuY29kZWQhPT1udWxsKTtcbmNvbnN0IGRlY29kZUVudHJ5PShbbmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgJHtxKG5hbWUpfSBvZiAke2pzb25FbmNvZGVkfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhqc29uRW5jb2RlZCkubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbUNhcERhdGEobWFrZURlY29kZUZyb21DYXBEYXRhKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlFDTEFTUyI6WyJRQ0xBU1MiXSwibWFrZUVuY29kZVRvQ2FwRGF0YSI6WyJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSI6WyJtYWtlRGVjb2RlRnJvbUNhcERhdGEiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD0obqy4iAAAuIgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiLCJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7aXMsZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdCBCQU5HPSchJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgREFTSD0nLScuY2hhckNvZGVBdCgwKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRzU3BlY2lhbD0oZW5jb2RlZFN0cik9PntcbmlmKGVuY29kZWRTdHI9PT0nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmNvbnN0IGNvZGU9ZW5jb2RlZFN0ci5jaGFyQ29kZUF0KDApO1xuLy9cbnJldHVybiBCQU5HPD1jb2RlJiZjb2RlPD1EQVNIO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9KHJlbSk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyKT0+XG5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtxKGVycil9YDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9TbWFsbGNhcHM9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz1kb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz1kb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwc309XG5lbmNvZGVPcHRpb25zO1xuXG5jb25zdCBhc3NlcnRFbmNvZGVkRXJyb3I9KGVuY29kaW5nKT0+e1xudHlwZW9mIGVuY29kaW5nPT09J29iamVjdCcmJmhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgXCIjZXJyb3JcIiBwcm9wZXJ0eTogJHtxKFxuZW5jb2RpbmcpXG4gfWA7XG4vL1xuY29uc3QgbWVzc2FnZT1lbmNvZGluZ1snI2Vycm9yJ107XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnJiYoXG4hc3RhcnRzU3BlY2lhbChtZXNzYWdlKXx8bWVzc2FnZS5jaGFyQXQoMCk9PT0nIScpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgc3RyaW5nIG1lc3NhZ2U6ICR7cShtZXNzYWdlKX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoc3RhcnRzU3BlY2lhbChwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gYCEke3Bhc3NhYmxlfWA7XG4gfVxuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuJyN1bmRlZmluZWQnO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm4nI05hTic7XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm4nI0luZmluaXR5JztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm4nIy1JbmZpbml0eSc7XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3Qgc3RyPVN0cmluZyhwYXNzYWJsZSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL3Bhc3NhYmxlPDBuP3N0cjpgKyR7c3RyfWApO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm4gYCUke25hbWV9YDtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIobmFtZSksXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbicjdGFnJzplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKGdldFRhZyhwYXNzYWJsZSkpLFxucGF5bG9hZDplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJCcpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCIkXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyYnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJlwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxuZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKSk7XG5cbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvU21hbGxjYXBzKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5oYXJkZW4obWFrZUVuY29kZVRvU21hbGxjYXBzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7cShlbmNvZGluZyl9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcz0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyxcbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyxcbmRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfT1cbmRlY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+e1xuc3dpdGNoKHR5cGVvZiBlbmNvZGluZyl7XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGluZztcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoIXN0YXJ0c1NwZWNpYWwoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5jb25zdCBjPWVuY29kaW5nLmNoYXJBdCgwKTtcbnN3aXRjaChjKXtcbmNhc2UnISc6e1xuLy9cbnJldHVybiBlbmNvZGluZy5zbGljZSgxKTtcbiB9XG5jYXNlJyUnOntcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUoZW5jb2Rpbmcuc2xpY2UoMSkpO1xuIH1cbmNhc2UnIyc6e1xuc3dpdGNoKGVuY29kaW5nKXtcbmNhc2UnI3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJyNOYU4nOntcbnJldHVybiBOYU47XG4gfVxuY2FzZScjSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJyMtSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5rbm93biBjb25zdGFudCBcIiR7cShlbmNvZGluZyl9XCJgLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9XG5jYXNlJysnOlxuY2FzZSctJzp7XG5yZXR1cm4gQmlnSW50KGVuY29kaW5nKTtcbiB9XG5jYXNlJyQnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuLy9cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncmVtb3RhYmxlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSByZW1vdGFibGU6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJyYnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncHJvbWlzZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHByb21pc2U6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFNwZWNpYWwgY2hhciAke3EoXG5jKVxuIH0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U6ICR7ZW5jb2Rpbmd9YDtcbiB9fVxuXG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGVuY29kaW5nPT09bnVsbCl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuXG5pZihpc0FycmF5KGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2RpbmcubWFwKCh2YWwpPT5kZWNvZGVGcm9tU21hbGxjYXBzKHZhbCkpO1xuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI3RhZycpKXtcbmNvbnN0eycjdGFnJzp0YWcscGF5bG9hZCwuLi5yZXN0fT1lbmNvZGluZztcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBWYWx1ZSBvZiBcIiN0YWdcIiwgdGhlIHRhZywgbXVzdCBiZSBhIHN0cmluZzogJHtlbmNvZGluZ31gO1xub3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbkZhaWwgYCN0YWcgcmVjb3JkIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKG93bktleXMocmVzdCkpfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZChcbmRlY29kZUZyb21TbWFsbGNhcHModGFnKSxcbmRlY29kZUZyb21TbWFsbGNhcHMocGF5bG9hZCkpO1xuXG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKSl7XG5jb25zdCByZXN1bHQ9ZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxucGFzc1N0eWxlT2YocmVzdWx0KT09PSdlcnJvcid8fFxuRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7cmVzdWx0fWA7XG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuY29uc3QgZGVjb2RlRW50cnk9KFtlbmNvZGVkTmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBlbmNvZGVkTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxuZW5jb2RlZE5hbWUpXG4gfSBvZiAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbmVuY29kZWROYW1lLmNoYXJBdCgwKSE9PScjJ3x8XG5GYWlsIGBVbnJlY29nbml6ZWQgcmVjb3JkIHR5cGUgJHtxKGVuY29kZWROYW1lKX06ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IG5hbWU9ZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkTmFtZSk7XG50eXBlb2YgbmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYERlY29kZWQgcHJvcGVydHkgbmFtZSAke25hbWV9IGZyb20gJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5yZXR1cm5bbmFtZSxkZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhlbmNvZGluZykubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiB1bnJlY29nbml6ZWQgSlNPTiB0eXBlb2YgJHtxKFxudHlwZW9mIGVuY29kaW5nKVxuIH06ICR7ZW5jb2Rpbmd9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZURlY29kZUZyb21TbWFsbGNhcHMobWFrZURlY29kZUZyb21TbWFsbGNhcHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVuY29kZVRvU21hbGxjYXBzIjpbIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtanVzdGluLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyJdLCJleHBvcnRzIjpbImRlY29kZVRvSnVzdGluIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaM2PX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaM2PX2EgPT4gKFFDTEFTUyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjNj19vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABEEqbnXAYAAFwGAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vbWFyc2hhbC5qc1wiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuY29uc3QgYmFkQXJyYXk9aGFyZGVuKG5ldyBQcm94eShoYXJkZW4oW10pLGJhZEFycmF5SGFuZGxlcikpO1xuXG5jb25zdHtzZXJpYWxpemUsdW5zZXJpYWxpemV9PW1ha2VNYXJzaGFsKFxuZG9Ob3RDb252ZXJ0VmFsVG9TbG90LFxuZG9Ob3RDb252ZXJ0U2xvdFRvVmFsLFxue1xuZXJyb3JUYWdnaW5nOidvZmYnLFxuLy9cbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J2NhcGRhdGEnfSk7XG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5PSh2YWwpPT5zZXJpYWxpemUodmFsKS5ib2R5OyRozY9fb25jZS5zdHJpbmdpZnkoc3RyaW5naWZ5KTtcbmhhcmRlbihzdHJpbmdpZnkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgcGFyc2U9KHN0cik9PlxudW5zZXJpYWxpemUoXG5oYXJkZW4oe1xuYm9keTpzdHIsXG5zbG90czpiYWRBcnJheX0pKTskaM2PX29uY2UucGFyc2UocGFyc2UpO1xuXG5cbmhhcmRlbihwYXJzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdpZnkiOlsic3RyaW5naWZ5Il0sInBhcnNlIjpbInBhcnNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACnDUk4qJwAAKicAACMAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vZW5jb2RlVG9TbWFsbGNhcHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFyc2hhbCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvQ2FwRGF0YSA9ICRozY9fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qc1wiLCBbW1wibWFrZURlY29kZUZyb21TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaM2PX2EgPT4gKG1ha2VFbmNvZGVUb1NtYWxsY2FwcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaM2PX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAu+NNiZwnAACcJwAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcscGFzc1N0eWxlT2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLEZhaWwscSxwYXNzU3R5bGVQcmVmaXhlcyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtbXCJwYXNzU3R5bGVQcmVmaXhlc1wiLCBbJGjNj19hID0+IChwYXNzU3R5bGVQcmVmaXhlcyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxzZXRQcm90b3R5cGVPZixpc309T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYW1lVmFsdWVaZXJvPSh4LHkpPT54PT09eXx8aXMoeCx5KTtcblxuY29uc3QgICAgICAgIHRyaXZpYWxDb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+XG4vL1xubGVmdDxyaWdodD8tMTpsZWZ0PT09cmlnaHQ/MDoxO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UudHJpdmlhbENvbXBhcmF0b3IodHJpdmlhbENvbXBhcmF0b3IpO1xuXG5jb25zdCBwYXNzU3R5bGVSYW5rcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5lbnRyaWVzKHBhc3NTdHlsZVByZWZpeGVzKVxuLy9cbi5zb3J0KChbX2xlZnRTdHlsZSxsZWZ0UHJlZml4ZXNdLFtfcmlnaHRTdHlsZSxyaWdodFByZWZpeGVzXSk9PntcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihsZWZ0UHJlZml4ZXMscmlnaHRQcmVmaXhlcyk7XG4gfSkuXG5tYXAoKFtwYXNzU3R5bGUscHJlZml4ZXNdLGluZGV4KT0+e1xuLy9cbi8vXG4vL1xucHJlZml4ZXM9PT1bLi4ucHJlZml4ZXNdLnNvcnQoKS5qb2luKCcnKXx8XG5GYWlsIGB1bnNvcnRlZCBwcmVmaXhlcyBmb3IgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfTogJHtxKHByZWZpeGVzKX1gO1xuY29uc3QgY292ZXI9W1xucHJlZml4ZXMuY2hhckF0KDApLFxuU3RyaW5nLmZyb21DaGFyQ29kZShwcmVmaXhlcy5jaGFyQ29kZUF0KHByZWZpeGVzLmxlbmd0aC0xKSsxKV07XG5cbnJldHVybltwYXNzU3R5bGUse2luZGV4LGNvdmVyfV07XG4gfSkpO1xuXG5cbnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVJhbmtzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVJhbmtzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFBhc3NTdHlsZUNvdmVyPShwYXNzU3R5bGUpPT5wYXNzU3R5bGVSYW5rc1twYXNzU3R5bGVdLmNvdmVyOyRozY9fb25jZS5nZXRQYXNzU3R5bGVDb3ZlcihnZXRQYXNzU3R5bGVDb3Zlcik7XG5oYXJkZW4oZ2V0UGFzc1N0eWxlQ292ZXIpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1lbW9PZlNvcnRlZD1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGNvbXBhcmF0b3JNaXJyb3JJbWFnZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9Pk5hTik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+e1xuaWYoc2FtZVZhbHVlWmVybyhsZWZ0LHJpZ2h0KSl7XG5yZXR1cm4gMDtcbiB9XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKFxucGFzc1N0eWxlUmFua3NbbGVmdFN0eWxlXS5pbmRleCxcbnBhc3NTdHlsZVJhbmtzW3JpZ2h0U3R5bGVdLmluZGV4KTtcblxuIH1cbi8qXG5cbiAgICAgKi9cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSdyZW1vdGFibGUnOntcbnJldHVybiBjb21wYXJlUmVtb3RhYmxlcyhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbi8vXG4vL1xucmV0dXJuIDA7XG4gfVxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzp7XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdzeW1ib2wnOntcbnJldHVybiBjb21wYXJhdG9yKFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKGxlZnQpLFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKHJpZ2h0KSk7XG5cbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihsZWZ0KSl7XG5hc3NlcnQoIU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIDE7XG4gfWVsc2UgaWYoTnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG5yZXR1cm4tMTtcbiB9XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdE5hbWVzLHJpZ2h0TmFtZXMpO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbnJldHVybiBjb21wYXJhdG9yKGxlZnRWYWx1ZXMscmlnaHRWYWx1ZXMpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbnJldHVybiBjb21wYXJhdG9yKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsYWJlbENvbXA9Y29tcGFyYXRvcihnZXRUYWcobGVmdCksZ2V0VGFnKHJpZ2h0KSk7XG5pZihsYWJlbENvbXAhPT0wKXtcbnJldHVybiBsYWJlbENvbXA7XG4gfVxucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5wYXlsb2FkLHJpZ2h0LnBheWxvYWQpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHBhc3NTdHlsZTogJHtxKGxlZnRTdHlsZSl9YDtcbiB9fVxuXG4vKiAgICAgICAgICAgICAgICovXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG91dGVyQ29tcGFyYXRvcj0oeCx5KT0+XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jb21wYXJhdG9yKHgseSl8fDA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbnRpQ29tcGFyYXRvcj0oeCx5KT0+b3V0ZXJDb21wYXJhdG9yKHkseCk7XG5cbm1lbW9PZlNvcnRlZC5zZXQob3V0ZXJDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KG91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcik7XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLnNldChhbnRpQ29tcGFyYXRvcixvdXRlckNvbXBhcmF0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtjb21wYXJhdG9yOm91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcn0pO1xuIH07XG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlQ29tcGFyYXRvcktpdChtYWtlQ29tcGFyYXRvcktpdCk7XG5jb25zdCAgICAgICAgY29tcGFyYXRvck1pcnJvckltYWdlPShjb21wYXJhdG9yKT0+XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLmdldChjb21wYXJhdG9yKTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJhdG9yTWlycm9ySW1hZ2UoY29tcGFyYXRvck1pcnJvckltYWdlKTtcbmNvbnN0ICAgICAgICBpc1JhbmtTb3J0ZWQ9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbmlmKHN1Yk1lbW9PZlNvcnRlZC5oYXMocGFzc2FibGVzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQocGFzc1N0eWxlT2YocGFzc2FibGVzKT09PSdjb3B5QXJyYXknKTtcbmZvcihsZXQgaT0xO2k8cGFzc2FibGVzLmxlbmd0aDtpKz0xKXtcbmlmKGNvbXBhcmUocGFzc2FibGVzW2ktMV0scGFzc2FibGVzW2ldKT49MSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnN1Yk1lbW9PZlNvcnRlZC5hZGQocGFzc2FibGVzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzUmFua1NvcnRlZChpc1JhbmtTb3J0ZWQpO1xuaGFyZGVuKGlzUmFua1NvcnRlZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UmFua1NvcnRlZD0oc29ydGVkLGNvbXBhcmUpPT5cbmlzUmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSl8fFxuLy9cbi8vXG5GYWlsIGBNdXN0IGJlIHJhbmsgc29ydGVkOiAke3NvcnRlZH0gdnMgJHtzb3J0QnlSYW5rKHNvcnRlZCxjb21wYXJlKX1gOyRozY9fb25jZS5hc3NlcnRSYW5rU29ydGVkKGFzc2VydFJhbmtTb3J0ZWQpO1xuaGFyZGVuKGFzc2VydFJhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzb3J0QnlSYW5rPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmlmKEFycmF5LmlzQXJyYXkocGFzc2FibGVzKSl7XG5oYXJkZW4ocGFzc2FibGVzKTtcbi8vXG4vL1xuLy9cbmlmKGlzUmFua1NvcnRlZChwYXNzYWJsZXMsY29tcGFyZSkpe1xucmV0dXJuIHBhc3NhYmxlcztcbiB9XG4gfVxuY29uc3QgdW5zb3J0ZWQ9Wy4uLnBhc3NhYmxlc107XG51bnNvcnRlZC5mb3JFYWNoKGhhcmRlbik7XG5jb25zdCBzb3J0ZWQ9dW5zb3J0ZWQuc29ydChjb21wYXJlKTtcbi8vXG4vL1xuLy9cbmlmKGNvbXBhcmUodHJ1ZSx1bmRlZmluZWQpPjApe1xubGV0IGk9c29ydGVkLmxlbmd0aC0xO1xud2hpbGUoaT49MCYmc29ydGVkW2ldPT09dW5kZWZpbmVkKWktPTE7XG5jb25zdCBuPXNvcnRlZC5sZW5ndGgtaS0xO1xuaWYobj4wJiZuPHNvcnRlZC5sZW5ndGgpe1xuc29ydGVkLmNvcHlXaXRoaW4obiwwKTtcbnNvcnRlZC5maWxsKC8qICAgICAgICAgICAgKi91bmRlZmluZWQsMCxuKTtcbiB9XG4gfVxuaGFyZGVuKHNvcnRlZCk7XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuc3ViTWVtb09mU29ydGVkLmFkZChzb3J0ZWQpO1xucmV0dXJuIHNvcnRlZDtcbiB9OyRozY9fb25jZS5zb3J0QnlSYW5rKHNvcnRCeVJhbmspO1xuaGFyZGVuKHNvcnRCeVJhbmspO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmFua1NlYXJjaD0oc29ydGVkLGNvbXBhcmUsa2V5LGJpYXM9J2xlZnRNb3N0Jyk9PntcbmFzc2VydFJhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpO1xubGV0IGxlZnQ9MDtcbmxldCByaWdodD1zb3J0ZWQubGVuZ3RoO1xud2hpbGUobGVmdDxyaWdodCl7XG5jb25zdCBtPU1hdGguZmxvb3IoKGxlZnQrcmlnaHQpLzIpO1xuY29uc3QgY29tcD1jb21wYXJlKHNvcnRlZFttXSxrZXkpO1xuaWYoY29tcDw9LTF8fGNvbXA9PT0wJiZiaWFzPT09J3JpZ2h0TW9zdCcpe1xubGVmdD1tKzE7XG4gfWVsc2V7XG5hc3NlcnQoY29tcD49MXx8Y29tcD09PTAmJmJpYXM9PT0nbGVmdE1vc3QnKTtcbnJpZ2h0PW07XG4gfVxuIH1cbnJldHVybiBiaWFzPT09J2xlZnRNb3N0Jz9sZWZ0OnJpZ2h0LTE7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW5kZXhDb3Zlcj0oc29ydGVkLGNvbXBhcmUsW2xlZnRLZXkscmlnaHRLZXldKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5jb25zdCBsZWZ0SW5kZXg9cmFua1NlYXJjaChzb3J0ZWQsY29tcGFyZSxsZWZ0S2V5LCdsZWZ0TW9zdCcpO1xuY29uc3QgcmlnaHRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLHJpZ2h0S2V5LCdyaWdodE1vc3QnKTtcbnJldHVybltsZWZ0SW5kZXgscmlnaHRJbmRleF07XG4gfTskaM2PX29uY2UuZ2V0SW5kZXhDb3ZlcihnZXRJbmRleENvdmVyKTtcbmhhcmRlbihnZXRJbmRleENvdmVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgRnVsbFJhbmtDb3Zlcj1oYXJkZW4oWycnLCd7J10pO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLkZ1bGxSYW5rQ292ZXIoRnVsbFJhbmtDb3Zlcik7XG5jb25zdCAgICAgICAgY292ZXJlZEVudHJpZXM9KHNvcnRlZCxbbGVmdEluZGV4LHJpZ2h0SW5kZXhdKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXRlcmFibGU9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT1sZWZ0SW5kZXg7XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKGk8PXJpZ2h0SW5kZXgpe1xuY29uc3QgZWxlbWVudD1zb3J0ZWRbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7dmFsdWU6W2ksZWxlbWVudF0sZG9uZTpmYWxzZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7dmFsdWU6dW5kZWZpbmVkLGRvbmU6dHJ1ZX0pO1xuIH1cbiB9fSk7XG5cbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5jb3ZlcmVkRW50cmllcyhjb3ZlcmVkRW50cmllcyk7XG5oYXJkZW4oY292ZXJlZEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWF4UmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik+PTA/YTpiO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWluUmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik8PTA/YTpiO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgdW5pb25SYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdW5pb25SYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1pblJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5tYXhSYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZSh1bmlvblJhbmtDb3ZlclBhaXIsWyd7JywnJ10pO1xuIH07JGjNj19vbmNlLnVuaW9uUmFua0NvdmVycyh1bmlvblJhbmtDb3ZlcnMpO1xuaGFyZGVuKHVuaW9uUmFua0NvdmVycyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnRlcnNlY3RSYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJzZWN0UmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5tYXhSYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWluUmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UoaW50ZXJzZWN0UmFua0NvdmVyUGFpcixbJycsJ3snXSk7XG4gfTskaM2PX29uY2UuaW50ZXJzZWN0UmFua0NvdmVycyhpbnRlcnNlY3RSYW5rQ292ZXJzKTtcblxuY29uc3QgICAgICAge2NvbXBhcmF0b3I6Y29tcGFyZVJhbmssYW50aUNvbXBhcmF0b3I6Y29tcGFyZUFudGlSYW5rfT1cbm1ha2VDb21wYXJhdG9yS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29tcGFyZVJhbmsoY29tcGFyZVJhbmspOyRozY9fb25jZS5jb21wYXJlQW50aVJhbmsoY29tcGFyZUFudGlSYW5rKTtcbmNvbnN0ICAgICAgICBtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdD0obG9uZ0xpdmVkPWZhbHNlKT0+e1xubGV0IG51bVNlZW49MDtcbi8vXG4vL1xuLy9cbmNvbnN0IE1hcENvbnN0cnVjdG9yPWxvbmdMaXZlZD9XZWFrTWFwOk1hcDtcbmNvbnN0IHNlZW49bmV3IE1hcENvbnN0cnVjdG9yKCk7XG5jb25zdCB0YWc9KHIpPT57XG5pZihzZWVuLmhhcyhyKSl7XG5yZXR1cm4gc2Vlbi5nZXQocik7XG4gfVxubnVtU2Vlbis9MTtcbnNlZW4uc2V0KHIsbnVtU2Vlbik7XG5yZXR1cm4gbnVtU2VlbjtcbiB9O1xuY29uc3QgY29tcGFyZVJlbW90YWJsZXM9KHgseSk9PmNvbXBhcmVSYW5rKHRhZyh4KSx0YWcoeSkpO1xucmV0dXJuIG1ha2VDb21wYXJhdG9yS2l0KGNvbXBhcmVSZW1vdGFibGVzKTtcbiB9OyRozY9fb25jZS5tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG5oYXJkZW4obWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJpdmlhbENvbXBhcmF0b3IiOlsidHJpdmlhbENvbXBhcmF0b3IiXSwiZ2V0UGFzc1N0eWxlQ292ZXIiOlsiZ2V0UGFzc1N0eWxlQ292ZXIiXSwibWFrZUNvbXBhcmF0b3JLaXQiOlsibWFrZUNvbXBhcmF0b3JLaXQiXSwiY29tcGFyYXRvck1pcnJvckltYWdlIjpbImNvbXBhcmF0b3JNaXJyb3JJbWFnZSJdLCJpc1JhbmtTb3J0ZWQiOlsiaXNSYW5rU29ydGVkIl0sImFzc2VydFJhbmtTb3J0ZWQiOlsiYXNzZXJ0UmFua1NvcnRlZCJdLCJzb3J0QnlSYW5rIjpbInNvcnRCeVJhbmsiXSwiZ2V0SW5kZXhDb3ZlciI6WyJnZXRJbmRleENvdmVyIl0sIkZ1bGxSYW5rQ292ZXIiOlsiRnVsbFJhbmtDb3ZlciJdLCJjb3ZlcmVkRW50cmllcyI6WyJjb3ZlcmVkRW50cmllcyJdLCJ1bmlvblJhbmtDb3ZlcnMiOlsidW5pb25SYW5rQ292ZXJzIl0sImludGVyc2VjdFJhbmtDb3ZlcnMiOlsiaW50ZXJzZWN0UmFua0NvdmVycyJdLCJjb21wYXJlUmFuayI6WyJjb21wYXJlUmFuayJdLCJjb21wYXJlQW50aVJhbmsiOlsiY29tcGFyZUFudGlSYW5rIl0sIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IjpbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAABAZW5kby9uYXQtdjUuMC4xMy9zcmMvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIk5hdCIsImlzTmF0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNOYXQsICduYW1lJywge3ZhbHVlOiBcImlzTmF0XCJ9KTskaM2PX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjNj19vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2l0ZXItaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW11dLFtcIi4vc3JjL2Vycm9yLmpzXCIsIFtdXSxbXCIuL3NyYy9yZW1vdGFibGUuanNcIiwgW11dLFtcIi4vc3JjL3N5bWJvbC5qc1wiLCBbXV0sW1wiLi9zcmMvc3RyaW5nLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGVPZi5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZVRhZ2dlZC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZS1mYXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOltbIm1hcEl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSxbImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiXV0sIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjpbWyJQQVNTX1NUWUxFIiwiUEFTU19TVFlMRSJdLFsiaXNPYmplY3QiLCJpc09iamVjdCJdLFsiYXNzZXJ0Q2hlY2tlciIsImFzc2VydENoZWNrZXIiXSxbImdldFRhZyIsImdldFRhZyJdLFsiaGFzT3duUHJvcGVydHlPZiIsImhhc093blByb3BlcnR5T2YiXV0sIi4vc3JjL2Vycm9yLmpzIjpbWyJnZXRFcnJvckNvbnN0cnVjdG9yIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLFsiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSJdXSwiLi9zcmMvcmVtb3RhYmxlLmpzIjpbWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl1dLCIuL3NyYy9zeW1ib2wuanMiOltbImFzc2VydFBhc3NhYmxlU3ltYm9sIiwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSxbImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIl0sWyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSxbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSIsInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdXSwiLi9zcmMvc3RyaW5nLmpzIjpbWyJpc1dlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIl0sWyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFBhc3NhYmxlU3RyaW5nIl1dLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6W1sicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdLFsiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiXSxbImFzc2VydFBhc3NhYmxlIiwiYXNzZXJ0UGFzc2FibGUiXSxbInRvUGFzc2FibGVFcnJvciIsInRvUGFzc2FibGVFcnJvciJdLFsidG9UaHJvd2FibGUiLCJ0b1Rocm93YWJsZSJdXSwiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6W1sibWFrZVRhZ2dlZCIsIm1ha2VUYWdnZWQiXV0sIi4vc3JjL21ha2UtZmFyLmpzIjpbWyJSZW1vdGFibGUiLCJSZW1vdGFibGUiXSxbIkZhciIsIkZhciJdLFsiVG9GYXJGdW5jdGlvbiIsIlRvRmFyRnVuY3Rpb24iXSxbIkdFVF9NRVRIT0RfTkFNRVMiLCJHRVRfTUVUSE9EX05BTUVTIl1dLCIuL3NyYy90eXBlR3VhcmRzLmpzIjpbWyJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZWNvcmQiXSxbImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSJdLFsiYXNzZXJ0UmVtb3RhYmxlIiwiYXNzZXJ0UmVtb3RhYmxlIl0sWyJpc1JlbW90YWJsZSIsImlzUmVtb3RhYmxlIl0sWyJpc1JlY29yZCIsImlzUmVjb3JkIl0sWyJpc0NvcHlBcnJheSIsImlzQ29weUFycmF5Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlBcnJheS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weUFycmF5SGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaM2PX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7Z2V0UHJvdG90eXBlT2Z9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5LHByb3RvdHlwZTphcnJheVByb3RvdHlwZX09QXJyYXk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNhbkJlVmFsaWQ9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZjaGVjayhmYWxzZSxYIGBBcnJheSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weUFycmF5SGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlBcnJheScsXG5cbmNhbkJlVmFsaWQsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PntcbmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuZ2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKT09PWFycmF5UHJvdG90eXBlfHxcbmFzc2VydC5mYWlsKFggYE1hbGZvcm1lZCBhcnJheTogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuLy9cbi8vXG5jb25zdCBsZW49LyogICAgICAgICAgICAgICAgICovXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsJ2xlbmd0aCcsZmFsc2UsYXNzZXJ0Q2hlY2tlcikudmFsdWU7XG5cbi8vXG4vL1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLGksdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9XG4vL1xub3duS2V5cyhjYW5kaWRhdGUpLmxlbmd0aD09PWxlbisxfHxcbmFzc2VydC5mYWlsKFggYEFycmF5cyBtdXN0IG5vdCBoYXZlIG5vbi1pbmRleGVzOiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4gfX0pOyRozY9fb25jZS5Db3B5QXJyYXlIZWxwZXIoQ29weUFycmF5SGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlBcnJheUhlbHBlciI6WyJDb3B5QXJyYXlIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzeyJpbXBvcnRzIjpbIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5UmVjb3JkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEUsaXNQcm9taXNlLGdldFRhZyxpc09iamVjdCxwYXNzU3R5bGVPZixtYWtlVGFnZ2VkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2VUYWdnZWQuanNcIiwgW1tcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZD1hc3luYyh2YWwpPT57XG4vL1xuLy9cbi8vXG5cbmlmKCFpc09iamVjdCh2YWwpKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbCk7XG4gfVxuaWYoaXNQcm9taXNlKHZhbCkpe1xucmV0dXJuIEUud2hlbih2YWwsKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlYyk7XG5jb25zdCB2YWxQcz1uYW1lcy5tYXAoKG5hbWUpPT5kZWVwbHlGdWxmaWxsZWQocmVjW25hbWVdKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5cbmhhcmRlbihmcm9tRW50cmllcyh2YWxzLm1hcCgoYyxpKT0+W25hbWVzW2ldLGNdKSkpKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5jb25zdCBhcnI9LyogICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdmFsUHM9YXJyLm1hcCgocCk9PmRlZXBseUZ1bGZpbGxlZChwKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5oYXJkZW4odmFscykpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0Z2Q9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHRhZz1nZXRUYWcodGdkKTtcbi8vXG5yZXR1cm4gRS53aGVuKGRlZXBseUZ1bGZpbGxlZCh0Z2QucGF5bG9hZCksKHBheWxvYWQpPT5cbm1ha2VUYWdnZWQodGFnLHBheWxvYWQpKTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZW09LyogICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiByZW07XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXJyPS8qICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiBlcnI7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBwcm9tPS8qICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3ZhbDtcbnJldHVybiBFLndoZW4ocHJvbSwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChYIGBVbmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFR5cGVFcnJvcik7XG4gfX1cblxuIH07JGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZChkZWVwbHlGdWxmaWxsZWQpO1xuaGFyZGVuKGRlZXBseUZ1bGZpbGxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWQiOlsiZGVlcGx5RnVsZmlsbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEObiqg0EgAANBIAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkVycm9ySGVscGVyIiwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyIsImdldEVycm9yQ29uc3RydWN0b3IiLCJpc0Vycm9yTGlrZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxoYXNPd24sZW50cmllc309T2JqZWN0O1xuXG4vL1xuLy9cbmNvbnN0IGVycm9yQ29uc3RydWN0b3JzPW5ldyBNYXAoXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW1xuWydFcnJvcicsRXJyb3JdLFxuWydFdmFsRXJyb3InLEV2YWxFcnJvcl0sXG5bJ1JhbmdlRXJyb3InLFJhbmdlRXJyb3JdLFxuWydSZWZlcmVuY2VFcnJvcicsUmVmZXJlbmNlRXJyb3JdLFxuWydTeW50YXhFcnJvcicsU3ludGF4RXJyb3JdLFxuWydUeXBlRXJyb3InLFR5cGVFcnJvcl0sXG5bJ1VSSUVycm9yJyxVUklFcnJvcl1cblxuLy9cbi8vXG4vL1xuLy9cbl0pO1xuXG5cbmlmKHR5cGVvZiBBZ2dyZWdhdGVFcnJvciE9PSd1bmRlZmluZWQnKXtcbi8vXG5lcnJvckNvbnN0cnVjdG9ycy5zZXQoJ0FnZ3JlZ2F0ZUVycm9yJyxBZ2dyZWdhdGVFcnJvcik7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEVycm9yQ29uc3RydWN0b3I9KG5hbWUpPT5lcnJvckNvbnN0cnVjdG9ycy5nZXQobmFtZSk7JGjNj19vbmNlLmdldEVycm9yQ29uc3RydWN0b3IoZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5oYXJkZW4oZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRXJyb3JMaWtlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybihcbmNhbmRpZGF0ZSBpbnN0YW5jZW9mIEVycm9yfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgRXJyb3IgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcbmhhcmRlbihjaGVja0Vycm9yTGlrZSk7XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0Vycm9yTGlrZT0oY2FuZGlkYXRlKT0+Y2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlKTskaM2PX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3I9KFxuY2FuZGlkYXRlLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoIWNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk7XG5jb25zdHtuYW1lfT1wcm90bztcbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IobmFtZSk7XG5pZihlcnJDb25zdHJ1Y3Rvcj09PXVuZGVmaW5lZHx8ZXJyQ29uc3RydWN0b3IucHJvdG90eXBlIT09cHJvdG8pe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGluaGVyaXQgZnJvbSBhbiBlcnJvciBjbGFzcyAucHJvdG90eXBlOiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKCEoJ21lc3NhZ2UnaW4gZGVzY3MpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBoYXZlIGFuIG93biBcIm1lc3NhZ2VcIiBzdHJpbmcgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuXG5yZXR1cm4gZW50cmllcyhkZXNjcykuZXZlcnkoKFtwcm9wTmFtZSxkZXNjXSk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2spKTtcblxuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgRXJyb3JIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonZXJyb3InLFxuXG5jYW5CZVZhbGlkOmNoZWNrRXJyb3JMaWtlLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyLGFzc2VydENoZWNrZXIpfSk7JGjNj19vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLHEsRmFpbCxhc3NlcnRDaGVja2VyLFBBU1NfU1RZTEUsYXNzZXJ0SWZhY2UsZ2V0SW50ZXJmYWNlT2YsUmVtb3RhYmxlSGVscGVyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaM2PX2EgPT4gKGFzc2VydElmYWNlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjNj19vbmNlLlJlbW90YWJsZShSZW1vdGFibGUpO1xuaGFyZGVuKFJlbW90YWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfTUVUSE9EX05BTUVTPSdfX2dldE1ldGhvZE5hbWVzX18nO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX01FVEhPRF9OQU1FUyhHRVRfTUVUSE9EX05BTUVTKTtcbmNvbnN0IGdldE1ldGhvZE5hbWVzTWV0aG9kPWhhcmRlbih7XG5bR0VUX01FVEhPRF9OQU1FU10oKXtcbnJldHVybiBnZXRNZXRob2ROYW1lcyh0aGlzKTtcbiB9fSlbXG5HRVRfTUVUSE9EX05BTUVTXTtcblxuY29uc3QgZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yPWhhcmRlbih7XG52YWx1ZTpnZXRNZXRob2ROYW1lc01ldGhvZCxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2UsXG53cml0YWJsZTpmYWxzZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBGYXI9KGZhck5hbWUscmVtb3RhYmxlPXVuZGVmaW5lZCk9PntcbmNvbnN0IHI9cmVtb3RhYmxlPT09dW5kZWZpbmVkPy8qICAgICAgICAgICAgKi97fTpyZW1vdGFibGU7XG5pZih0eXBlb2Ygcj09PSdvYmplY3QnJiYhKEdFVF9NRVRIT0RfTkFNRVMgaW4gcikpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEdFVF9NRVRIT0RfTkFNRVMsZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yKTtcbiB9XG5yZXR1cm4gUmVtb3RhYmxlKCBgQWxsZWdlZDogJHtmYXJOYW1lfWAsdW5kZWZpbmVkLHIpO1xuIH07JGjNj19vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjNj19vbmNlLlRvRmFyRnVuY3Rpb24oVG9GYXJGdW5jdGlvbik7XG5oYXJkZW4oVG9GYXJGdW5jdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJSZW1vdGFibGUiOlsiUmVtb3RhYmxlIl0sIkdFVF9NRVRIT0RfTkFNRVMiOlsiR0VUX01FVEhPRF9OQU1FUyJdLCJGYXIiOlsiRmFyIl0sIlRvRmFyRnVuY3Rpb24iOlsiVG9GYXJGdW5jdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2VUYWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiXSwiZXhwb3J0cyI6WyJtYWtlVGFnZ2VkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsUEFTU19TVFlMRSxhc3NlcnRQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlVGFnZ2VkKG1ha2VUYWdnZWQpO1xuaGFyZGVuKG1ha2VUYWdnZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRhZ2dlZCI6WyJtYWtlVGFnZ2VkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiQ1giLCJQQVNTX1NUWUxFIiwiYXNzZXJ0Q2hlY2tlciIsImNhbkJlTWV0aG9kIiwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCIsImNoZWNrUGFzc1N0eWxlIiwiY2hlY2tUYWdSZWNvcmQiLCJnZXRPd25EYXRhRGVzY3JpcHRvciIsImdldFRhZyIsImhhc093blByb3BlcnR5T2YiLCJpc09iamVjdCIsImlzVHlwZWRBcnJheSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxYLEZhaWwscSxhbm5vdGF0ZUVycm9yLG1ha2VFcnJvcixpc09iamVjdCxpc1R5cGVkQXJyYXksUEFTU19TVFlMRSxDb3B5QXJyYXlIZWxwZXIsQ29weVJlY29yZEhlbHBlcixUYWdnZWRIZWxwZXIsRXJyb3JIZWxwZXIsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc0Vycm9yTGlrZSxSZW1vdGFibGVIZWxwZXIsYXNzZXJ0UGFzc2FibGVTeW1ib2wsYXNzZXJ0U2FmZVByb21pc2UsYXNzZXJ0UGFzc2FibGVTdHJpbmc7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1R5cGVkQXJyYXlcIiwgWyRozY9fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weUFycmF5SGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5UmVjb3JkLmpzXCIsIFtbXCJDb3B5UmVjb3JkSGVscGVyXCIsIFskaM2PX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3RhZ2dlZC5qc1wiLCBbW1wiVGFnZ2VkSGVscGVyXCIsIFskaM2PX2EgPT4gKFRhZ2dlZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaM2PX2EgPT4gKEVycm9ySGVscGVyID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXV1dLFtcIi4vcmVtb3RhYmxlLmpzXCIsIFtbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dXV0sW1wiLi9zYWZlLXByb21pc2UuanNcIiwgW1tcImFzc2VydFNhZmVQcm9taXNlXCIsIFskaM2PX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi9zdHJpbmcuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3RyaW5nXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3RyaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKFBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKTtcbmNvbnN0ICAgICAgICBwYXNzU3R5bGVPZj1cbmdsb2JhbFRoaXMmJmdsb2JhbFRoaXNbUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2xdfHxcbm1ha2VQYXNzU3R5bGVPZihbXG5Db3B5QXJyYXlIZWxwZXIsXG5Db3B5UmVjb3JkSGVscGVyLFxuVGFnZ2VkSGVscGVyLFxuRXJyb3JIZWxwZXIsXG5SZW1vdGFibGVIZWxwZXJdKTskaM2PX29uY2UucGFzc1N0eWxlT2YocGFzc1N0eWxlT2YpO1xuXG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZT0odmFsKT0+e1xucGFzc1N0eWxlT2YodmFsKTsvL1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xuaGFyZGVuKGlzUGFzc2FibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KG5hbWUsZGVzYyk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MobmFtZSxkZXNjLHBhc3NTdHlsZU9mKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0b1Bhc3NhYmxlRXJyb3I9KGVycik9PntcbmhhcmRlbihlcnIpO1xuaWYoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mKSl7XG5yZXR1cm4gZXJyO1xuIH1cbmNvbnN0e25hbWUsbWVzc2FnZX09ZXJyO1xuY29uc3R7Y2F1c2U6Y2F1c2VEZXNjLGVycm9yczplcnJvcnNEZXNjfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZXJyKTtcbmxldCBjYXVzZTtcbmxldCBlcnJvcnM7XG5pZihjYXVzZURlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnY2F1c2UnLGNhdXNlRGVzYykpe1xuY2F1c2U9Y2F1c2VEZXNjLnZhbHVlO1xuIH1cbmlmKGVycm9yc0Rlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnZXJyb3JzJyxlcnJvcnNEZXNjKSl7XG5lcnJvcnM9ZXJyb3JzRGVzYy52YWx1ZTtcbiB9XG5cbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IoIGAke25hbWV9YCl8fEVycm9yO1xuY29uc3QgbmV3RXJyb3I9bWFrZUVycm9yKCBgJHttZXNzYWdlfWAsZXJyQ29uc3RydWN0b3Ise1xuLy9cbmNhdXNlLFxuZXJyb3JzfSk7XG5cbi8vXG5oYXJkZW4obmV3RXJyb3IpO1xuLy9cbi8vXG4vL1xuYW5ub3RhdGVFcnJvcihuZXdFcnJvcixYIGBjb3BpZWQgZnJvbSBlcnJvciAke2Vycn1gKTtcbnBhc3NTdHlsZU9mKG5ld0Vycm9yKT09PSdlcnJvcid8fFxuRmFpbCBgRXhwZWN0ZWQgJHtuZXdFcnJvcn0gdG8gYmUgYSBwYXNzYWJsZSBlcnJvcmA7XG5yZXR1cm4gbmV3RXJyb3I7XG4gfTskaM2PX29uY2UudG9QYXNzYWJsZUVycm9yKHRvUGFzc2FibGVFcnJvcik7XG5oYXJkZW4odG9QYXNzYWJsZUVycm9yKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvVGhyb3dhYmxlPShzcGVjaW1lbik9PntcbmhhcmRlbihzcGVjaW1lbik7XG5pZihpc0Vycm9yTGlrZShzcGVjaW1lbikpe1xucmV0dXJuIHRvUGFzc2FibGVFcnJvcigvKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuKTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYoaXNPYmplY3Qoc3BlY2ltZW4pKXtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGVsZW1lbnRzPS8qICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpe1xuZWxlbWVudD09PXRvVGhyb3dhYmxlKGVsZW1lbnQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VsZW1lbnR9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgdmFsIG9mIHZhbHVlcyhyZWMpKXtcbnZhbD09PXRvVGhyb3dhYmxlKHZhbCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7dmFsfWA7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmNvbnN0e3BheWxvYWR9PXRnO1xucGF5bG9hZD09PXRvVGhyb3dhYmxlKHBheWxvYWQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke3BheWxvYWR9YDtcbmJyZWFrO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVyPS8qICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5lcj09PXRvVGhyb3dhYmxlKGVyKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHtlcn1gO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBBICR7cShwYXNzU3R5bGUpfSBpcyBub3QgdGhyb3dhYmxlOiAke3NwZWNpbWVufWA7XG4gfX1cblxuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH07JGjNj19vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxoYXNPd25Qcm9wZXJ0eU9mLFBBU1NfU1RZTEUsY2hlY2tUYWdSZWNvcmQsY2hlY2tGdW5jdGlvblRhZ1JlY29yZCxpc09iamVjdCxnZXRUYWcsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaM2PX29uY2UuYXNzZXJ0SWZhY2UoYXNzZXJ0SWZhY2UpO1xuaGFyZGVuKGFzc2VydElmYWNlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGVQcm90b09mPShvcmlnaW5hbCxjaGVjayk9PntcbmlzT2JqZWN0KG9yaWdpbmFsKXx8XG5GYWlsIGBSZW1vdGFibGVzIG11c3QgYmUgb2JqZWN0cyBvciBmdW5jdGlvbnM6ICR7b3JpZ2luYWx9YDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5pZihcbnByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbnByb3RvPT09bnVsbHx8XG5wcm90bz09PUZ1bmN0aW9uLnByb3RvdHlwZSlcbntcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZW1vdGFibGVzIG11c3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZDogJHtxKG9yaWdpbmFsKX1gKTtcblxuIH1cblxuaWYodHlwZW9mIG9yaWdpbmFsPT09J29iamVjdCcpe1xuY29uc3QgcHJvdG9Qcm90bz1nZXRQcm90b3R5cGVPZihwcm90byk7XG5pZihwcm90b1Byb3RvIT09b2JqZWN0UHJvdG90eXBlJiZwcm90b1Byb3RvIT09bnVsbCl7XG4vL1xucmV0dXJuIGNoZWNrUmVtb3RhYmxlKHByb3RvLGNoZWNrKTtcbiB9XG5pZighY2hlY2tUYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfWVsc2UgaWYodHlwZW9mIG9yaWdpbmFsPT09J2Z1bmN0aW9uJyl7XG5pZighY2hlY2tGdW5jdGlvblRhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06e3ZhbHVlOmlmYWNlfSxcbi4uLnJlc3REZXNjc309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKTtcblxucmV0dXJuKFxuKG93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIFJlbW90YWJsZSBQcm90byAke293bktleXMocmVzdERlc2NzKX1gKSYmXG5jaGVja0lmYWNlKGlmYWNlLGNoZWNrKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbmZpcm1lZFJlbW90YWJsZXM9bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGU9KHZhbCxjaGVjayk9PntcbmlmKGNvbmZpcm1lZFJlbW90YWJsZXMuaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoIWlzRnJvemVuKHZhbCkpe1xucmV0dXJuKFxuISFjaGVjayYmQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7dmFsfWApO1xuXG4gfVxuLy9cbmlmKCFSZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZCh2YWwsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCByZXN1bHQ9Y2hlY2tSZW1vdGFibGVQcm90b09mKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29uZmlybWVkUmVtb3RhYmxlcy5hZGQodmFsKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU9mPSh2YWwpPT57XG5pZihcbiFpc09iamVjdCh2YWwpfHxcbnZhbFtQQVNTX1NUWUxFXSE9PSdyZW1vdGFibGUnfHxcbiFjaGVja1JlbW90YWJsZSh2YWwpKVxue1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbnJldHVybiBnZXRUYWcodmFsKTtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VPZihnZXRJbnRlcmZhY2VPZik7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlT2YpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidyZW1vdGFibGUnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuY29uc3QgdmFsaWRUeXBlPVxuKGlzT2JqZWN0KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLW9iamVjdHMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApJiYoXG4haXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIGFycmF5cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCk7XG5pZighdmFsaWRUeXBlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nb2JqZWN0Jyl7XG4vL1xuLy9cbnJldHVybiBvd25LZXlzKGRlc2NzKS5ldmVyeSgoa2V5KT0+e1xucmV0dXJuKFxuLy9cbihoYXNPd25Qcm9wZXJ0eU9mKGRlc2NzWy8qICAgICAgICAgICAgICAgICAqL2tleV0sJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIGFjY2Vzc29ycyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleT09PVN5bWJvbC50b1N0cmluZ1RhZyYmY2hlY2tJZmFjZShjYW5kaWRhdGVba2V5XSxjaGVjayl8fFxuKGNhbkJlTWV0aG9kKGNhbmRpZGF0ZVtrZXldKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggbm9uLW1ldGhvZHMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXkhPT1QQVNTX1NUWUxFfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBBIHBhc3MtYnktcmVtb3RlIGNhbm5vdCBzaGFkb3cgJHtxKFBBU1NfU1RZTEUpfWApKSk7XG5cbiB9KTtcbiB9ZWxzZSBpZih0eXBlb2YgY2FuZGlkYXRlPT09J2Z1bmN0aW9uJyl7XG4vL1xuLy9cbmNvbnN0e1xubmFtZTpuYW1lRGVzYyxcbmxlbmd0aDpsZW5ndGhEZXNjLFxuLy9cbltTeW1ib2wudG9TdHJpbmdUYWddOnRvU3RyaW5nVGFnRGVzYyxcbi4uLnJlc3REZXNjc309XG5kZXNjcztcbmNvbnN0IHJlc3RLZXlzPW93bktleXMocmVzdERlc2NzKTtcbnJldHVybihcbihuYW1lRGVzYyYmdHlwZW9mIG5hbWVEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZhciBmdW5jdGlvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiYoXG5sZW5ndGhEZXNjJiZ0eXBlb2YgbGVuZ3RoRGVzYy52YWx1ZT09PSdudW1iZXInfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIGxlbmd0aCBtdXN0IGJlIGEgbnVtYmVyLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxudG9TdHJpbmdUYWdEZXNjPT09dW5kZWZpbmVkfHxcbih0eXBlb2YgdG9TdHJpbmdUYWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmXG5jaGVja0lmYWNlKHRvU3RyaW5nVGFnRGVzYy52YWx1ZSxjaGVjaykpJiYoXG5yZXN0S2V5cy5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9ucyB1bmV4cGVjdGVkIHByb3BlcnRpZXMgYmVzaWRlcyAubmFtZSBhbmQgLmxlbmd0aCAke3Jlc3RLZXlzfWApKTtcblxuIH1cbnJldHVybiEhY2hlY2smJkNYKGNoZWNrKSBgdW5yZWNvZ25pemVkIHR5cGVvZiAke2NhbmRpZGF0ZX1gO1xuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUpPT5jaGVja1JlbW90YWJsZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlciksXG5cbmV2ZXJ5OihfcGFzc2FibGUsX2ZuKT0+dHJ1ZX0pOyRozY9fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vL1xuY29uc3QgaGFzV2VsbEZvcm1lZFN0cmluZ01ldGhvZD0hIVN0cmluZy5wcm90b3R5cGUuaXNXZWxsRm9ybWVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2VsbEZvcm1lZFN0cmluZz1oYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kP1xuKHN0cik9PnR5cGVvZiBzdHI9PT0nc3RyaW5nJyYmc3RyLmlzV2VsbEZvcm1lZCgpOlxuKHN0cik9PntcbmlmKHR5cGVvZiBzdHIhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGNvbnN0IGNoIG9mIHN0cil7XG4vL1xuLy9cbi8vXG5jb25zdCBjcD0vKiAgICAgICAgICAgICAgICAgKi9jaC5jb2RlUG9pbnRBdCgwKTtcbmlmKGNwPj0weGQ4MDAmJmNwPD0weGRmZmYpe1xuLy9cbi8vXG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRXZWxsRm9ybWVkU3RyaW5nKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuXG5jb25zdCBPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEU9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFJywnZGlzYWJsZWQnLFtcbidlbmFibGVkJ10pPT09XG4nZW5hYmxlZCc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN0cmluZz0oc3RyKT0+e1xudHlwZW9mIHN0cj09PSdzdHJpbmcnfHxGYWlsIGBFeHBlY3RlZCBzdHJpbmcgJHtzdHJ9YDtcbiFPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEV8fGFzc2VydFdlbGxGb3JtZWRTdHJpbmcoc3RyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN0cmluZyhhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTdHJpbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNXZWxsRm9ybWVkU3RyaW5nIjpbImlzV2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIjpbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSwiYXNzZXJ0UGFzc2FibGVTdHJpbmciOlsiYXNzZXJ0UGFzc2FibGVTdHJpbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zeW1ib2wuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIiwibmFtZUZvclBhc3NhYmxlU3ltYm9sIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3Qgd2VsbEtub3duU3ltYm9sTmFtZXM9bmV3IE1hcChcbm93bktleXMoU3ltYm9sKS5cbmZpbHRlcihcbihuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyYmdHlwZW9mIFN5bWJvbFtuYW1lXT09PSdzeW1ib2wnKS5cblxuZmlsdGVyKChuYW1lKT0+e1xuLy9cbiFuYW1lLnN0YXJ0c1dpdGgoJ0BAJyl8fFxuRmFpbCBgRGlkIG5vdCBleHBlY3QgU3ltYm9sIHRvIGhhdmUgYSBzeW1ib2wtdmFsdWVkIHByb3BlcnR5IG5hbWUgc3RhcnRpbmcgd2l0aCBcIkBAXCIgJHtxKFxubmFtZSlcbiB9YDtcbnJldHVybiB0cnVlO1xuIH0pXG4vL1xuLm1hcCgobmFtZSk9PltTeW1ib2xbbmFtZV0sIGBAQCR7bmFtZX1gXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlU3ltYm9sPShzeW0pPT5cbnR5cGVvZiBzeW09PT0nc3ltYm9sJyYmKFxudHlwZW9mIFN5bWJvbC5rZXlGb3Ioc3ltKT09PSdzdHJpbmcnfHx3ZWxsS25vd25TeW1ib2xOYW1lcy5oYXMoc3ltKSk7JGjNj19vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGVTeW1ib2woYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmFtZUZvclBhc3NhYmxlU3ltYm9sPShzeW0pPT57XG5jb25zdCBuYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKG5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHdlbGxLbm93blN5bWJvbE5hbWVzLmdldChzeW0pO1xuIH1cbmlmKG5hbWUuc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gYEBAJHtuYW1lfWA7XG4gfVxucmV0dXJuIG5hbWU7XG4gfTskaM2PX29uY2UubmFtZUZvclBhc3NhYmxlU3ltYm9sKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4obmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgQXRBdFByZWZpeFBhdHRlcm49L15AQCguKikkLztcbmhhcmRlbihBdEF0UHJlZml4UGF0dGVybik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc2FibGVTeW1ib2xGb3JOYW1lPShuYW1lKT0+e1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5pZihtYXRjaCl7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5pZihzdWZmaXguc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gU3ltYm9sLmZvcihzdWZmaXgpO1xuIH1lbHNle1xuY29uc3Qgc3ltPVN5bWJvbFtzdWZmaXhdO1xuaWYodHlwZW9mIHN5bT09PSdzeW1ib2wnKXtcbnJldHVybiBzeW07XG4gfVxuRmFpbCBgUmVzZXJ2ZWQgZm9yIHdlbGwga25vd24gc3ltYm9sICR7cShzdWZmaXgpfTogJHtxKG5hbWUpfWA7XG4gfVxuIH1cbnJldHVybiBTeW1ib2wuZm9yKG5hbWUpO1xuIH07JGjNj19vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEscGFzc1N0eWxlT2Y7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzQ29weUFycmF5PShhcnIpPT5wYXNzU3R5bGVPZihhcnIpPT09J2NvcHlBcnJheSc7JGjNj19vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaM2PX29uY2UuaXNSZWNvcmQoaXNSZWNvcmQpO1xuaGFyZGVuKGlzUmVjb3JkKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1JlbW90YWJsZT0ocmVtb3RhYmxlKT0+cGFzc1N0eWxlT2YocmVtb3RhYmxlKT09PSdyZW1vdGFibGUnOyRozY9fb25jZS5pc1JlbW90YWJsZShpc1JlbW90YWJsZSk7XG5oYXJkZW4oaXNSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb3B5QXJyYXk9KGFycmF5LG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnJheSk7XG5wYXNzU3R5bGU9PT0nY29weUFycmF5J3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mQXJyYXkpfSAke2FycmF5fSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRSZWNvcmQoYXNzZXJ0UmVjb3JkKTtcbmhhcmRlbihhc3NlcnRSZWNvcmQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRSZW1vdGFibGU9KFxucmVtb3RhYmxlLFxub3B0TmFtZU9mUmVtb3RhYmxlPSdBbGxlZ2VkIHJlbW90YWJsZScpPT5cbntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyZW1vdGFibGUpO1xucGFzc1N0eWxlPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlbW90YWJsZSl9ICR7cmVtb3RhYmxlfSBtdXN0IGJlIGEgcmVtb3RhYmxlLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlbW90YWJsZShhc3NlcnRSZW1vdGFibGUpO1xuaGFyZGVuKGFzc2VydFJlbW90YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlBcnJheSI6WyJpc0NvcHlBcnJheSJdLCJpc1JlY29yZCI6WyJpc1JlY29yZCJdLCJpc1JlbW90YWJsZSI6WyJpc1JlbW90YWJsZSJdLCJhc3NlcnRDb3B5QXJyYXkiOlsiYXNzZXJ0Q29weUFycmF5Il0sImFzc2VydFJlY29yZCI6WyJhc3NlcnRSZWNvcmQiXSwiYXNzZXJ0UmVtb3RhYmxlIjpbImFzc2VydFJlbW90YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2tleXMvY2hlY2tLZXkuanMiLCIuL3NyYy9rZXlzL2NvcHlTZXQuanMiLCIuL3NyYy9rZXlzL2NvcHlCYWcuanMiLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIiwiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiYmFnVW5pb24iLCJiYWdVbmlvbiIsImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNEaXNqb2ludCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciIsInNldENvbXBhcmUiLCJzZXRDb21wYXJlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFulOQw5MgAAOTIAACoAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLGFzc2VydFBhc3NhYmxlLEZhcixnZXRUYWcsaXNPYmplY3QsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxpZGVudENoZWNrZXIsWCxxLEZhaWwsY2hlY2tFbGVtZW50cyxtYWtlU2V0T2ZFbGVtZW50cyxjaGVja0JhZ0VudHJpZXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5U2V0LmpzXCIsIFtbXCJjaGVja0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNoZWNrRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImNoZWNrQmFnRW50cmllc1wiLCBbJGjNj19hID0+IChjaGVja0JhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1ByaW1pdGl2ZUtleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNPYmplY3QodmFsKSl7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBICR7cSh0eXBlb2YgdmFsKX0gY2Fubm90IGJlIGEgcHJpbWl0aXZlOiAke3ZhbH1gKSk7XG5cbiB9XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUHJpbWl0aXZlS2V5PSh2YWwpPT5jaGVja1ByaW1pdGl2ZUtleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNQcmltaXRpdmVLZXkoaXNQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGlzUHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQcmltaXRpdmVLZXk9KHZhbCk9PntcbmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQcmltaXRpdmVLZXkoYXNzZXJ0UHJpbWl0aXZlS2V5KTtcbmhhcmRlbihhc3NlcnRQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tTY2FsYXJLZXk9KHZhbCxjaGVjayk9PntcbmlmKGlzUHJpbWl0aXZlS2V5KHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5pZihwYXNzU3R5bGU9PT0ncmVtb3RhYmxlJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIGEgc2NhbGFyIGtleTogJHt2YWx9YCk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuY2hlY2tTY2FsYXJLZXkoY2hlY2tTY2FsYXJLZXkpO1xuY29uc3QgICAgICAgIGlzU2NhbGFyS2V5PSh2YWwpPT5jaGVja1NjYWxhcktleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNTY2FsYXJLZXkoaXNTY2FsYXJLZXkpO1xuaGFyZGVuKGlzU2NhbGFyS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRTY2FsYXJLZXk9KHZhbCk9PntcbmNoZWNrU2NhbGFyS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRTY2FsYXJLZXkoYXNzZXJ0U2NhbGFyS2V5KTtcbmhhcmRlbihhc3NlcnRTY2FsYXJLZXkpO1xuXG4vL1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3Qga2V5TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tLZXk9KHZhbCxjaGVjayk9PntcbmlmKCFpc09iamVjdCh2YWwpKXtcbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5pZihrZXlNZW1vLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5jb25zdCByZXN1bHQ9Y2hlY2tLZXlJbnRlcm5hbCh2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbi8vXG4vL1xuLy9cbmtleU1lbW8uYWRkKHZhbCk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrS2V5KGNoZWNrS2V5KTtcbmhhcmRlbihjaGVja0tleSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzS2V5PSh2YWwpPT5jaGVja0tleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNLZXkoaXNLZXkpO1xuaGFyZGVuKGlzS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXk9KHZhbCk9PntcbmNoZWNrS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRLZXkoYXNzZXJ0S2V5KTtcbmhhcmRlbihhc3NlcnRLZXkpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weVNldE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weVNldD0ocyxjaGVjayk9PntcbmlmKGNvcHlTZXRNZW1vLmhhcyhzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2Yocyk9PT0ndGFnZ2VkJyYmZ2V0VGFnKHMpPT09J2NvcHlTZXQnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlTZXQ6ICR7c31gKSkmJlxuY2hlY2tFbGVtZW50cyhzLnBheWxvYWQsY2hlY2spJiZcbmNoZWNrS2V5KHMucGF5bG9hZCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29weVNldE1lbW8uYWRkKHMpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tDb3B5U2V0KGNoZWNrQ29weVNldCk7XG5oYXJkZW4oY2hlY2tDb3B5U2V0KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5jaGVja0NvcHlTZXQocyxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmhhcmRlbihpc0NvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5U2V0PShzKT0+e1xuY2hlY2tDb3B5U2V0KHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weVNldChhc3NlcnRDb3B5U2V0KTtcbmhhcmRlbihhc3NlcnRDb3B5U2V0KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlTZXRLZXlzPShzKT0+e1xuYXNzZXJ0Q29weVNldChzKTtcbnJldHVybiBzLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0Q29weVNldEtleXMoZ2V0Q29weVNldEtleXMpO1xuaGFyZGVuKGdldENvcHlTZXRLZXlzKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5U2V0S2V5PShzLGZuKT0+XG5nZXRDb3B5U2V0S2V5cyhzKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weVNldEtleShldmVyeUNvcHlTZXRLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weVNldEtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weVNldD0oZWxlbWVudEl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZVNldE9mRWxlbWVudHMoZWxlbWVudEl0ZXIpO1xuYXNzZXJ0Q29weVNldChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weVNldChtYWtlQ29weVNldCk7XG5oYXJkZW4obWFrZUNvcHlTZXQpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weUJhZ01lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weUJhZz0oYixjaGVjayk9PntcbmlmKGNvcHlCYWdNZW1vLmhhcyhiKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2YoYik9PT0ndGFnZ2VkJyYmZ2V0VGFnKGIpPT09J2NvcHlCYWcnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlCYWc6ICR7Yn1gKSkmJlxuY2hlY2tCYWdFbnRyaWVzKGIucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkoYi5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5QmFnTWVtby5hZGQoYik7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlCYWcoY2hlY2tDb3B5QmFnKTtcbmhhcmRlbihjaGVja0NvcHlCYWcpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZz0oYik9PmNoZWNrQ29weUJhZyhiLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weUJhZyhpc0NvcHlCYWcpO1xuaGFyZGVuKGlzQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlCYWc9KGIpPT57XG5jaGVja0NvcHlCYWcoYixhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5QmFnKGFzc2VydENvcHlCYWcpO1xuaGFyZGVuKGFzc2VydENvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weUJhZ0VudHJpZXM9KGIpPT57XG5hc3NlcnRDb3B5QmFnKGIpO1xucmV0dXJuIGIucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5QmFnRW50cmllcyhnZXRDb3B5QmFnRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weUJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlCYWdFbnRyeT0oYixmbik9PlxuZ2V0Q29weUJhZ0VudHJpZXMoYikuZXZlcnkoKGVudHJ5LGluZGV4KT0+Zm4oZW50cnksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5QmFnRW50cnkoZXZlcnlDb3B5QmFnRW50cnkpO1xuaGFyZGVuKGV2ZXJ5Q29weUJhZ0VudHJ5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnPShiYWdFbnRyeUl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZUJhZ09mRW50cmllcyhiYWdFbnRyeUl0ZXIpO1xuYXNzZXJ0Q29weUJhZyhyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZyhtYWtlQ29weUJhZyk7XG5oYXJkZW4obWFrZUNvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWdGcm9tRWxlbWVudHM9KGVsZW1lbnRJdGVyKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3Qgc29ydGVkPXNvcnRCeVJhbmsoZWxlbWVudEl0ZXIsZnVsbENvbXBhcmUpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbnRyaWVzPVtdO1xuZm9yKGxldCBpPTA7aTxzb3J0ZWQubGVuZ3RoOyl7XG5jb25zdCBrPXNvcnRlZFtpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8c29ydGVkLmxlbmd0aCYmZnVsbENvbXBhcmUoayxzb3J0ZWRbal0pPT09MCl7XG5qKz0xO1xuIH1cbmVudHJpZXMucHVzaChbayxCaWdJbnQoai1pKV0pO1xuaT1qO1xuIH1cbnJldHVybiBtYWtlQ29weUJhZyhlbnRyaWVzKTtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZ0Zyb21FbGVtZW50cyhtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5oYXJkZW4obWFrZUNvcHlCYWdGcm9tRWxlbWVudHMpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weU1hcE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weU1hcD0obSxjaGVjayk9PntcbmlmKGNvcHlNYXBNZW1vLmhhcyhtKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighKHBhc3NTdHlsZU9mKG0pPT09J3RhZ2dlZCcmJmdldFRhZyhtKT09PSdjb3B5TWFwJykpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlNYXA6ICR7bX1gKTtcbiB9XG5jb25zdHtwYXlsb2FkfT1tO1xuaWYocGFzc1N0eWxlT2YocGF5bG9hZCkhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBiZSBhIHJlY29yZDogJHttfWApO1xuIH1cbmNvbnN0e2tleXMsdmFsdWVzLC4uLnJlc3R9PXBheWxvYWQ7XG5jb25zdCByZXN1bHQ9XG4ob3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAncyBwYXlsb2FkIG11c3Qgb25seSBoYXZlIC5rZXlzIGFuZCAudmFsdWVzOiAke219YCkpJiZcblxuY2hlY2tFbGVtZW50cyhrZXlzLGNoZWNrKSYmXG5jaGVja0tleShrZXlzLGNoZWNrKSYmKFxucGFzc1N0eWxlT2YodmFsdWVzKT09PSdjb3B5QXJyYXknfHxcbmNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIC52YWx1ZXMgbXVzdCBiZSBhIGNvcHlBcnJheTogJHttfWApKSYmKFxua2V5cy5sZW5ndGg9PT12YWx1ZXMubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBrZXlzIGFuZCB2YWx1ZXM6ICR7bX1gKSk7XG5cbmlmKHJlc3VsdCl7XG5jb3B5TWFwTWVtby5hZGQobSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlNYXAoY2hlY2tDb3B5TWFwKTtcbmhhcmRlbihjaGVja0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9PmNoZWNrQ29weU1hcChtLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuaGFyZGVuKGlzQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weU1hcD0obSk9PntcbmNoZWNrQ29weU1hcChtLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlNYXAoYXNzZXJ0Q29weU1hcCk7XG5oYXJkZW4oYXNzZXJ0Q29weU1hcCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBLZXlzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQua2V5cztcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwS2V5cyhnZXRDb3B5TWFwS2V5cyk7XG5oYXJkZW4oZ2V0Q29weU1hcEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwVmFsdWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQudmFsdWVzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBWYWx1ZXMoZ2V0Q29weU1hcFZhbHVlcyk7XG5oYXJkZW4oZ2V0Q29weU1hcFZhbHVlcyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cnlBcnJheT0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xucmV0dXJuIGhhcmRlbihrZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHVlc1tpXV0pKTtcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cnlBcnJheShnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJ5QXJyYXkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cmllcz0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xuY29uc3R7bGVuZ3RofT0vKiAgICAgICAgICAgICAgICAqL2tleXM7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT0wO1xucmV0dXJuIEZhcignQ29weU1hcCBlbnRyaWVzIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGk8bGVuZ3RoKXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6W2tleXNbaV0sdmFsdWVzW2ldXX0pO1xuaSs9MTtcbnJldHVybiByZXN1bHQ7XG4gfWVsc2V7XG5yZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcEtleT0obSxmbik9PlxuZ2V0Q29weU1hcEtleXMobSkuZXZlcnkoKGtleSxpbmRleCk9PmZuKGtleSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlNYXBLZXkoZXZlcnlDb3B5TWFwS2V5KTtcbmhhcmRlbihldmVyeUNvcHlNYXBLZXkpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcFZhbHVlPShtLGZuKT0+XG5nZXRDb3B5TWFwVmFsdWVzKG0pLmV2ZXJ5KCh2YWx1ZSxpbmRleCk9PmZuKHZhbHVlLGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcFZhbHVlKGV2ZXJ5Q29weU1hcFZhbHVlKTtcbmhhcmRlbihldmVyeUNvcHlNYXBWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvcHlNYXBLZXlTZXQ9KG0pPT5cbi8vXG5tYWtlVGFnZ2VkKCdjb3B5U2V0JyxtLnBheWxvYWQua2V5cyk7JGjNj19vbmNlLmNvcHlNYXBLZXlTZXQoY29weU1hcEtleVNldCk7XG5oYXJkZW4oY29weU1hcEtleVNldCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5TWFwPShlbnRyaWVzKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRFbnRyaWVzPXNvcnRCeVJhbmsoZW50cmllcyxjb21wYXJlQW50aVJhbmspO1xuY29uc3Qga2V5cz1zb3J0ZWRFbnRyaWVzLm1hcCgoW2ssX3ZdKT0+ayk7XG5jb25zdCB2YWx1ZXM9c29ydGVkRW50cmllcy5tYXAoKFtfayx2XSk9PnYpO1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2NvcHlNYXAnLHtrZXlzLHZhbHVlc30pO1xuYXNzZXJ0Q29weU1hcChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weU1hcChtYWtlQ29weU1hcCk7XG5oYXJkZW4obWFrZUNvcHlNYXApO1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0tleUludGVybmFsPSh2YWwsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrS2V5KGNoaWxkLGNoZWNrKTtcblxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbnJldHVybiBPYmplY3QudmFsdWVzKHZhbCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5yZXR1cm4gdmFsLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHZhbCk7XG5zd2l0Y2godGFnKXtcbmNhc2UnY29weVNldCc6e1xucmV0dXJuIGNoZWNrQ29weVNldCh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weUJhZyc6e1xucmV0dXJuIGNoZWNrQ29weUJhZyh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weU1hcCc6e1xucmV0dXJuKFxuY2hlY2tDb3B5TWFwKHZhbCxjaGVjaykmJlxuLy9cbi8vXG4vL1xuZXZlcnlDb3B5TWFwVmFsdWUodmFsLGNoZWNrSXQpKTtcblxuIH1cbmRlZmF1bHQ6e1xucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuY2hlY2soZmFsc2UsWCBgQSBwYXNzYWJsZSB0YWdnZWQgJHtxKHRhZyl9IGlzIG5vdCBhIGtleTogJHt2YWx9YCkpO1xuXG4gfX1cblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIHRydWU7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBrZXlgKTtcbiB9XG5kZWZhdWx0Ontcbi8vXG4vL1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3ZhbH1gO1xuIH19XG5cbiB9O1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcmltaXRpdmVLZXkiOlsiaXNQcmltaXRpdmVLZXkiXSwiYXNzZXJ0UHJpbWl0aXZlS2V5IjpbImFzc2VydFByaW1pdGl2ZUtleSJdLCJjaGVja1NjYWxhcktleSI6WyJjaGVja1NjYWxhcktleSJdLCJpc1NjYWxhcktleSI6WyJpc1NjYWxhcktleSJdLCJhc3NlcnRTY2FsYXJLZXkiOlsiYXNzZXJ0U2NhbGFyS2V5Il0sImNoZWNrS2V5IjpbImNoZWNrS2V5Il0sImlzS2V5IjpbImlzS2V5Il0sImFzc2VydEtleSI6WyJhc3NlcnRLZXkiXSwiY2hlY2tDb3B5U2V0IjpbImNoZWNrQ29weVNldCJdLCJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImFzc2VydENvcHlTZXQiOlsiYXNzZXJ0Q29weVNldCJdLCJnZXRDb3B5U2V0S2V5cyI6WyJnZXRDb3B5U2V0S2V5cyJdLCJldmVyeUNvcHlTZXRLZXkiOlsiZXZlcnlDb3B5U2V0S2V5Il0sIm1ha2VDb3B5U2V0IjpbIm1ha2VDb3B5U2V0Il0sImNoZWNrQ29weUJhZyI6WyJjaGVja0NvcHlCYWciXSwiaXNDb3B5QmFnIjpbImlzQ29weUJhZyJdLCJhc3NlcnRDb3B5QmFnIjpbImFzc2VydENvcHlCYWciXSwiZ2V0Q29weUJhZ0VudHJpZXMiOlsiZ2V0Q29weUJhZ0VudHJpZXMiXSwiZXZlcnlDb3B5QmFnRW50cnkiOlsiZXZlcnlDb3B5QmFnRW50cnkiXSwibWFrZUNvcHlCYWciOlsibWFrZUNvcHlCYWciXSwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiOlsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSwiY2hlY2tDb3B5TWFwIjpbImNoZWNrQ29weU1hcCJdLCJpc0NvcHlNYXAiOlsiaXNDb3B5TWFwIl0sImFzc2VydENvcHlNYXAiOlsiYXNzZXJ0Q29weU1hcCJdLCJnZXRDb3B5TWFwS2V5cyI6WyJnZXRDb3B5TWFwS2V5cyJdLCJnZXRDb3B5TWFwVmFsdWVzIjpbImdldENvcHlNYXBWYWx1ZXMiXSwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiOlsiZ2V0Q29weU1hcEVudHJ5QXJyYXkiXSwiZ2V0Q29weU1hcEVudHJpZXMiOlsiZ2V0Q29weU1hcEVudHJpZXMiXSwiZXZlcnlDb3B5TWFwS2V5IjpbImV2ZXJ5Q29weU1hcEtleSJdLCJldmVyeUNvcHlNYXBWYWx1ZSI6WyJldmVyeUNvcHlNYXBWYWx1ZSJdLCJjb3B5TWFwS2V5U2V0IjpbImNvcHlNYXBLZXlTZXQiXSwibWFrZUNvcHlNYXAiOlsibWFrZUNvcHlNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhD+LBxMVAAATFQAALQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jaGVja0tleS5qcyIsIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJiYWdDb21wYXJlIiwiY29tcGFyZUtleXMiLCJrZXlFUSIsImtleUdUIiwia2V5R1RFIiwia2V5TFQiLCJrZXlMVEUiLCJzZXRDb21wYXJlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGdldFRhZyxjb21wYXJlUmFuayxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsdHJpdmlhbENvbXBhcmF0b3IscSxGYWlsLGFzc2VydEtleSxnZXRDb3B5QmFnRW50cmllcyxnZXRDb3B5TWFwRW50cnlBcnJheSxnZXRDb3B5U2V0S2V5cyxtYWtlQ29tcGFyZUNvbGxlY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV0sW1widHJpdmlhbENvbXBhcmF0b3JcIiwgWyRozY9fYSA9PiAodHJpdmlhbENvbXBhcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyeUFycmF5XCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dXV0sW1wiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wibWFrZUNvbXBhcmVDb2xsZWN0aW9uXCIsIFskaM2PX2EgPT4gKG1ha2VDb21wYXJlQ29sbGVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzZXRDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4ocyk9PmhhcmRlbihnZXRDb3B5U2V0S2V5cyhzKS5tYXAoKGtleSk9PltrZXksMV0pKSxcblxuMCxcbnRyaXZpYWxDb21wYXJhdG9yKTskaM2PX29uY2Uuc2V0Q29tcGFyZShzZXRDb21wYXJlKTtcblxuaGFyZGVuKHNldENvbXBhcmUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYmFnQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5QmFnRW50cmllcyxcbjBuLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5iYWdDb21wYXJlKGJhZ0NvbXBhcmUpO1xuXG5oYXJkZW4oYmFnQ29tcGFyZSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgQUJTRU5UPVN5bWJvbCgnYWJzZW50Jyk7XG4vKlxuXG5cblxuXG5cblxuICovXG4vL1xuY29uc3QgX21hcENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weU1hcEVudHJ5QXJyYXksXG5BQlNFTlQsXG4obGVmdFZhbHVlLHJpZ2h0VmFsdWUpPT57XG5pZihsZWZ0VmFsdWU9PT1BQlNFTlQmJnJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xudGhyb3cgRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgYWJzZW50IGVudHJ5IHBhaXJgO1xuIH1lbHNlIGlmKGxlZnRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4tMTtcbiB9ZWxzZSBpZihyaWdodFZhbHVlPT09QUJTRU5UKXtcbnJldHVybiAxO1xuIH1lbHNle1xuLy9cbnJldHVybiBjb21wYXJlS2V5cyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG4gfVxuIH0pO1xuXG5oYXJkZW4oX21hcENvbXBhcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29tcGFyZUtleXM9KGxlZnQscmlnaHQpPT57XG5hc3NlcnRLZXkobGVmdCk7XG5hc3NlcnRLZXkocmlnaHQpO1xuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ251bWJlcic6e1xuY29uc3QgcmFua0NvbXA9Y29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG5pZihyYW5rQ29tcD09PTApe1xucmV0dXJuIDA7XG4gfVxuaWYoTnVtYmVyLmlzTmFOKGxlZnQpfHxOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbi8vXG5hc3NlcnQoIU51bWJlci5pc05hTihsZWZ0KXx8IU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuLy9cbnJldHVybiByYW5rQ29tcDtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuaWYobGVmdD09PXJpZ2h0KXtcbnJldHVybiAwO1xuIH1cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuLy9cbmNvbnN0IHJlc3VsdD1jb21wYXJlS2V5cyhsZWZ0W2ldLHJpZ2h0W2ldKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuLy9cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuLy9cbmlmKCFrZXlFUShsZWZ0TmFtZXMscmlnaHROYW1lcykpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbi8vXG5jb25zdCBsZWZ0VmFsdWVzPXJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyk7XG4vL1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xuLy9cbi8vXG5sZXQgcmVzdWx0PTA7XG5mb3IobGV0IGk9MDtpPGxlZnRWYWx1ZXMubGVuZ3RoO2krPTEpe1xuY29uc3QgY29tcD1jb21wYXJlS2V5cyhsZWZ0VmFsdWVzW2ldLHJpZ2h0VmFsdWVzW2ldKTtcbmlmKE51bWJlci5pc05hTihjb21wKSl7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKHJlc3VsdCE9PWNvbXAmJmNvbXAhPT0wKXtcbmlmKHJlc3VsdD09PTApe1xucmVzdWx0PWNvbXA7XG4gfWVsc2V7XG5hc3NlcnQoXG5yZXN1bHQ9PT0tMSYmY29tcD09PTF8fHJlc3VsdD09PTEmJmNvbXA9PT0tMSk7XG5cbnJldHVybiBOYU47XG4gfVxuIH1cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxlZnRUYWc9Z2V0VGFnKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0VGFnPWdldFRhZyhyaWdodCk7XG5pZihsZWZ0VGFnIT09cmlnaHRUYWcpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRUYWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xucmV0dXJuIHNldENvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG4vL1xucmV0dXJuIGJhZ0NvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbnRocm93IEZhaWwgYE1hcCBjb21wYXJpc29uIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6ICR7bGVmdH0gdnMgJHtyaWdodH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCB0YWcgJHtxKGxlZnRUYWcpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKGxlZnRTdHlsZSl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfTskaM2PX29uY2UuY29tcGFyZUtleXMoY29tcGFyZUtleXMpO1xuaGFyZGVuKGNvbXBhcmVLZXlzKTtcblxuY29uc3QgICAgICAgIGtleUxUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8MDskaM2PX29uY2Uua2V5TFQoa2V5TFQpO1xuaGFyZGVuKGtleUxUKTtcblxuY29uc3QgICAgICAgIGtleUxURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPD0wOyRozY9fb25jZS5rZXlMVEUoa2V5TFRFKTtcbmhhcmRlbihrZXlMVEUpO1xuXG5jb25zdCAgICAgICAga2V5RVE9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT09PTA7JGjNj19vbmNlLmtleUVRKGtleUVRKTtcbmhhcmRlbihrZXlFUSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT49MDskaM2PX29uY2Uua2V5R1RFKGtleUdURSk7XG5oYXJkZW4oa2V5R1RFKTtcblxuY29uc3QgICAgICAgIGtleUdUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+MDskaM2PX29uY2Uua2V5R1Qoa2V5R1QpO1xuaGFyZGVuKGtleUdUKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNldENvbXBhcmUiOlsic2V0Q29tcGFyZSJdLCJiYWdDb21wYXJlIjpbImJhZ0NvbXBhcmUiXSwiY29tcGFyZUtleXMiOlsiY29tcGFyZUtleXMiXSwia2V5TFQiOlsia2V5TFQiXSwia2V5TFRFIjpbImtleUxURSJdLCJrZXlFUSI6WyJrZXlFUSJdLCJrZXlHVEUiOlsia2V5R1RFIl0sImtleUdUIjpbImtleUdUIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEybZhbHDQAAxw0AACkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0QmFnRW50cmllcyIsImFzc2VydE5vRHVwbGljYXRlS2V5cyIsImNoZWNrQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyIsIm1ha2VCYWdPZkVudHJpZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChpc1JhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG4vL1xuLy9cbi8vXG5iYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllcyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWJhZ0VudHJpZXNbaS0xXVswXTtcbmNvbnN0IGsxPWJhZ0VudHJpZXNbaV1bMF07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlS2V5cyhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0QmFnRW50cmllcyhhc3NlcnRCYWdFbnRyaWVzKTtcbmhhcmRlbihhc3NlcnRCYWdFbnRyaWVzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0JhZ0VudHJpZXM9KGJhZ0VudHJpZXNMaXN0KT0+e1xuY29uc3QgYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRCYWdFbnRyaWVzKGJhZ0VudHJpZXMpO1xucmV0dXJuIGJhZ0VudHJpZXM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRozY9fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5lbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWVsZW1lbnRzW2ktMV07XG5jb25zdCBrMT1lbGVtZW50c1tpXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydE5vRHVwbGljYXRlcyhhc3NlcnROb0R1cGxpY2F0ZXMpO1xuY29uc3QgICAgICAgIGNoZWNrRWxlbWVudHM9KGVsZW1lbnRzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoZWxlbWVudHMpIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIGEgY29weUFycmF5OiAke2VsZW1lbnRzfWApO1xuXG4gfVxuaWYoIWlzUmFua1NvcnRlZChlbGVtZW50cyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGtleXMgb2YgYSBjb3B5U2V0IG9yIGNvcHlNYXAgbXVzdCBiZSBzb3J0ZWQgaW4gcmV2ZXJzZSByYW5rIG9yZGVyOiAke2VsZW1lbnRzfWApO1xuXG4gfVxucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLHVuZGVmaW5lZCxjaGVjayk7XG4gfTskaM2PX29uY2UuY2hlY2tFbGVtZW50cyhjaGVja0VsZW1lbnRzKTtcbmhhcmRlbihjaGVja0VsZW1lbnRzKTtcblxuY29uc3QgICAgICAgIGFzc2VydEVsZW1lbnRzPShlbGVtZW50cyk9PntcbmNoZWNrRWxlbWVudHMoZWxlbWVudHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0RWxlbWVudHMoYXNzZXJ0RWxlbWVudHMpO1xuaGFyZGVuKGFzc2VydEVsZW1lbnRzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0VsZW1lbnRzPShlbGVtZW50c0xpc3QpPT57XG5jb25zdCBlbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0RWxlbWVudHMoZWxlbWVudHMpO1xucmV0dXJuIGVsZW1lbnRzO1xuIH07JGjNj19vbmNlLmNvZXJjZVRvRWxlbWVudHMoY29lcmNlVG9FbGVtZW50cyk7XG5oYXJkZW4oY29lcmNlVG9FbGVtZW50cyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU2V0T2ZFbGVtZW50cz0oZWxlbWVudEl0ZXIpPT5cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLGNvZXJjZVRvRWxlbWVudHMoZWxlbWVudEl0ZXIpKTskaM2PX29uY2UubWFrZVNldE9mRWxlbWVudHMobWFrZVNldE9mRWxlbWVudHMpO1xuaGFyZGVuKG1ha2VTZXRPZkVsZW1lbnRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydE5vRHVwbGljYXRlcyI6WyJhc3NlcnROb0R1cGxpY2F0ZXMiXSwiY2hlY2tFbGVtZW50cyI6WyJjaGVja0VsZW1lbnRzIl0sImFzc2VydEVsZW1lbnRzIjpbImFzc2VydEVsZW1lbnRzIl0sImNvZXJjZVRvRWxlbWVudHMiOlsiY29lcmNlVG9FbGVtZW50cyJdLCJtYWtlU2V0T2ZFbGVtZW50cyI6WyJtYWtlU2V0T2ZFbGVtZW50cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyIsIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxtYWtlSXRlcmF0b3IsbWFrZUFycmF5SXRlcmF0b3IscSxGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0UmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUFycmF5SXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUFycmF5SXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzPShlbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuLy9cbmFzc2VydFJhbmtTb3J0ZWQoZW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVudHJpZXM7XG5sZXQgaT0wO1xubGV0IHNhbWVSYW5rSXRlcmF0b3I7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5pZihzYW1lUmFua0l0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1zYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbmlmKCFyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9dW5kZWZpbmVkO1xuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWVudHJpZXNbaV07XG4vL1xubGV0IGo9aSsxO1xud2hpbGUoajxsZW5ndGgmJnJhbmtDb21wYXJlKGVudHJ5WzBdLGVudHJpZXNbal1bMF0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuLy9cbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCB0aWVzPWVudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcblxuLy9cbi8vXG4vL1xuY29uc3Qgc29ydGVkVGllcz1zb3J0QnlSYW5rKHRpZXMsZnVsbENvbXBhcmUpO1xuZm9yKGxldCBrPTE7azxzb3J0ZWRUaWVzLmxlbmd0aDtrKz0xKXtcbi8vXG5jb25zdFtrZXkwXT1zb3J0ZWRUaWVzW2stMV07XG5jb25zdFtrZXkxXT1zb3J0ZWRUaWVzW2tdO1xuTWF0aC5zaWduKGZ1bGxDb21wYXJlKGtleTAsa2V5MSkpfHxcbkZhaWwgYER1cGxpY2F0ZSBlbnRyeSBrZXk6ICR7a2V5MH1gO1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9bWFrZUFycmF5SXRlcmF0b3Ioc29ydGVkVGllcyk7XG5yZXR1cm4gc2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH0pO1xuIH07XG5oYXJkZW4oZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcz0oXG5jMSxcbmMyLFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKT0+XG57XG5jb25zdCBlMT1nZXRFbnRyaWVzKGMxKTtcbmNvbnN0IGUyPWdldEVudHJpZXMoYzIpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3QgeD1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUxLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTIsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcblxuLy9cbi8vXG5sZXQgeERvbmU7XG5sZXQgeEtleTtcbmxldCB4VmFsdWU7XG5sZXQgeURvbmU7XG5sZXQgeUtleTtcbmxldCB5VmFsdWU7XG5jb25zdCBub25FbnRyeT1bdW5kZWZpbmVkLHVuZGVmaW5lZF07XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eFZhbHVlO1xuKHtkb25lOnhEb25lLHZhbHVlOlt4S2V5LHhWYWx1ZV09bm9uRW50cnl9PXgubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRYKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eVZhbHVlO1xuKHtkb25lOnlEb25lLHZhbHVlOlt5S2V5LHlWYWx1ZV09bm9uRW50cnl9PXkubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRZKCk7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbnZhbHVlPVt1bmRlZmluZWQsYWJzZW50VmFsdWUsYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKHhEb25lKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNlIGlmKHlEb25lKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNle1xuLy9cbi8vXG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHhLZXkseUtleSk7XG5pZihjb21wPT09MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLG5leHRZKCldO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZihjb21wPjApe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbmV4cGVjdGVkIGtleSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7eEtleX0gdnMgJHt5S2V5fWA7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5oYXJkZW4oZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJlQ29sbGVjdGlvbj0oZ2V0RW50cmllcyxhYnNlbnRWYWx1ZSxjb21wYXJlVmFsdWVzKT0+XG5oYXJkZW4oKGxlZnQscmlnaHQpPT57XG5jb25zdCBtZXJnZWQ9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5sZWZ0LFxucmlnaHQsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpO1xuXG5sZXQgbGVmdElzQmlnZ2VyPWZhbHNlO1xubGV0IHJpZ2h0SXNCaWdnZXI9ZmFsc2U7XG5mb3IoY29uc3RbX2tleSxsZWZ0VmFsdWUscmlnaHRWYWx1ZV1vZiBtZXJnZWQpe1xuY29uc3QgY29tcD1jb21wYXJlVmFsdWVzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbmlmKGNvbXA9PT0wKXtcbi8vXG5jb250aW51ZTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnJpZ2h0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZSBpZihjb21wPjApe1xuLy9cbmxlZnRJc0JpZ2dlcj10cnVlO1xuIH1lbHNle1xuTnVtYmVyLmlzTmFOKGNvbXApfHxcbi8vXG5GYWlsIGBVbmV4cGVjdGVkIHZhbHVlIGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHtsZWZ0VmFsdWV9IHZzICR7cmlnaHRWYWx1ZX1gO1xucmV0dXJuIE5hTjtcbiB9XG5pZihsZWZ0SXNCaWdnZXImJnJpZ2h0SXNCaWdnZXIpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuLy9cbnJldHVybiBsZWZ0SXNCaWdnZXI/MTpyaWdodElzQmlnZ2VyPy0xOjA7XG4gfSk7JGjNj19vbmNlLm1ha2VDb21wYXJlQ29sbGVjdGlvbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xuaGFyZGVuKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyJdLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iOlsibWFrZUNvbXBhcmVDb2xsZWN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFs61ctSFgAAUhYAADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCIsImJhZ0ludGVyc2VjdGlvbiIsImJhZ0lzRGlzam9pbnQiLCJiYWdJc1N1cGVyYmFnIiwiYmFnVW5pb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZUtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWdXaW5kb3dSZXNvcnQ9KGJhZ0VudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGJhZ0VudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1iYWdFbnRyaWVzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoXG5qPGxlbmd0aCYmXG5yYW5rQ29tcGFyZShlbnRyeVswXSxiYWdFbnRyaWVzW2pdWzBdKT09PTApXG57XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49YmFnRW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlS2V5cyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOltudWxsLDBuXX0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4YmFnRW50cmllcyx5YmFnRW50cmllcyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9YmFnV2luZG93UmVzb3J0KHhiYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz1iYWdXaW5kb3dSZXNvcnQoeWJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhjO1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeWM7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eERvbmUsXG52YWx1ZTpbeCx4Y119PVxueGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp5RG9uZSxcbnZhbHVlOlt5LHljXX09XG55aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LHhjLHljXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzU3VwZXJiYWc9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM8eWMpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyVW5pb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnJlc3VsdC5wdXNoKFttLHhjK3ljXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yzw9eWM/eGM6eWM7XG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjLXljO1xubWM+PTBufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKG1jPj0xbil7XG4vL1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oYmFnSXRlck9wKT0+KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+XG5iYWdJdGVyT3AobWVyZ2UoeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpKTtcblxuY29uc3QgYmFnRW50cmllc0lzU3VwZXJiYWc9bWVyZ2VpZnkoYmFnSXRlcklzU3VwZXJiYWcpO1xuY29uc3QgYmFnRW50cmllc0lzRGlzam9pbnQ9bWVyZ2VpZnkoYmFnSXRlcklzRGlzam9pbnQpO1xuY29uc3QgYmFnRW50cmllc1VuaW9uPW1lcmdlaWZ5KGJhZ0l0ZXJVbmlvbik7XG5jb25zdCBiYWdFbnRyaWVzSW50ZXJzZWN0aW9uPW1lcmdlaWZ5KGJhZ0l0ZXJJbnRlcnNlY3Rpb24pO1xuY29uc3QgYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoYmFnSXRlckRpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdCYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbmJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKTtcblxuY29uc3QgYmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBiYWdJc1N1cGVyYmFnPXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNTdXBlcmJhZyk7JGjNj19vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRozY9fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRozY9fb25jZS5iYWdVbmlvbihiYWdVbmlvbik7XG5jb25zdCAgICAgICAgYmFnSW50ZXJzZWN0aW9uPWJhZ2lmeShiYWdFbnRyaWVzSW50ZXJzZWN0aW9uKTskaM2PX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB9YIszixwAAIscAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZXMsbWFrZVNldE9mRWxlbWVudHM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlc1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZXMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgd2luZG93UmVzb3J0PShlbGVtZW50cyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoZWxlbWVudHMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgdmFsdWU9ZWxlbWVudHNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUodmFsdWUsZWxlbWVudHNbal0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49ZWxlbWVudHMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpudWxsfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhlbGVtZW50cyx5ZWxlbWVudHMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPXdpbmRvd1Jlc29ydCh4ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPXdpbmRvd1Jlc29ydCh5ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnhEb25lLHZhbHVlOnh9PXhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnlEb25lLHZhbHVlOnl9PXlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gsMW4sMW5dO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuY29uc3QgaXRlcklzU3VwZXJzZXQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4YyxfeWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckNvbXBhcmU9KHh5aSk9PntcbmxldCBsb25lWT1mYWxzZTtcbmxldCBsb25lWD1mYWxzZTtcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xubG9uZVk9dHJ1ZTtcbiB9XG5pZih5Yz09PTBuKXtcbi8vXG5sb25lWD10cnVlO1xuIH1cbmlmKGxvbmVYJiZsb25lWSl7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG5pZihsb25lWCl7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihsb25lWSl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbiFsb25lWCYmIWxvbmVZfHxcbkZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGxvbmUgcGFpciAke3EoW2xvbmVYLGxvbmVZXSl9YDtcbnJldHVybiAwO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyVW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MG4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MG58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbi8vXG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50VW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz09PTBufHx5Yz09PTBufHxGYWlsIGBTZXRzIG11c3Qgbm90IGhhdmUgY29tbW9uIGVsZW1lbnRzOiAke219YDtcbmlmKHhjPj0xbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0xbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPj0xbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZih5Yz09PTBuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oaXRlck9wKT0+KHhlbGVtZW50cyx5ZWxlbWVudHMpPT5cbml0ZXJPcChtZXJnZSh4ZWxlbWVudHMseWVsZW1lbnRzKSk7XG5cbmNvbnN0ICAgICAgICBlbGVtZW50c0lzU3VwZXJzZXQ9bWVyZ2VpZnkoaXRlcklzU3VwZXJzZXQpOyRozY9fb25jZS5lbGVtZW50c0lzU3VwZXJzZXQoZWxlbWVudHNJc1N1cGVyc2V0KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0lzRGlzam9pbnQ9bWVyZ2VpZnkoaXRlcklzRGlzam9pbnQpOyRozY9fb25jZS5lbGVtZW50c0lzRGlzam9pbnQoZWxlbWVudHNJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0NvbXBhcmU9bWVyZ2VpZnkoaXRlckNvbXBhcmUpOyRozY9fb25jZS5lbGVtZW50c0NvbXBhcmUoZWxlbWVudHNDb21wYXJlKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c1VuaW9uPW1lcmdlaWZ5KGl0ZXJVbmlvbik7JGjNj19vbmNlLmVsZW1lbnRzVW5pb24oZWxlbWVudHNVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNEaXNqb2ludFVuaW9uPW1lcmdlaWZ5KGl0ZXJEaXNqb2ludFVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNEaXNqb2ludFVuaW9uKGVsZW1lbnRzRGlzam9pbnRVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoaXRlckludGVyc2VjdGlvbik7JGjNj19vbmNlLmVsZW1lbnRzSW50ZXJzZWN0aW9uKGVsZW1lbnRzSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoaXRlckRpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50U3VidHJhY3QoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTtcblxuY29uc3QgcmF3U2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxuZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKTtcblxuY29uc3Qgc2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxubWFrZVNldE9mRWxlbWVudHMoZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBzZXRJc1N1cGVyc2V0PXJhd1NldGlmeShlbGVtZW50c0lzU3VwZXJzZXQpOyRozY9fb25jZS5zZXRJc1N1cGVyc2V0KHNldElzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIHNldElzRGlzam9pbnQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNEaXNqb2ludCk7JGjNj19vbmNlLnNldElzRGlzam9pbnQoc2V0SXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgc2V0VW5pb249c2V0aWZ5KGVsZW1lbnRzVW5pb24pOyRozY9fb25jZS5zZXRVbmlvbihzZXRVbmlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRVbmlvbj1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFVuaW9uKTskaM2PX29uY2Uuc2V0RGlzam9pbnRVbmlvbihzZXREaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXRJbnRlcnNlY3Rpb249c2V0aWZ5KGVsZW1lbnRzSW50ZXJzZWN0aW9uKTskaM2PX29uY2Uuc2V0SW50ZXJzZWN0aW9uKHNldEludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRTdWJ0cmFjdD1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTskaM2PX29uY2Uuc2V0RGlzam9pbnRTdWJ0cmFjdChzZXREaXNqb2ludFN1YnRyYWN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImVsZW1lbnRzSXNTdXBlcnNldCI6WyJlbGVtZW50c0lzU3VwZXJzZXQiXSwiZWxlbWVudHNJc0Rpc2pvaW50IjpbImVsZW1lbnRzSXNEaXNqb2ludCJdLCJlbGVtZW50c0NvbXBhcmUiOlsiZWxlbWVudHNDb21wYXJlIl0sImVsZW1lbnRzVW5pb24iOlsiZWxlbWVudHNVbmlvbiJdLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iOlsiZWxlbWVudHNEaXNqb2ludFVuaW9uIl0sImVsZW1lbnRzSW50ZXJzZWN0aW9uIjpbImVsZW1lbnRzSW50ZXJzZWN0aW9uIl0sImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCI6WyJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiXSwic2V0SXNTdXBlcnNldCI6WyJzZXRJc1N1cGVyc2V0Il0sInNldElzRGlzam9pbnQiOlsic2V0SXNEaXNqb2ludCJdLCJzZXRVbmlvbiI6WyJzZXRVbmlvbiJdLCJzZXREaXNqb2ludFVuaW9uIjpbInNldERpc2pvaW50VW5pb24iXSwic2V0SW50ZXJzZWN0aW9uIjpbInNldEludGVyc2VjdGlvbiJdLCJzZXREaXNqb2ludFN1YnRyYWN0IjpbInNldERpc2pvaW50U3VidHJhY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vcGF0dGVybk1hdGNoZXJzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyJdLCJleHBvcnRzIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsQXJnR3VhcmRMaXN0U2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLEludGVyZmFjZUd1YXJkU2hhcGUsTSxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxNZXRob2RHdWFyZFNoYXBlLFJhd0d1YXJkU2hhcGUsU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsU3luY1ZhbHVlR3VhcmRTaGFwZSxhc3NlcnRBd2FpdEFyZ0d1YXJkLG1hdGNoZXMsbXVzdE1hdGNoLGdldENvcHlNYXBLZXlzLG1ha2VDb3B5TWFwOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCIuL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbW1wiQXJnR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoQXJnR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiQXdhaXRBcmdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEF3YWl0QXJnR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjNj19hID0+IChJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJSYXdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJhd0d1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcImFzc2VydEF3YWl0QXJnR3VhcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMvY2hlY2tLZXkuanNcIiwgW1tcImdldENvcHlNYXBLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBLZXlzID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5TWFwID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlPWhhcmRlbih7XG5rbGFzczonYXdhaXRBcmcnLFxuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQ9KGF3YWl0QXJnR3VhcmQpPT57XG5pZihtYXRjaGVzKGF3YWl0QXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKSl7XG4vL1xuY29uc3R7a2xhc3M6XywuLi5wYXlsb2FkfT1hd2FpdEFyZ0d1YXJkO1xuLy9cbnJldHVybiBwYXlsb2FkO1xuIH1cbmFzc2VydEF3YWl0QXJnR3VhcmQoYXdhaXRBcmdHdWFyZCk7XG5yZXR1cm4gYXdhaXRBcmdHdWFyZC5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J3N5bmMnLFxuYXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkU2hhcGU9TS5vcihcblJhd0d1YXJkU2hhcGUsXG5Bd2FpdEFyZ0d1YXJkU2hhcGUsXG5MZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUsXG5NLnBhdHRlcm4oKSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihMZWdhY3lBcmdHdWFyZFNoYXBlKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpMZWdhY3lBcmdHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lNZXRob2RHdWFyZFNoYXBlPU0ub3IoXG5MZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZSxcbkxlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZSk7XG5cblxuY29uc3QgYWRhcHRMZWdhY3lBcmdHdWFyZD0oYXJnR3VhcmQpPT5cbm1hdGNoZXMoYXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKT9cbk0uYXdhaXQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkKTpcbmFyZ0d1YXJkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZEd1YXJkUGF5bG9hZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLE1ldGhvZEd1YXJkU2hhcGUpKXtcbnJldHVybiBtZXRob2RHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlLCdsZWdhY3lNZXRob2RHdWFyZCcpO1xuY29uc3R7XG4vL1xua2xhc3M6Xyxcbi8vXG5jYWxsS2luZCxcbi8vXG5yZXR1cm5HdWFyZCxcbi8vXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmQ7XG5sZXR7XG4vL1xuYXJnR3VhcmRzLFxuLy9cbm9wdGlvbmFsQXJnR3VhcmRzfT1cbm1ldGhvZEd1YXJkO1xuaWYoY2FsbEtpbmQ9PT0nYXN5bmMnKXtcbmFyZ0d1YXJkcz1hcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xub3B0aW9uYWxBcmdHdWFyZHM9XG5vcHRpb25hbEFyZ0d1YXJkcyYmb3B0aW9uYWxBcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xuIH1cbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG4vL1xubXVzdE1hdGNoKHBheWxvYWQsTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsJ2ludGVybmFsTWV0aG9kR3VhcmRBZGFwdG9yJyk7XG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRNZXRob2RHdWFyZFBheWxvYWQoZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonSW50ZXJmYWNlJyxcbmludGVyZmFjZU5hbWU6TS5zdHJpbmcoKSxcbm1ldGhvZEd1YXJkczpNLnJlY29yZE9mKFxuTS5zdHJpbmcoKSxcbk0ub3IoTWV0aG9kR3VhcmRTaGFwZSxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl9LFxuXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuLy9cbi8vXG4vL1xuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pO1xuXG5cblxuY29uc3QgYWRhcHRNZXRob2RHdWFyZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKXtcbmNvbnN0e1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZD1NLmFueSgpLFxucmV0dXJuR3VhcmR9PVxuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0IG1DYWxsPWNhbGxLaW5kPT09J3N5bmMnP00uY2FsbDpNLmNhbGxXaGVuO1xucmV0dXJuIG1DYWxsKC4uLmFyZ0d1YXJkcykuXG5vcHRpb25hbCguLi5vcHRpb25hbEFyZ0d1YXJkcykuXG5yZXN0KHJlc3RBcmdHdWFyZCkuXG5yZXR1cm5zKHJldHVybkd1YXJkKTtcbiB9XG5yZXR1cm4gbWV0aG9kR3VhcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZUd1YXJkUGF5bG9hZD0oaW50ZXJmYWNlR3VhcmQpPT57XG5pZihtYXRjaGVzKGludGVyZmFjZUd1YXJkLEludGVyZmFjZUd1YXJkU2hhcGUpKXtcbnJldHVybiBpbnRlcmZhY2VHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChpbnRlcmZhY2VHdWFyZCxMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlLCdsZWdhY3lJbnRlcmZhY2VHdWFyZCcpO1xuLy9cbi8vXG5sZXR7a2xhc3M6XyxpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcywuLi5yZXN0fT1pbnRlcmZhY2VHdWFyZDtcbm1ldGhvZEd1YXJkcz1vYmplY3RNYXAobWV0aG9kR3VhcmRzLGFkYXB0TWV0aG9kR3VhcmQpO1xuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkcyxcbi4uLnJlc3R9KTtcblxubXVzdE1hdGNoKFxucGF5bG9hZCxcbkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLFxuJ2ludGVybmFsSW50ZXJmYWNlR3VhcmRBZGFwdG9yJyk7XG5cbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5cbmNvbnN0IGVtcHR5Q29weU1hcD1tYWtlQ29weU1hcChbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cz0oaW50ZXJmYWNlR3VhcmQpPT57XG5jb25zdHttZXRob2RHdWFyZHMsc3ltYm9sTWV0aG9kR3VhcmRzPWVtcHR5Q29weU1hcH09XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKFtcbi4uLlJlZmxlY3Qub3duS2V5cyhtZXRob2RHdWFyZHMpLFxuLi4uZ2V0Q29weU1hcEtleXMoc3ltYm9sTWV0aG9kR3VhcmRzKV0pO1xuXG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sImdldE1ldGhvZEd1YXJkUGF5bG9hZCI6WyJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIjpbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIjpbImdldEludGVyZmFjZU1ldGhvZEtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHTgMlMitAADIrQAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2Vycm9ycyIsIi4uL2tleXMvY29tcGFyZUtleXMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIiwiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIiwiQXdhaXRBcmdHdWFyZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFNoYXBlIiwiTSIsIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIiwiTWV0aG9kR3VhcmRTaGFwZSIsIlJhd0d1YXJkU2hhcGUiLCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkU2hhcGUiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydFBhdHRlcm4iLCJhc3NlcnRSYXdHdWFyZCIsImNoZWNrTWF0Y2hlcyIsImRlZmF1bHRMaW1pdHMiLCJnZXRSYW5rQ292ZXIiLCJpc0F3YWl0QXJnR3VhcmQiLCJpc1BhdHRlcm4iLCJpc1Jhd0d1YXJkIiwia2luZE9mIiwibWF0Y2hlcyIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLEZhcixnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixoYXNPd25Qcm9wZXJ0eU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxjb21wYXJlUmFuayxnZXRQYXNzU3R5bGVDb3ZlcixpbnRlcnNlY3RSYW5rQ292ZXJzLHVuaW9uUmFua0NvdmVycyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsaWRlbnRDaGVja2VyLGFwcGx5TGFiZWxpbmdFcnJvcixmcm9tVW5pcXVlRW50cmllcyxsaXN0RGlmZmVyZW5jZSxxLGIsWCxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLGtleUVRLGtleUdULGtleUdURSxrZXlMVCxrZXlMVEUsYXNzZXJ0S2V5LGNoZWNrS2V5LGlzS2V5LGNoZWNrU2NhbGFyS2V5LGNoZWNrQ29weVNldCxjaGVja0NvcHlNYXAsY29weU1hcEtleVNldCxjaGVja0NvcHlCYWcsZ2V0Q29weU1hcEVudHJ5QXJyYXksbWFrZUNvcHlNYXAsZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjNj19hID0+IChnZXRQYXNzU3R5bGVDb3ZlciA9ICRozY9fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaM2PX2EpXV0sW1widW5pb25SYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjNj19hID0+IChhcHBseUxhYmVsaW5nRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcImJcIiwgWyRozY9fYSA9PiAoYiA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wia2V5R1RcIiwgWyRozY9fYSA9PiAoa2V5R1QgPSAkaM2PX2EpXV0sW1wia2V5R1RFXCIsIFskaM2PX2EgPT4gKGtleUdURSA9ICRozY9fYSldXSxbXCJrZXlMVFwiLCBbJGjNj19hID0+IChrZXlMVCA9ICRozY9fYSldXSxbXCJrZXlMVEVcIiwgWyRozY9fYSA9PiAoa2V5TFRFID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJjaGVja0tleVwiLCBbJGjNj19hID0+IChjaGVja0tleSA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXSxbXCJjaGVja1NjYWxhcktleVwiLCBbJGjNj19hID0+IChjaGVja1NjYWxhcktleSA9ICRozY9fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoY2hlY2tDb3B5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlNYXAgPSAkaM2PX2EpXV0sW1wiY29weU1hcEtleVNldFwiLCBbJGjNj19hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjNj19hID0+IChjaGVja0NvcHlCYWcgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjNj19hID0+IChnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+XG57XG5hc3NlcnQoQXJyYXkuaXNBcnJheShtYWluUGF5bG9hZFNoYXBlKSk7XG5pZighQXJyYXkuaXNBcnJheShwYXlsb2FkKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCBtdXN0IGJlIGFuIGFycmF5OiAke3BheWxvYWR9YCk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgbWFpbkxlbmd0aD1tYWluUGF5bG9hZFNoYXBlLmxlbmd0aDtcbmlmKCEocGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RofHxwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGgrMSkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgdW5leHBlY3RlZCBzaXplOiAke3BheWxvYWR9YCk7XG4gfVxuY29uc3QgbGltaXRzPXBheWxvYWRbbWFpbkxlbmd0aF07XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAsbWFpbkxlbmd0aCkpO1xuLy9cbmlmKCFjaGVja01hdGNoZXMocGF5bG9hZCxtYWluUGF5bG9hZFNoYXBlLGNoZWNrLGxhYmVsKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuaWYobGltaXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbihwYXNzU3R5bGVPZihsaW1pdHMpPT09J2NvcHlSZWNvcmQnfHxcbmNoZWNrKGZhbHNlLFggYExpbWl0cyBtdXN0IGJlIGEgcmVjb3JkOiAke3EobGltaXRzKX1gKSkmJlxuZW50cmllcyhsaW1pdHMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5wYXNzU3R5bGVPZih2YWx1ZSk9PT0nbnVtYmVyJ3x8XG5jaGVjayhmYWxzZSxYIGBWYWx1ZSBvZiBsaW1pdCAke3Eoa2V5KX0gYnV0IGJlIGEgbnVtYmVyOiAke3EodmFsdWUpfWApKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0PShzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spPT57XG5pZihcbk1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhOdW1iZXIoc3BlY2ltZW4pKSkpKzE8PVxuZGVjaW1hbERpZ2l0c0xpbWl0KVxue1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBiaWdpbnQgJHtzcGVjaW1lbn0gbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtkZWNpbWFsRGlnaXRzTGltaXR9IGRpZ2l0c2ApO1xuXG4gfTtcblxuLypcblxuICovXG5jb25zdCBtYWtlUGF0dGVybktpdD0oKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVNYXRjaEhlbHBlcj0odGFnKT0+XG4vL1xuSGVscGVyc0J5TWF0Y2hUYWdbdGFnXTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVBheWxvYWRTaGFwZT0odGFnKT0+XG4vL1xuR3VhcmRQYXlsb2FkU2hhcGVzW3RhZ107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uS2luZHM9bmV3IE1hcChbXG5bJ251bGwnLG51bGxdLFxuWyd1bmRlZmluZWQnLHVuZGVmaW5lZF1dKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHRhZ01lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnZ2VkPSh0YWdnZWQsdGFnLGNoZWNrKT0+e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQodGFnZ2VkLnBheWxvYWQsY2hlY2spO1xuIH1lbHNle1xuY29uc3QgcGF5bG9hZFNoYXBlPW1heWJlUGF5bG9hZFNoYXBlKHRhZyk7XG5pZihwYXlsb2FkU2hhcGUhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBjaGVja01hdGNoZXModGFnZ2VkLnBheWxvYWQscGF5bG9hZFNoYXBlLGNoZWNrLHRhZyk7XG4gfVxuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4gY2hlY2tDb3B5TWFwKHRhZ2dlZCxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfTogJHt0YWdnZWR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGtpbmRPZj0oc3BlY2ltZW4sY2hlY2s9aWRlbnRDaGVja2VyKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmlmKHBhc3NTdHlsZSE9PSd0YWdnZWQnKXtcbnJldHVybiBwYXNzU3R5bGU7XG4gfVxuLy9cbi8vXG4vL1xuaWYodGFnTWVtby5oYXMoc3BlY2ltZW4pKXtcbnJldHVybiB0YWdNZW1vLmdldChzcGVjaW1lbik7XG4gfVxuY29uc3QgdGFnPWdldFRhZyhzcGVjaW1lbik7XG5pZihjaGVja1RhZ2dlZChzcGVjaW1lbix0YWcsY2hlY2spKXtcbnRhZ01lbW8uc2V0KHNwZWNpbWVuLHRhZyk7XG5yZXR1cm4gdGFnO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbmNoZWNrKGZhbHNlLFggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfWApO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbmhhcmRlbihraW5kT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tLaW5kPShzcGVjaW1lbixraW5kLGNoZWNrKT0+e1xuLy9cbmlmKHNpbmdsZXRvbktpbmRzLmhhcyhraW5kKSl7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHNpbmdsZXRvbktpbmRzLmdldChraW5kKSxjaGVjayk7XG4gfVxuXG5jb25zdCByZWFsS2luZD1raW5kT2Yoc3BlY2ltZW4sY2hlY2spO1xuaWYoa2luZD09PXJlYWxLaW5kKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtiKHJlYWxLaW5kKX0gJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgJHtiKGtpbmQpfWApO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGlzS2luZD0oc3BlY2ltZW4sa2luZCk9PmNoZWNrS2luZChzcGVjaW1lbixraW5kLGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0FzS2V5UGF0dD0oc3BlY2ltZW4sa2V5QXNQYXR0ZXJuLGNoZWNrKT0+e1xuaWYoaXNLZXkoc3BlY2ltZW4pJiZrZXlFUShzcGVjaW1lbixrZXlBc1BhdHRlcm4pKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlOiAke2tleUFzUGF0dGVybn1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybj0ocGF0dCxjaGVjayk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihwYXR0ZXJuTWVtby5oYXMocGF0dCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja1BhdHRlcm5JbnRlcm5hbChwYXR0LGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5wYXR0ZXJuTWVtby5hZGQocGF0dCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuSW50ZXJuYWw9KHBhdHQsY2hlY2spPT57XG4vL1xuLy9cbi8vXG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrUGF0dGVybihjaGlsZCxjaGVjayk7XG5cbmNvbnN0IGtpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIGZhbHNlO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5yZXR1cm4gdmFsdWVzKHBhdHQpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbnJldHVybiBwYXR0LmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xucmV0dXJuIGNoZWNrUGF0dGVybihwYXR0LnZhbHVlcyxjaGVjayk7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShraW5kKX0gY2Fubm90IGJlIGEgcGF0dGVybmApO1xuIH1cbmRlZmF1bHQ6e1xuaWYobWF5YmVNYXRjaEhlbHBlcihraW5kKSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEEgcGFzc2FibGUgb2Yga2luZCAke3Eoa2luZCl9IGlzIG5vdCBhIHBhdHRlcm46ICR7cGF0dH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpc1BhdHRlcm49KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0UGF0dGVybj0ocGF0dCk9PntcbmNoZWNrUGF0dGVybihwYXR0LGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlcz0oc3BlY2ltZW4scGF0dGVybixjaGVjayxsYWJlbD11bmRlZmluZWQpPT5cbi8vXG5hcHBseUxhYmVsaW5nRXJyb3IoY2hlY2tNYXRjaGVzSW50ZXJuYWwsW3NwZWNpbWVuLHBhdHRlcm4sY2hlY2tdLGxhYmVsKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlc0ludGVybmFsPShzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuLy9cbmNvbnN0IHBhdHRlcm5LaW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbmNvbnN0IHNwZWNpbWVuS2luZD1raW5kT2Yoc3BlY2ltZW4pOy8vXG5zd2l0Y2gocGF0dGVybktpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIEZhaWwgYHBhdHRlcm4gZXhwZWN0ZWQ6ICR7cGF0dH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIEZhaWwgYHByb21pc2VzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIEZhaWwgYGVycm9ycyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOlxuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weUJhZyc6XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5QXJyYXkgdG8gbWF0Y2ggYSBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5jb25zdHtsZW5ndGh9PXBhdHQ7XG5pZihzcGVjaW1lbi5sZW5ndGghPT1sZW5ndGgpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSAke3NwZWNpbWVufSAtIE11c3QgYmUgYXMgbG9uZyBhcyBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5yZXR1cm4gcGF0dC5ldmVyeSgocCxpKT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuW2ldLHAsY2hlY2ssaSkpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlSZWNvcmQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weVJlY29yZCB0byBtYXRjaCBhIGNvcHlSZWNvcmQgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNwZWNpbWVuTmFtZXM9cmVjb3JkTmFtZXMoc3BlY2ltZW4pO1xuY29uc3QgcGF0dE5hbWVzPXJlY29yZE5hbWVzKHBhdHQpO1xuY29uc3QgbWlzc2luZz1saXN0RGlmZmVyZW5jZShwYXR0TmFtZXMsc3BlY2ltZW5OYW1lcyk7XG5pZihtaXNzaW5nLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBoYXZlIG1pc3NpbmcgcHJvcGVydGllcyAke3EobWlzc2luZyl9YCk7XG5cbiB9XG5jb25zdCB1bmV4cGVjdGVkPWxpc3REaWZmZXJlbmNlKHNwZWNpbWVuTmFtZXMscGF0dE5hbWVzKTtcbmlmKHVuZXhwZWN0ZWQubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG5vdCBoYXZlIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKFxudW5leHBlY3RlZClcbiB9YCk7XG5cbiB9XG5jb25zdCBzcGVjaW1lblZhbHVlcz1yZWNvcmRWYWx1ZXMoc3BlY2ltZW4sc3BlY2ltZW5OYW1lcyk7XG5jb25zdCBwYXR0VmFsdWVzPXJlY29yZFZhbHVlcyhwYXR0LHBhdHROYW1lcyk7XG5yZXR1cm4gcGF0dE5hbWVzLmV2ZXJ5KChsYWJlbCxpKT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW5WYWx1ZXNbaV0scGF0dFZhbHVlc1tpXSxjaGVjayxsYWJlbCkpO1xuXG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weU1hcCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5TWFwIHRvIG1hdGNoIGEgY29weU1hcCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG5jb25zdCBwYXR0S2V5U2V0PWNvcHlNYXBLZXlTZXQocGF0dCk7XG5jb25zdCBzcGVjaW1lbktleVNldD1jb3B5TWFwS2V5U2V0KHNwZWNpbWVuKTtcbmlmKCFjaGVja01hdGNoZXMoc3BlY2ltZW5LZXlTZXQscGF0dEtleVNldCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdHRWYWx1ZXM9W107XG5jb25zdCBzcGVjaW1lblZhbHVlcz1bXTtcbmNvbnN0IGVudHJ5UGFpcnM9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5wYXR0LFxuc3BlY2ltZW4sXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbnVuZGVmaW5lZCk7XG5cbmZvcihjb25zdFtfa2V5LHBhdHRWYWx1ZSxzcGVjaW1lblZhbHVlXW9mIGVudHJ5UGFpcnMpe1xucGF0dFZhbHVlcy5wdXNoKHBhdHRWYWx1ZSk7XG5zcGVjaW1lblZhbHVlcy5wdXNoKHNwZWNpbWVuVmFsdWUpO1xuIH1cbnJldHVybiBjaGVja01hdGNoZXMoaGFyZGVuKHNwZWNpbWVuVmFsdWVzKSxoYXJkZW4ocGF0dFZhbHVlcyksY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcihwYXR0ZXJuS2luZCk7XG5pZihtYXRjaEhlbHBlcil7XG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQucGF5bG9hZCxjaGVjayk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IHNob3VsZCBoYXZlIHJlY29nbml6ZWQgJHtxKHBhdHRlcm5LaW5kKX0gYDtcbiB9fVxuXG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYXRjaGVzPShzcGVjaW1lbixwYXR0KT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG11c3RNYXRjaD0oc3BlY2ltZW4scGF0dCxsYWJlbD11bmRlZmluZWQpPT57XG5sZXQgaW5uZXJFcnJvcjtcbnRyeXtcbmlmKGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcix1bmRlZmluZWQpKXtcbnJldHVybjtcbiB9XG4gfWNhdGNoKGVyKXtcbmlubmVyRXJyb3I9ZXI7XG4gfVxuLy9cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGFzc2VydENoZWNrZXIsbGFiZWwpO1xuY29uc3Qgb3V0ZXJFcnJvcj1tYWtlRXJyb3IoXG5YIGBpbnRlcm5hbDogJHtsYWJlbH06IGluY29uc2lzdGVudCBwYXR0ZXJuIG1hdGNoOiAke3EocGF0dCl9YCk7XG5cbmlmKGlubmVyRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihvdXRlckVycm9yLFggYGNhdXNlZCBieSAke2lubmVyRXJyb3J9YCk7XG4gfVxudGhyb3cgb3V0ZXJFcnJvcjtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldFJhbmtDb3Zlcj0ocGF0dCxlbmNvZGVQYXNzYWJsZSk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUGFzc2FibGUocGF0dCk7XG5pZihlbmNvZGVkIT09dW5kZWZpbmVkKXtcbnJldHVybltlbmNvZGVkLCBgJHtlbmNvZGVkfX5gXTtcbiB9XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhdHQpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyhwYXR0KTtcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmdldFJhbmtDb3ZlcihwYXR0LnBheWxvYWQsZW5jb2RlUGFzc2FibGUpO1xuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5icmVhazsvL1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuPShhcnJheSxwYXR0LGNoZWNrLGxhYmVsUHJlZml4PScnKT0+e1xuaWYoaXNLaW5kKHBhdHQsJ21hdGNoOmFueScpKXtcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gYXJyYXkuZXZlcnkoKGVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhlbCxwYXR0LGNoZWNrLCBgJHtsYWJlbFByZWZpeH1bJHtpfV1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbnlIZWxwZXI9RmFyKCdtYXRjaDphbnkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KF9zcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsX2NoZWNrKT0+dHJ1ZSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KG1hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5tYXRjaGVyUGF5bG9hZD09PXVuZGVmaW5lZHx8XG5jaGVjayhmYWxzZSxYIGBtYXRjaDphbnkgcGF5bG9hZDogJHttYXRjaGVyUGF5bG9hZH0gLSBNdXN0IGJlIHVuZGVmaW5lZGApLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbmRIZWxwZXI9RmFyKCdtYXRjaDphbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xucmV0dXJuIHBhdHRzLmV2ZXJ5KChwYXR0KT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsY2hlY2spKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFBhdHRzLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGNoZWNrKTtcbnJldHVybihcbihwYXNzU3R5bGVPZihhbGxlZ2VkUGF0dHMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgTmVlZHMgYXJyYXkgb2Ygc3ViLXBhdHRlcm5zOiAke3EoYWxsZWdlZFBhdHRzKX1gKSkmJlxuYWxsZWdlZFBhdHRzLmV2ZXJ5KGNoZWNrSXQpKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbmludGVyc2VjdFJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hPckhlbHBlcj1GYXIoJ21hdGNoOm9yIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbmNvbnN0e2xlbmd0aH09cGF0dHM7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBubyBwYXR0ZXJuIGRpc2p1bmN0cyB0byBtYXRjaDogJHtxKHBhdHRzKX1gKTtcblxuIH1cbmlmKFxucGF0dHMubGVuZ3RoPT09MiYmXG4hbWF0Y2hlcyhzcGVjaW1lbixwYXR0c1swXSkmJlxuaXNLaW5kKHBhdHRzWzBdLCdtYXRjaDpraW5kJykmJlxucGF0dHNbMF0ucGF5bG9hZD09PSd1bmRlZmluZWQnKVxue1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzFdLGNoZWNrKTtcbiB9XG5pZihwYXR0cy5zb21lKChwYXR0KT0+bWF0Y2hlcyhzcGVjaW1lbixwYXR0KSkpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBtYXRjaCBvbmUgb2YgJHtxKHBhdHRzKX1gKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFuZEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxudW5pb25SYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTm90SGVscGVyPUZhcignbWF0Y2g6bm90IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuaWYobWF0Y2hlcyhzcGVjaW1lbixwYXR0KSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBmYWlsIG5lZ2F0ZWQgcGF0dGVybjogJHtxKHBhdHQpfWApO1xuXG4gfWVsc2V7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tQYXR0ZXJuLFxuXG5nZXRSYW5rQ292ZXI6KF9wYXR0LF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2NhbGFySGVscGVyPUZhcignbWF0Y2g6c2NhbGFyIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrU2NhbGFyS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2V5SGVscGVyPUZhcignbWF0Y2g6a2V5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUGF0dGVybkhlbHBlcj1GYXIoJ21hdGNoOnBhdHRlcm4gaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tQYXR0ZXJuKHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2luZEhlbHBlcj1GYXIoJ21hdGNoOmtpbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6Y2hlY2tLaW5kLFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZEtleUtpbmQsY2hlY2spPT5cbnR5cGVvZiBhbGxlZ2VkS2V5S2luZD09PSdzdHJpbmcnfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBtYXRjaDpraW5kOiBwYXlsb2FkOiAke2FsbGVnZWRLZXlLaW5kfSAtIEEga2luZCBuYW1lIG11c3QgYmUgYSBzdHJpbmdgKSxcblxuXG5nZXRSYW5rQ292ZXI6KGtpbmQsX2VuY29kZVBhc3NhYmxlKT0+e1xubGV0IHN0eWxlO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weU1hcCc6e1xuc3R5bGU9J3RhZ2dlZCc7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnN0eWxlPWtpbmQ7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIoc3R5bGUpO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hUYWdnZWRIZWxwZXI9RmFyKCdtYXRjaDp0YWdnZWQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFt0YWdQYXR0LHBheWxvYWRQYXR0XSxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PSd0YWdnZWQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgdGFnZ2VkIG9iamVjdCwgbm90ICR7cShcbnBhc3NTdHlsZU9mKHNwZWNpbWVuKSlcbiB9OiAke3NwZWNpbWVufWApO1xuXG4gfVxucmV0dXJuKFxuY2hlY2tNYXRjaGVzKGdldFRhZyhzcGVjaW1lbiksdGFnUGF0dCxjaGVjaywndGFnJykmJlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLnBheWxvYWQscGF5bG9hZFBhdHQsY2hlY2ssJ3BheWxvYWQnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6dGFnZ2VkIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9raW5kLF9lbmNvZGVQYXNzYWJsZSk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJpZ2ludEhlbHBlcj1GYXIoJ21hdGNoOmJpZ2ludCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6YmlnaW50IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOYXRIZWxwZXI9RmFyKCdtYXRjaDpuYXQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbj49MG4sXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgbm9uLW5lZ2F0aXZlYCkmJlxuXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6bmF0IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG4vL1xuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3RyaW5nSGVscGVyPUZhcignbWF0Y2g6c3RyaW5nIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzdHJpbmdMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ3N0cmluZycsY2hlY2spJiYoXG4vL1xuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1zdHJpbmdMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgc3RyaW5nICR7c3BlY2ltZW59IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3RyaW5nTGVuZ3RoTGltaXR9YCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzdHJpbmcgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzdHJpbmcnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN5bWJvbEhlbHBlcj1GYXIoJ21hdGNoOnN5bWJvbCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3ltYm9sTmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnc3ltYm9sJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHN5bWJvbE5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHNwZWNpbWVuKTtcblxuaWYodHlwZW9mIHN5bWJvbE5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUGFzc2FibGUgc3ltYm9sICR7c3BlY2ltZW59IG11c3QgaGF2ZSBhIHBhc3NhYmxlIG5hbWVgO1xuIH1cbnJldHVybiBjaGVjayhcbnN5bWJvbE5hbWUubGVuZ3RoPD1zeW1ib2xOYW1lTGVuZ3RoTGltaXQsXG5YIGBTeW1ib2wgbmFtZSAke3EoXG5zeW1ib2xOYW1lKVxuIH0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN5bWJvbCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N5bWJvbCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVtb3RhYmxlSGVscGVyPUZhcignbWF0Y2g6cmVtb3RhYmxlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyZW1vdGFibGVEZXNjLGNoZWNrKT0+e1xuaWYoaXNLaW5kKHNwZWNpbWVuLCdyZW1vdGFibGUnKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjaz09PWlkZW50Q2hlY2tlcil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7bGFiZWx9PXJlbW90YWJsZURlc2M7XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuY29uc3Qga2luZERldGFpbHM9XG5wYXNzU3R5bGUhPT0ndGFnZ2VkJz9cbi8vXG5iKHBhc3NTdHlsZSk6XG4vL1xuLy9cbnEoZ2V0VGFnKHNwZWNpbWVuKSk7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcbi8vXG4vL1xuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgcmVtb3RhYmxlICR7YihsYWJlbCl9LCBub3QgJHtraW5kRGV0YWlsc31gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUmVtb3RhYmxlRGVzYyxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxuYWxsZWdlZFJlbW90YWJsZURlc2MsXG5oYXJkZW4oe2xhYmVsOk1NLnN0cmluZygpfSksXG5jaGVjayxcbidtYXRjaDpyZW1vdGFibGUgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX3JlbW90YWJsZURlc2MsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcigncmVtb3RhYmxlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEVIZWxwZXI9RmFyKCdtYXRjaDpsdGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFRFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDw9ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld1JpZ2h0Qm91bmQ9IGAke2VuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCl9fmA7XG5pZihuZXdSaWdodEJvdW5kIT09dW5kZWZpbmVkKXtcbnJpZ2h0Qm91bmQ9bmV3UmlnaHRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEhlbHBlcj1GYXIoJ21hdGNoOmx0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDwgJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hMVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RFSGVscGVyPUZhcignbWF0Y2g6Z3RlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdMZWZ0Qm91bmQ9ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKTtcbmlmKG5ld0xlZnRCb3VuZCE9PXVuZGVmaW5lZCl7XG5sZWZ0Qm91bmQ9bmV3TGVmdEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdUSGVscGVyPUZhcignbWF0Y2g6Z3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1Qoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPiAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaEdURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZWNvcmRPZkhlbHBlcj1GYXIoJ21hdGNoOnJlY29yZE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVByb3BlcnRpZXNMaW1pdCxwcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spJiZcbmNoZWNrKFxub3duS2V5cyhzcGVjaW1lbikubGVuZ3RoPD1udW1Qcm9wZXJ0aWVzTGltaXQsXG5YIGBNdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1Qcm9wZXJ0aWVzTGltaXQpXG4gfSBwcm9wZXJ0aWVzOiAke3NwZWNpbWVufWApJiZcblxuZW50cmllcyhzcGVjaW1lbikuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrLFxuW1xua2V5Lmxlbmd0aDw9cHJvcGVydHlOYW1lTGVuZ3RoTGltaXQsXG5YIGBQcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICR7cShcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0KVxuIH1gXSxcblxua2V5KSYmXG5cbmNoZWNrTWF0Y2hlcyhcbmhhcmRlbihba2V5LHZhbHVlXSksXG5oYXJkZW4oW2tleVBhdHQsdmFsdWVQYXR0XSksXG5jaGVjayxcbmtleSkpKTtcblxuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpyZWNvcmRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlSZWNvcmQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFycmF5T2ZIZWxwZXI9RmFyKCdtYXRjaDphcnJheU9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbc3ViUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2FycmF5TGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSYmKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PWFycmF5TGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYEFycmF5IGxlbmd0aCAke3NwZWNpbWVuLmxlbmd0aH0gbXVzdCBiZSA8PSBsaW1pdCAke2FycmF5TGVuZ3RoTGltaXR9YCkpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbixzdWJQYXR0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmFycmF5T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2V0T2ZIZWxwZXI9RmFyKCdtYXRjaDpzZXRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2tleVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtudW1TZXRFbGVtZW50c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5U2V0JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPG51bVNldEVsZW1lbnRzTGltaXQsXG5YIGBTZXQgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKG51bVNldEVsZW1lbnRzTGltaXQpfSBlbGVtZW50czogJHtcbnNwZWNpbWVuLnBheWxvYWQubGVuZ3RoXG4gfWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbi5wYXlsb2FkLGtleVBhdHQsY2hlY2ssJ3NldCBlbGVtZW50cycpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6c2V0T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmFnT2ZIZWxwZXI9RmFyKCdtYXRjaDpiYWdPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LGRlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUJhZycsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDw9XG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LFxuWCBgQmFnIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQpXG4gfSB1bmlxdWUgZWxlbWVudHM6ICR7c3BlY2ltZW59YCkmJlxuXG5zcGVjaW1lbi5wYXlsb2FkLmV2ZXJ5KFxuKFtrZXksY291bnRdLGkpPT5cbmNoZWNrTWF0Y2hlcyhrZXksa2V5UGF0dCxjaGVjaywgYGJhZyBrZXlzWyR7aX1dYCkmJlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQsXG5bY291bnQsZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrXSxcbiBgYmFnIGNvdW50c1ske2l9XWApJiZcblxuY2hlY2tNYXRjaGVzKGNvdW50LGNvdW50UGF0dCxjaGVjaywgYGJhZyBjb3VudHNbJHtpfV1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpiYWdPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hNYXBPZkhlbHBlcj1GYXIoJ21hdGNoOm1hcE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bU1hcEVudHJpZXNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weU1hcCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmtleXMubGVuZ3RoPD1cbm51bU1hcEVudHJpZXNMaW1pdCxcblggYENvcHlNYXAgbXVzdCBoYXZlIG5vIG1vcmUgdGhhbiAke3EoXG5udW1NYXBFbnRyaWVzTGltaXQpXG4gfSBlbnRyaWVzOiAke3NwZWNpbWVufWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQua2V5cyxcbmtleVBhdHQsXG5jaGVjayxcbidtYXAga2V5cycpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQudmFsdWVzLFxudmFsdWVQYXR0LFxuY2hlY2ssXG4nbWFwIHZhbHVlcycpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6bWFwT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0QXJyYXlQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9PntcbmNvbnN0IG51bVJlcXVpcmVkPXJlcXVpcmVkUGF0dC5sZW5ndGg7XG5jb25zdCBudW1PcHRpb25hbD1vcHRpb25hbFBhdHQubGVuZ3RoO1xuY29uc3QgcmVxdWlyZWRTcGVjaW1lbj1zcGVjaW1lbi5zbGljZSgwLG51bVJlcXVpcmVkKTtcbmNvbnN0IG9wdGlvbmFsU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoXG5udW1SZXF1aXJlZCxcbm51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcblxuY29uc3QgcmVzdFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKG51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcbnJldHVybiBoYXJkZW4oe3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRBcnJheVBhdHRlcm49KG9wdGlvbmFsUGF0dCxsZW5ndGgpPT5cbmhhcmRlbihvcHRpb25hbFBhdHQuc2xpY2UoMCxsZW5ndGgpLm1hcCgocGF0dCk9Pk1NLm9wdChwYXR0KSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdEFycmF5SGVscGVyPUZhcignbWF0Y2g6c3BsaXRBcnJheSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PVtdLHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdEFycmF5UGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdEFycmF5UGF0dGVybihcbm9wdGlvbmFsUGF0dCxcbm9wdGlvbmFsU3BlY2ltZW4ubGVuZ3RoKTtcblxubGV0IGFyZ051bT0wO1xucmV0dXJuKFxuKHJlcXVpcmVkU3BlY2ltZW4ubGVuZ3RoPT09cmVxdWlyZWRQYXR0Lmxlbmd0aHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgYXQgbGVhc3QgJHtxKFxucmVxdWlyZWRQYXR0Lmxlbmd0aClcbiB9IGFyZ3VtZW50czogJHtzcGVjaW1lbn1gKSkmJlxuXG5yZXF1aXJlZFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK31gKSkmJlxuXG5wYXJ0aWFsUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKG9wdGlvbmFsU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfT9gKSkmJlxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlBcnJheScmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlBcnJheScpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IGFycmF5LCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgYXJyYXksIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbl9yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdFJlY29yZFBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlZEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3B0aW9uYWxFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3RFbnRyaWVzPVtdO1xuZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgZW50cmllcyhzcGVjaW1lbikpe1xuaWYoaGFzT3duUHJvcGVydHlPZihyZXF1aXJlZFBhdHQsbmFtZSkpe1xucmVxdWlyZWRFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZSBpZihoYXNPd25Qcm9wZXJ0eU9mKG9wdGlvbmFsUGF0dCxuYW1lKSl7XG5vcHRpb25hbEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNle1xucmVzdEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbnJlcXVpcmVkU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVxdWlyZWRFbnRyaWVzKSxcbm9wdGlvbmFsU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMob3B0aW9uYWxFbnRyaWVzKSxcbnJlc3RTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXN0RW50cmllcyl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdFJlY29yZFBhdHRlcm49KG9wdGlvbmFsUGF0dCxuYW1lcyk9PlxuZnJvbVVuaXF1ZUVudHJpZXMobmFtZXMubWFwKChuYW1lKT0+W25hbWUsTU0ub3B0KG9wdGlvbmFsUGF0dFtuYW1lXSldKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0UmVjb3JkSGVscGVyPUZhcignbWF0Y2g6c3BsaXRSZWNvcmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD17fSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0UmVjb3JkUGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5cbmNvbnN0IHBhcnRpYWxOYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMob3B0aW9uYWxTcGVjaW1lbik7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdFJlY29yZFBhdHRlcm4ob3B0aW9uYWxQYXR0LHBhcnRpYWxOYW1lcyk7XG5yZXR1cm4oXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbixyZXF1aXJlZFBhdHQsY2hlY2spJiZcbnBhcnRpYWxOYW1lcy5ldmVyeSgobmFtZSk9PlxuY2hlY2tNYXRjaGVzKFxub3B0aW9uYWxTcGVjaW1lbltuYW1lXSxcbnBhcnRpYWxQYXR0W25hbWVdLFxuY2hlY2ssXG4gYCR7bmFtZX0/YCkpJiZcblxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlSZWNvcmQnJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5UmVjb3JkJykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgcmVjb3JkLCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgcmVjb3JkLCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyc0J5TWF0Y2hUYWc9aGFyZGVuKHtcbidtYXRjaDphbnknOm1hdGNoQW55SGVscGVyLFxuJ21hdGNoOmFuZCc6bWF0Y2hBbmRIZWxwZXIsXG4nbWF0Y2g6b3InOm1hdGNoT3JIZWxwZXIsXG4nbWF0Y2g6bm90JzptYXRjaE5vdEhlbHBlcixcblxuJ21hdGNoOnNjYWxhcic6bWF0Y2hTY2FsYXJIZWxwZXIsXG4nbWF0Y2g6a2V5JzptYXRjaEtleUhlbHBlcixcbidtYXRjaDpwYXR0ZXJuJzptYXRjaFBhdHRlcm5IZWxwZXIsXG4nbWF0Y2g6a2luZCc6bWF0Y2hLaW5kSGVscGVyLFxuJ21hdGNoOnRhZ2dlZCc6bWF0Y2hUYWdnZWRIZWxwZXIsXG4nbWF0Y2g6YmlnaW50JzptYXRjaEJpZ2ludEhlbHBlcixcbidtYXRjaDpuYXQnOm1hdGNoTmF0SGVscGVyLFxuJ21hdGNoOnN0cmluZyc6bWF0Y2hTdHJpbmdIZWxwZXIsXG4nbWF0Y2g6c3ltYm9sJzptYXRjaFN5bWJvbEhlbHBlcixcbidtYXRjaDpyZW1vdGFibGUnOm1hdGNoUmVtb3RhYmxlSGVscGVyLFxuXG4nbWF0Y2g6bHQnOm1hdGNoTFRIZWxwZXIsXG4nbWF0Y2g6bHRlJzptYXRjaExURUhlbHBlcixcbidtYXRjaDpndGUnOm1hdGNoR1RFSGVscGVyLFxuJ21hdGNoOmd0JzptYXRjaEdUSGVscGVyLFxuXG4nbWF0Y2g6YXJyYXlPZic6bWF0Y2hBcnJheU9mSGVscGVyLFxuJ21hdGNoOnJlY29yZE9mJzptYXRjaFJlY29yZE9mSGVscGVyLFxuJ21hdGNoOnNldE9mJzptYXRjaFNldE9mSGVscGVyLFxuJ21hdGNoOmJhZ09mJzptYXRjaEJhZ09mSGVscGVyLFxuJ21hdGNoOm1hcE9mJzptYXRjaE1hcE9mSGVscGVyLFxuJ21hdGNoOnNwbGl0QXJyYXknOm1hdGNoU3BsaXRBcnJheUhlbHBlcixcbidtYXRjaDpzcGxpdFJlY29yZCc6bWF0Y2hTcGxpdFJlY29yZEhlbHBlcn0pO1xuXG5cbmNvbnN0IG1ha2VNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmNvbnN0IG1hdGNoZXI9bWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG5hc3NlcnRQYXR0ZXJuKG1hdGNoZXIpO1xucmV0dXJuIG1hdGNoZXI7XG4gfTtcblxuY29uc3QgbWFrZUtpbmRNYXRjaGVyPShraW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmtpbmQnLGtpbmQpO1xuXG5jb25zdCBBbnlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6YW55Jyx1bmRlZmluZWQpO1xuY29uc3QgU2NhbGFyU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnNjYWxhcicsdW5kZWZpbmVkKTtcbmNvbnN0IEtleVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDprZXknLHVuZGVmaW5lZCk7XG5jb25zdCBQYXR0ZXJuU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnBhdHRlcm4nLHVuZGVmaW5lZCk7XG5jb25zdCBCb29sZWFuU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdib29sZWFuJyk7XG5jb25zdCBOdW1iZXJTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ251bWJlcicpO1xuY29uc3QgQmlnSW50U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmlnaW50JyxbXSk7XG5jb25zdCBOYXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpuYXQnLFtdKTtcbmNvbnN0IFN0cmluZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN0cmluZycsW10pO1xuY29uc3QgU3ltYm9sU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3ltYm9sJyxbXSk7XG5jb25zdCBSZWNvcmRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpyZWNvcmRPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBBcnJheVNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmFycmF5T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgU2V0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c2V0T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgQmFnU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmFnT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgTWFwU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bWFwT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgUmVtb3RhYmxlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdyZW1vdGFibGUnKTtcbmNvbnN0IEVycm9yU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdlcnJvcicpO1xuY29uc3QgUHJvbWlzZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncHJvbWlzZScpO1xuY29uc3QgVW5kZWZpbmVkU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCd1bmRlZmluZWQnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlTGltaXRzTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5pZihwYXlsb2FkW3BheWxvYWQubGVuZ3RoLTFdPT09dW5kZWZpbmVkKXtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxwYXlsb2FkLmxlbmd0aC0xKSk7XG4gfVxucmV0dXJuIG1ha2VNYXRjaGVyKHRhZyxwYXlsb2FkKTtcbiB9O1xuXG5jb25zdCBtYWtlUmVtb3RhYmxlTWF0Y2hlcj0obGFiZWw9dW5kZWZpbmVkKT0+XG5sYWJlbD09PXVuZGVmaW5lZD9cblJlbW90YWJsZVNoYXBlOlxubWFrZU1hdGNoZXIoJ21hdGNoOnJlbW90YWJsZScsaGFyZGVuKHtsYWJlbH0pKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlU3BsaXRQYXlsb2FkPShcbmVtcHR5LFxuYmFzZSxcbm9wdGlvbmFsPXVuZGVmaW5lZCxcbnJlc3Q9dW5kZWZpbmVkKT0+XG57XG5pZihyZXN0KXtcbnJldHVybltiYXNlLG9wdGlvbmFsfHxlbXB0eSxyZXN0XTtcbiB9XG5pZihvcHRpb25hbCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbF07XG4gfVxucmV0dXJuW2Jhc2VdO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IE09aGFyZGVuKHtcbmFueTooKT0+QW55U2hhcGUsXG5hbmQ6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmFuZCcscGF0dHMpLFxub3I6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOm9yJyxwYXR0cyksXG5ub3Q6KHN1YlBhdHQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bm90JyxzdWJQYXR0KSxcblxuc2NhbGFyOigpPT5TY2FsYXJTaGFwZSxcbmtleTooKT0+S2V5U2hhcGUsXG5wYXR0ZXJuOigpPT5QYXR0ZXJuU2hhcGUsXG5raW5kOm1ha2VLaW5kTWF0Y2hlcixcbnRhZ2dlZDoodGFnUGF0dD1NLnN0cmluZygpLHBheWxvYWRQYXR0PU0uYW55KCkpPT5cbm1ha2VNYXRjaGVyKCdtYXRjaDp0YWdnZWQnLGhhcmRlbihbdGFnUGF0dCxwYXlsb2FkUGF0dF0pKSxcbmJvb2xlYW46KCk9PkJvb2xlYW5TaGFwZSxcbm51bWJlcjooKT0+TnVtYmVyU2hhcGUsXG5iaWdpbnQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmlnaW50JyxbbGltaXRzXSk6QmlnSW50U2hhcGUsXG5uYXQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bmF0JyxbbGltaXRzXSk6TmF0U2hhcGUsXG5zdHJpbmc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3RyaW5nJyxbbGltaXRzXSk6U3RyaW5nU2hhcGUsXG5zeW1ib2w6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3ltYm9sJyxbbGltaXRzXSk6U3ltYm9sU2hhcGUsXG5yZWNvcmQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLnJlY29yZE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOlJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmFycmF5OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5hcnJheU9mKE0uYW55KCksbGltaXRzKTpBcnJheVNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc2V0OihsaW1pdHM9dW5kZWZpbmVkKT0+bGltaXRzP00uc2V0T2YoTS5hbnkoKSxsaW1pdHMpOlNldFNoYXBlLFxuYmFnOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5iYWdPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpCYWdTaGFwZSxcbm1hcDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ubWFwT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6TWFwU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVtb3RhYmxlOm1ha2VSZW1vdGFibGVNYXRjaGVyLFxuZXJyb3I6KCk9PkVycm9yU2hhcGUsXG5wcm9taXNlOigpPT5Qcm9taXNlU2hhcGUsXG51bmRlZmluZWQ6KCk9PlVuZGVmaW5lZFNoYXBlLFxubnVsbDooKT0+bnVsbCxcblxubHQ6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdCcscmlnaHRPcGVyYW5kKSxcbmx0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0ZScscmlnaHRPcGVyYW5kKSxcbmVxOihrZXkpPT57XG5hc3NlcnRLZXkoa2V5KTtcbnJldHVybiBrZXk9PT11bmRlZmluZWQ/TS51bmRlZmluZWQoKTprZXk7XG4gfSxcbm5lcTooa2V5KT0+TS5ub3QoTS5lcShrZXkpKSxcbmd0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0ZScscmlnaHRPcGVyYW5kKSxcbmd0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3QnLHJpZ2h0T3BlcmFuZCksXG5cbnJlY29yZE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnJlY29yZE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5hcnJheU9mOihzdWJQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmFycmF5T2YnLFtzdWJQYXR0LGxpbWl0c10pLFxuc2V0T2Y6KGtleVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c2V0T2YnLFtrZXlQYXR0LGxpbWl0c10pLFxuYmFnT2Y6KGtleVBhdHQ9TS5hbnkoKSxjb3VudFBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmFnT2YnLFtrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHNdKSxcbm1hcE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm1hcE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5zcGxpdEFycmF5OihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRBcnJheScsXG5tYWtlU3BsaXRQYXlsb2FkKFtdLGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdFJlY29yZDooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0UmVjb3JkJyxcbm1ha2VTcGxpdFBheWxvYWQoe30sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0OihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShiYXNlLHJlc3QmJltdLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoYmFzZSxyZXN0JiZ7fSxyZXN0KTtcbiB9XG4gfSxcbnBhcnRpYWw6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KFtdLGJhc2UscmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZCh7fSxiYXNlLHJlc3QpO1xuIH1cbiB9LFxuXG5lcmVmOih0KT0+TS5vcih0LE0ucHJvbWlzZSgpKSxcbm9wdDoodCk9Pk0ub3IoTS51bmRlZmluZWQoKSx0KSxcblxuaW50ZXJmYWNlOihpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKT0+XG4vL1xubWFrZUludGVyZmFjZUd1YXJkKGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpLFxuY2FsbDooLi4uYXJnUGF0dGVybnMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignc3luYycsYXJnUGF0dGVybnMpLFxuY2FsbFdoZW46KC4uLmFyZ0d1YXJkcyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdhc3luYycsYXJnR3VhcmRzKSxcblxuYXdhaXQ6KGFyZ1BhdHRlcm4pPT5cbi8vXG5tYWtlQXdhaXRBcmdHdWFyZChhcmdQYXR0ZXJuKSxcbnJhdzooKT0+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjNj19vbmNlLmNoZWNrTWF0Y2hlcyhjaGVja01hdGNoZXMpOyRozY9fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaM2PX29uY2UuYXNzZXJ0UGF0dGVybihhc3NlcnRQYXR0ZXJuKTskaM2PX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjNj19vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRozY9fb25jZS5NKE0pOyRozY9fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc0F3YWl0QXJnR3VhcmQoaXNBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihpc0F3YWl0QXJnR3VhcmQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEF3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSwnYXdhaXRBcmdHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRozY9fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc1Jhd0d1YXJkKGlzUmF3R3VhcmQpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UmF3R3VhcmQ9KHNwZWNpbWVuKT0+XG5tdXN0TWF0Y2goc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSwncmF3R3VhcmQnKTtcblxuLypcblxuICovJGjNj19vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgQXJnR3VhcmRTaGFwZT1NLm9yKFJhd0d1YXJkU2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTtcbmNvbnN0ICAgICAgICBBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoQXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRozY9fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5NZXRob2RHdWFyZFNoYXBlKE1ldGhvZEd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydE1ldGhvZEd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixNZXRob2RHdWFyZFNoYXBlLCdtZXRob2RHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRozY9fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLkludGVyZmFjZUd1YXJkU2hhcGUoSW50ZXJmYWNlR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0SW50ZXJmYWNlR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEludGVyZmFjZUd1YXJkU2hhcGUsJ2ludGVyZmFjZUd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACEAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3Gj3QpARAACQEQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjgvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsbWFrZVByb21pc2VLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgZnJlZXplPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9PYmplY3QuZnJlZXplO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VRdWV1ZT0oKT0+e1xubGV0e3Byb21pc2U6dGFpbFByb21pc2UscmVzb2x2ZTp0YWlsUmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnJldHVybntcbnB1dCh2YWx1ZSl7XG5jb25zdHtyZXNvbHZlLHByb21pc2V9PW1ha2VQcm9taXNlS2l0KCk7XG50YWlsUmVzb2x2ZShmcmVlemUoe3ZhbHVlLHByb21pc2V9KSk7XG50YWlsUmVzb2x2ZT1yZXNvbHZlO1xuIH0sXG5nZXQoKXtcbmNvbnN0IHByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQudmFsdWUpO1xudGFpbFByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQucHJvbWlzZSk7XG5yZXR1cm4gaGFyZGVuKHByb21pc2UpO1xuIH19O1xuXG4gfTskaM2PX29uY2UubWFrZVF1ZXVlKG1ha2VRdWV1ZSk7XG5oYXJkZW4obWFrZVF1ZXVlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdHJlYW09KGFja3MsZGF0YSk9PntcbmNvbnN0IHN0cmVhbT1oYXJkZW4oe1xuLypcblxuICAgICAqL1xubmV4dCh2YWx1ZSl7XG4vL1xuLy9cbmRhdGEucHV0KGZyZWV6ZSh7dmFsdWUsZG9uZTpmYWxzZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG5yZXR1cm4odmFsdWUpe1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOnRydWV9KSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuLypcblxuICAgICAqL1xudGhyb3coZXJyb3Ipe1xuZGF0YS5wdXQoaGFyZGVuKFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiBzdHJlYW07XG4gfX0pO1xuXG5yZXR1cm4gc3RyZWFtO1xuIH07JGjNj19vbmNlLm1ha2VTdHJlYW0obWFrZVN0cmVhbSk7XG5oYXJkZW4obWFrZVN0cmVhbSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlUGlwZT0oKT0+e1xuY29uc3QgZGF0YT1tYWtlUXVldWUoKTtcbmNvbnN0IGFja3M9bWFrZVF1ZXVlKCk7XG5jb25zdCByZWFkZXI9bWFrZVN0cmVhbShhY2tzLGRhdGEpO1xuY29uc3Qgd3JpdGVyPW1ha2VTdHJlYW0oZGF0YSxhY2tzKTtcbnJldHVybiBoYXJkZW4oW3dyaXRlcixyZWFkZXJdKTtcbiB9OyRozY9fb25jZS5tYWtlUGlwZShtYWtlUGlwZSk7XG5oYXJkZW4obWFrZVBpcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwdW1wPWFzeW5jKHdyaXRlcixyZWFkZXIscHJpbWVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdGljaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gdG9jayh3cml0ZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdG9jaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVhZGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xucmV0dXJuIHRpY2socmVhZGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiByZWFkZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG5hd2FpdCB0aWNrKHJlYWRlci5uZXh0KHByaW1lcikpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5wdW1wKHB1bXApO1xuaGFyZGVuKHB1bXApO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByaW1lPShnZW5lcmF0b3IscHJpbWVyKT0+e1xuLy9cbmNvbnN0IGZpcnN0PWdlbmVyYXRvci5uZXh0KHByaW1lcik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuY29uc3QgcHJpbWVkPWhhcmRlbih7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5uZXh0KHZhbHVlKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IucmV0dXJuKHZhbHVlKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyB0aHJvdyhlcnJvcil7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnRocm93IGVycm9yO1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLnRocm93KGVycm9yKTtcbiB9fSk7XG5cbnJldHVybiBwcmltZWQ7XG4gfTskaM2PX29uY2UucHJpbWUocHJpbWUpO1xuaGFyZGVuKHByaW1lKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBSZWFkZXI9KHJlYWRlcix0cmFuc2Zvcm0pPT57XG5hc3luYyBmdW5jdGlvbip0cmFuc2Zvcm1HZW5lcmF0b3IoKXtcbmZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiByZWFkZXIpe1xueWllbGQgdHJhbnNmb3JtKHZhbHVlKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IpO1xucmV0dXJuIGhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IoKSk7XG4gfTskaM2PX29uY2UubWFwUmVhZGVyKG1hcFJlYWRlcik7XG5oYXJkZW4obWFwUmVhZGVyKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBXcml0ZXI9KHdyaXRlcix0cmFuc2Zvcm0pPT57XG5jb25zdCB0cmFuc2Zvcm1lZFdyaXRlcj1oYXJkZW4oe1xuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLm5leHQodHJhbnNmb3JtKHZhbHVlKSk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4odmFsdWUpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfX0pO1xuXG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfTskaM2PX29uY2UubWFwV3JpdGVyKG1hcFdyaXRlcik7XG5oYXJkZW4obWFwV3JpdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VRdWV1ZSI6WyJtYWtlUXVldWUiXSwibWFrZVN0cmVhbSI6WyJtYWtlU3RyZWFtIl0sIm1ha2VQaXBlIjpbIm1ha2VQaXBlIl0sInB1bXAiOlsicHVtcCJdLCJwcmltZSI6WyJwcmltZSJdLCJtYXBSZWFkZXIiOlsibWFwUmVhZGVyIl0sIm1hcFdyaXRlciI6WyJtYXBXcml0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKhDskZEBAACRAQAAIAAAAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3RyYW1wb2xpbmUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy90cmFtcG9saW5lLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90cmFtcG9saW5lLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPJouaAgBwAAIAcAACkAAABAZW5kby90cmFtcG9saW5lLXYxLjAuMy9zcmMvdHJhbXBvbGluZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNUcmFtcG9saW5lIiwiZ2VuZXJhdG9yUHJvdG90eXBlIiwic3luY1RyYW1wb2xpbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzeW5jVHJhbXBvbGluZSwgJ25hbWUnLCB7dmFsdWU6IFwic3luY1RyYW1wb2xpbmVcIn0pOyRozY9fb25jZS5zeW5jVHJhbXBvbGluZShzeW5jVHJhbXBvbGluZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jVHJhbXBvbGluZSwgJ25hbWUnLCB7dmFsdWU6IFwiYXN5bmNUcmFtcG9saW5lXCJ9KTskaM2PX29uY2UuYXN5bmNUcmFtcG9saW5lKGFzeW5jVHJhbXBvbGluZSk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuICovXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7YmluZH09RnVuY3Rpb24ucHJvdG90eXBlO1xuY29uc3QgdW5jdXJyeVRoaXM9YmluZC5iaW5kKGJpbmQuY2FsbCk7Ly9cbmNvbnN0ICAgICAgIHtwcm90b3R5cGU6Z2VuZXJhdG9yUHJvdG90eXBlfT1nZXRQcm90b3R5cGVPZihcbi8vXG5mdW5jdGlvbiooKXsgfSk7JGjNj19vbmNlLmdlbmVyYXRvclByb3RvdHlwZShnZW5lcmF0b3JQcm90b3R5cGUpO1xuXG5jb25zdCBnZW5lcmF0b3JOZXh0PXVuY3VycnlUaGlzKGdlbmVyYXRvclByb3RvdHlwZS5uZXh0KTtcbmNvbnN0IGdlbmVyYXRvclRocm93PXVuY3VycnlUaGlzKGdlbmVyYXRvclByb3RvdHlwZS50aHJvdyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHN5bmNUcmFtcG9saW5lKGdlbmVyYXRvckZuLC4uLmFyZ3Mpe1xuY29uc3QgaXRlcmF0b3I9Z2VuZXJhdG9yRm4oLi4uYXJncyk7XG5sZXQgcmVzdWx0PWdlbmVyYXRvck5leHQoaXRlcmF0b3IpO1xud2hpbGUoIXJlc3VsdC5kb25lKXtcbnRyeXtcbnJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yLHJlc3VsdC52YWx1ZSk7XG4gfWNhdGNoKGVycil7XG5yZXN1bHQ9Z2VuZXJhdG9yVGhyb3coaXRlcmF0b3IsZXJyKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdC52YWx1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIGFzeW5jVHJhbXBvbGluZShnZW5lcmF0b3JGbiwuLi5hcmdzKXtcbmNvbnN0IGl0ZXJhdG9yPWdlbmVyYXRvckZuKC4uLmFyZ3MpO1xubGV0IHJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yKTtcbndoaWxlKCFyZXN1bHQuZG9uZSl7XG50cnl7XG4vL1xuY29uc3QgdmFsPWF3YWl0IHJlc3VsdC52YWx1ZTtcbnJlc3VsdD1nZW5lcmF0b3JOZXh0KGl0ZXJhdG9yLHZhbCk7XG4gfWNhdGNoKGVycil7XG5yZXN1bHQ9Z2VuZXJhdG9yVGhyb3coaXRlcmF0b3IsZXJyKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdC52YWx1ZTtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZW5lcmF0b3JQcm90b3R5cGUiOlsiZ2VuZXJhdG9yUHJvdG90eXBlIl0sInN5bmNUcmFtcG9saW5lIjpbInN5bmNUcmFtcG9saW5lIl0sImFzeW5jVHJhbXBvbGluZSI6WyJhc3luY1RyYW1wb2xpbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA1wBPs4wCAACMAgAAGQAAAEBlbmRvL3ppcC12MS4wLjkvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCIuL3NyYy9yZWFkZXIuanMiLCIuL3NyYy93cml0ZXIuanMiXSwiZXhwb3J0cyI6WyJyZWFkWmlwIiwicmVhZFppcCIsIndyaXRlWmlwIiwid3JpdGVaaXAiXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiLi9zcmMvcmVhZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy93cml0ZXIuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9yZWFkZXIuanMiOltbIlppcFJlYWRlciIsIlppcFJlYWRlciJdLFsicmVhZFppcCIsInJlYWRaaXAiXV0sIi4vc3JjL3dyaXRlci5qcyI6W1siWmlwV3JpdGVyIiwiWmlwV3JpdGVyIl0sWyJ3cml0ZVppcCIsIndyaXRlWmlwIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABkqpIDQhIAAEISAAAlAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvYnVmZmVyLXJlYWRlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnVmZmVyUmVhZGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwcml2YXRlRmllbGRzPW5ldyBXZWFrTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHByaXZhdGVGaWVsZHNHZXQ9cHJpdmF0ZUZpZWxkcy5nZXQuYmluZChwcml2YXRlRmllbGRzKTtcblxuY2xhc3MgICAgICAgIEJ1ZmZlclJlYWRlcntcbi8qXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKGJ1ZmZlcil7XG5jb25zdCBieXRlcz1uZXcgVWludDhBcnJheShidWZmZXIpO1xuY29uc3QgZGF0YT1uZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyKTtcbnByaXZhdGVGaWVsZHMuc2V0KHRoaXMse1xuYnl0ZXMsXG5kYXRhLFxubGVuZ3RoOmJ5dGVzLmxlbmd0aCxcbmluZGV4OjAsXG5vZmZzZXQ6MH0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgIGdldCBsZW5ndGgoKXtcbnJldHVybiBwcml2YXRlRmllbGRzR2V0KHRoaXMpLmxlbmd0aDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICBnZXQgaW5kZXgoKXtcbnJldHVybiBwcml2YXRlRmllbGRzR2V0KHRoaXMpLmluZGV4O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIHNldCBpbmRleChpbmRleCl7XG50aGlzLnNlZWsoaW5kZXgpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICBzZXQgb2Zmc2V0KG9mZnNldCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKG9mZnNldD5maWVsZHMuZGF0YS5ieXRlTGVuZ3RoKXtcbnRocm93IEVycm9yKCdDYW5ub3Qgc2V0IG9mZnNldCBiZXlvbmQgbGVuZ3RoIG9mIHVuZGVybHlpbmcgZGF0YScpO1xuIH1cbmlmKG9mZnNldDwwKXtcbnRocm93IEVycm9yKCdDYW5ub3Qgc2V0IG5lZ2F0aXZlIG9mZnNldCcpO1xuIH1cbmZpZWxkcy5vZmZzZXQ9b2Zmc2V0O1xuZmllbGRzLmxlbmd0aD1maWVsZHMuZGF0YS5ieXRlTGVuZ3RoLWZpZWxkcy5vZmZzZXQ7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgICBjYW5TZWVrKGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIGluZGV4Pj0wJiZmaWVsZHMub2Zmc2V0K2luZGV4PD1maWVsZHMubGVuZ3RoO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgICAgIGFzc2VydENhblNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZighdGhpcy5jYW5TZWVrKGluZGV4KSl7XG50aHJvdyBFcnJvcihcbiBgRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAke2ZpZWxkcy5sZW5ndGh9LCBhc2tlZCBpbmRleCAke2luZGV4fWApO1xuXG4gfVxuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5jb25zdCByZXN0b3JlPWZpZWxkcy5pbmRleDtcbnRoaXMuYXNzZXJ0Q2FuU2VlayhpbmRleCk7XG5maWVsZHMuaW5kZXg9aW5kZXg7XG5yZXR1cm4gcmVzdG9yZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICBwZWVrKHNpemUpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG4vL1xuc2l6ZT1NYXRoLm1heCgwLE1hdGgubWluKGZpZWxkcy5sZW5ndGgtZmllbGRzLmluZGV4LHNpemUpKTtcbmlmKHNpemU9PT0wKXtcbi8vXG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gfVxuY29uc3QgcmVzdWx0PWZpZWxkcy5ieXRlcy5zdWJhcnJheShcbmZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4LFxuZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXgrc2l6ZSk7XG5cbnJldHVybiByZXN1bHQ7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgIGNhblJlYWQob2Zmc2V0KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIHRoaXMuY2FuU2VlayhmaWVsZHMuaW5kZXgrb2Zmc2V0KTtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG4gICAgICAgICAgICAgYXNzZXJ0Q2FuUmVhZChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblNlZWsoZmllbGRzLmluZGV4K29mZnNldCk7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuICAgIHJlYWQoc2l6ZSl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZChzaXplKTtcbmNvbnN0IHJlc3VsdD10aGlzLnBlZWsoc2l6ZSk7XG5maWVsZHMuaW5kZXgrPXNpemU7XG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIHJlYWRVaW50OCgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoMSk7XG5jb25zdCBpbmRleD1maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleDtcbmNvbnN0IHZhbHVlPWZpZWxkcy5kYXRhLmdldFVpbnQ4KGluZGV4KTtcbmZpZWxkcy5pbmRleCs9MTtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICByZWFkVWludDE2KGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZCgyKTtcbmNvbnN0IGluZGV4PWZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4O1xuY29uc3QgdmFsdWU9ZmllbGRzLmRhdGEuZ2V0VWludDE2KGluZGV4LGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTI7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgcmVhZFVpbnQzMihsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLmFzc2VydENhblJlYWQoNCk7XG5jb25zdCBpbmRleD1maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleDtcbmNvbnN0IHZhbHVlPWZpZWxkcy5kYXRhLmdldFVpbnQzMihpbmRleCxsaXR0bGVFbmRpYW4pO1xuZmllbGRzLmluZGV4Kz00O1xucmV0dXJuIHZhbHVlO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgYnl0ZUF0KGluZGV4KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xucmV0dXJuIGZpZWxkcy5ieXRlc1tmaWVsZHMub2Zmc2V0K2luZGV4XTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgc2tpcChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG50aGlzLnNlZWsoZmllbGRzLmluZGV4K29mZnNldCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICBleHBlY3QoZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZighdGhpcy5tYXRjaEF0KGZpZWxkcy5pbmRleCxleHBlY3RlZCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZpZWxkcy5pbmRleCs9ZXhwZWN0ZWQubGVuZ3RoO1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbiAgICAgICBtYXRjaEF0KGluZGV4LGV4cGVjdGVkKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYoaW5kZXgrZXhwZWN0ZWQubGVuZ3RoPmZpZWxkcy5sZW5ndGh8fGluZGV4PDApe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZvcihsZXQgaT0wO2k8ZXhwZWN0ZWQubGVuZ3RoO2krPTEpe1xuaWYoZXhwZWN0ZWRbaV0hPT10aGlzLmJ5dGVBdChpbmRleCtpKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgIGFzc2VydChleHBlY3RlZCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKCF0aGlzLmV4cGVjdChleHBlY3RlZCkpe1xudGhyb3cgRXJyb3IoXG4gYEV4cGVjdGVkICR7cShleHBlY3RlZCl9IGF0ICR7ZmllbGRzLmluZGV4fSwgZ290ICR7dGhpcy5wZWVrKFxuZXhwZWN0ZWQubGVuZ3RoKVxuIH1gKTtcblxuIH1cbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgZmluZExhc3QoZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5sZXQgaW5kZXg9ZmllbGRzLmxlbmd0aC1leHBlY3RlZC5sZW5ndGg7XG53aGlsZShpbmRleD49MCYmIXRoaXMubWF0Y2hBdChpbmRleCxleHBlY3RlZCkpe1xuaW5kZXgtPTE7XG4gfVxucmV0dXJuIGluZGV4O1xuIH19JGjNj19vbmNlLiBCdWZmZXJSZWFkZXIoQnVmZmVyUmVhZGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJ1ZmZlclJlYWRlciI6WyJCdWZmZXJSZWFkZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAORKVkEIOAABCDgAAJQAAAEBlbmRvL3ppcC12MS4wLjkvc3JjL2J1ZmZlci13cml0ZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkJ1ZmZlcldyaXRlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJpdmF0ZUZpZWxkcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGdldFByaXZhdGVGaWVsZHM9KHNlbGYpPT57XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkcy5nZXQoc2VsZik7XG5pZighZmllbGRzKXtcbnRocm93IEVycm9yKCdCdWZmZXJXcml0ZXIgZmllbGRzIGFyZSBub3QgaW5pdGlhbGl6ZWQnKTtcbiB9XG5yZXR1cm4gZmllbGRzO1xuIH07XG5cbmNvbnN0IGFzc2VydE5hdE51bWJlcj0obik9PntcbmlmKE51bWJlci5pc1NhZmVJbnRlZ2VyKG4pJiYvKiAgICAgICAgICAgICAgICAgKi9uPj0wKXtcbnJldHVybjtcbiB9XG50aHJvdyBUeXBlRXJyb3IoIGBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdCAke259YCk7XG4gfTtcblxuY2xhc3MgICAgICAgIEJ1ZmZlcldyaXRlcntcbi8qXG5cbiAgICovXG4gICAgICAgICAgZ2V0IGxlbmd0aCgpe1xucmV0dXJuIGdldFByaXZhdGVGaWVsZHModGhpcykubGVuZ3RoO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIGdldCBpbmRleCgpe1xucmV0dXJuIGdldFByaXZhdGVGaWVsZHModGhpcykuaW5kZXg7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgc2V0IGluZGV4KGluZGV4KXtcbnRoaXMuc2VlayhpbmRleCk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3RvcihjYXBhY2l0eT0xNil7XG5jb25zdCBieXRlcz1uZXcgVWludDhBcnJheShjYXBhY2l0eSk7XG5jb25zdCBkYXRhPW5ldyBEYXRhVmlldyhieXRlcy5idWZmZXIpO1xucHJpdmF0ZUZpZWxkcy5zZXQodGhpcyx7XG5ieXRlcyxcbmRhdGEsXG5pbmRleDowLFxubGVuZ3RoOjAsXG5jYXBhY2l0eX0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgICAgIGVuc3VyZUNhblNlZWsocmVxdWlyZWQpe1xuYXNzZXJ0TmF0TnVtYmVyKHJlcXVpcmVkKTtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xubGV0IGNhcGFjaXR5PWZpZWxkcy5jYXBhY2l0eTtcbndoaWxlKGNhcGFjaXR5PHJlcXVpcmVkKXtcbmNhcGFjaXR5Kj0yO1xuIH1cbmNvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGNhcGFjaXR5KTtcbmNvbnN0IGRhdGE9bmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlcik7XG5ieXRlcy5zZXQoZmllbGRzLmJ5dGVzLnN1YmFycmF5KDAsZmllbGRzLmxlbmd0aCkpO1xuZmllbGRzLmJ5dGVzPWJ5dGVzO1xuZmllbGRzLmRhdGE9ZGF0YTtcbmZpZWxkcy5jYXBhY2l0eT1jYXBhY2l0eTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgc2VlayhpbmRleCl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuU2VlayhpbmRleCk7XG5maWVsZHMuaW5kZXg9aW5kZXg7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgICAgIGVuc3VyZUNhbldyaXRlKHNpemUpe1xuYXNzZXJ0TmF0TnVtYmVyKHNpemUpO1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhblNlZWsoZmllbGRzLmluZGV4K3NpemUpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgd3JpdGUoYnl0ZXMpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKGJ5dGVzLmJ5dGVMZW5ndGgpO1xuZmllbGRzLmJ5dGVzLnNldChieXRlcyxmaWVsZHMuaW5kZXgpO1xuZmllbGRzLmluZGV4Kz1ieXRlcy5ieXRlTGVuZ3RoO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICB3cml0ZUNvcHkoc3RhcnQsZW5kKXtcbmFzc2VydE5hdE51bWJlcihzdGFydCk7XG5hc3NlcnROYXROdW1iZXIoZW5kKTtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xuY29uc3Qgc2l6ZT1lbmQtc3RhcnQ7XG50aGlzLmVuc3VyZUNhbldyaXRlKHNpemUpO1xuZmllbGRzLmJ5dGVzLmNvcHlXaXRoaW4oZmllbGRzLmluZGV4LHN0YXJ0LGVuZCk7XG5maWVsZHMuaW5kZXgrPXNpemU7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgd3JpdGVVaW50OCh2YWx1ZSl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoMSk7XG5maWVsZHMuZGF0YS5zZXRVaW50OChmaWVsZHMuaW5kZXgsdmFsdWUpO1xuZmllbGRzLmluZGV4Kz0xO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgIHdyaXRlVWludDE2KHZhbHVlLGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoMik7XG5jb25zdCBpbmRleD1maWVsZHMuaW5kZXg7XG5maWVsZHMuZGF0YS5zZXRVaW50MTYoaW5kZXgsdmFsdWUsbGl0dGxlRW5kaWFuKTtcbmZpZWxkcy5pbmRleCs9MjtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgICB3cml0ZVVpbnQzMih2YWx1ZSxsaXR0bGVFbmRpYW4pe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG50aGlzLmVuc3VyZUNhbldyaXRlKDQpO1xuY29uc3QgaW5kZXg9ZmllbGRzLmluZGV4O1xuZmllbGRzLmRhdGEuc2V0VWludDMyKGluZGV4LHZhbHVlLGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTQ7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICAgICBzdWJhcnJheShiZWdpbixlbmQpe1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG5yZXR1cm4gZmllbGRzLmJ5dGVzLnN1YmFycmF5KDAsZmllbGRzLmxlbmd0aCkuc3ViYXJyYXkoYmVnaW4sZW5kKTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICBzbGljZShiZWdpbixlbmQpe1xucmV0dXJuIHRoaXMuc3ViYXJyYXkoYmVnaW4sZW5kKS5zbGljZSgpO1xuIH19JGjNj19vbmNlLiBCdWZmZXJXcml0ZXIoQnVmZmVyV3JpdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJ1ZmZlcldyaXRlciI6WyJCdWZmZXJXcml0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsLLlbJgBAACYAQAAIwAAAEBlbmRvL3ppcC12MS4wLjkvc3JjL2NvbXByZXNzaW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJTVE9SRSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLy9cbmNvbnN0ICAgICAgICBTVE9SRT0wOyRozY9fb25jZS5TVE9SRShTVE9SRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTVE9SRSI6WyJTVE9SRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB3uLF1rAMAAKwDAAAdAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvY3JjMzIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImNyYzMyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JjMzIsICduYW1lJywge3ZhbHVlOiBcImNyYzMyXCJ9KTskaM2PX29uY2UuY3JjMzIoY3JjMzIpOyAgIC8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vKlxuXG4gKi9cbmZ1bmN0aW9uIG1ha2VUYWJsZSgpe1xubGV0IGM7XG5jb25zdCB0YWJsZT1bXTtcblxuZm9yKGxldCBuPTA7bjwyNTY7bis9MSl7XG5jPW47XG5mb3IobGV0IGs9MDtrPDg7ays9MSl7XG5jPWMmMT8weGVkYjg4MzIwXmM+Pj4xOmM+Pj4xO1xuIH1cbnRhYmxlW25dPWM7XG4gfVxuXG5yZXR1cm4gdGFibGU7XG4gfVxuXG4vL1xuY29uc3QgdGFibGU9bWFrZVRhYmxlKCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGNyYzMyKGJ5dGVzLGxlbmd0aD1ieXRlcy5sZW5ndGgsaW5kZXg9MCxjcmM9MCl7XG5jb25zdCBlbmQ9aW5kZXgrbGVuZ3RoO1xuXG5jcmNePS0xO1xuXG5mb3IobGV0IGk9aW5kZXg7aTxlbmQ7aSs9MSl7XG5jcmM9Y3JjPj4+OF50YWJsZVsoY3JjXmJ5dGVzW2ldKSYweGZmXTtcbiB9XG5cbnJldHVybihjcmNeLTEpPj4+MDtcbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjcmMzMiI6WyJjcmMzMiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAaLaJ32SUAANklAAAlAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvZm9ybWF0LXJlYWRlci5qc3siaW1wb3J0cyI6WyIuL3R5cGVzLmpzIiwiLi9jcmMzMi5qcyIsIi4vc2lnbmF0dXJlLmpzIiwiLi9jb21wcmVzc2lvbi5qcyJdLCJleHBvcnRzIjpbInJlYWRaaXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgY3JjMzIsc2lnbmF0dXJlLGNvbXByZXNzaW9uOyRozY9faW1wb3J0cyhbW1wiLi90eXBlcy5qc1wiLCBbXV0sW1wiLi9jcmMzMi5qc1wiLCBbW1wiY3JjMzJcIiwgWyRozY9fYSA9PiAoY3JjMzIgPSAkaM2PX2EpXV1dXSxbXCIuL3NpZ25hdHVyZS5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChzaWduYXR1cmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NvbXByZXNzaW9uLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNvbXByZXNzaW9uID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmVhZFppcCwgJ25hbWUnLCB7dmFsdWU6IFwicmVhZFppcFwifSk7JGjNj19vbmNlLnJlYWRaaXAocmVhZFppcCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBNQVhfVkFMVUVfMTZCSVRTPTY1NTM1O1xuY29uc3QgTUFYX1ZBTFVFXzMyQklUUz00Mjk0OTY3Mjk1O1xuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGlzRW5jcnlwdGVkKGJpdEZsYWcpe1xucmV0dXJuKGJpdEZsYWcmMHgwMDAxKT09PTB4MDAwMTtcbiB9XG5cbi8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZERvc0RhdGVUaW1lKHJlYWRlcil7XG5jb25zdCBkb3NUaW1lPXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xucmV0dXJuIG5ldyBEYXRlKFxuRGF0ZS5VVEMoXG4oZG9zVGltZT4+MjUmMHg3ZikrMTk4MCwvL1xuKGRvc1RpbWU+PjIxJjB4MGYpLTEsLy9cbmRvc1RpbWU+PjE2JjB4MWYsLy9cbmRvc1RpbWU+PjExJjB4MWYsLy9cbmRvc1RpbWU+PjUmMHgzZiwvL1xuKGRvc1RpbWUmMHgxZik8PDEvL1xuKSk7XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkSGVhZGVycyhyZWFkZXIpe1xucmV0dXJue1xudmVyc2lvbk5lZWRlZDpyZWFkZXIucmVhZFVpbnQxNih0cnVlKSxcbmJpdEZsYWc6cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSksXG5jb21wcmVzc2lvbk1ldGhvZDpyZWFkZXIucmVhZFVpbnQxNih0cnVlKSxcbmRhdGU6cmVhZERvc0RhdGVUaW1lKHJlYWRlciksXG5jcmMzMjpyZWFkZXIucmVhZFVpbnQzMih0cnVlKSxcbmNvbXByZXNzZWRMZW5ndGg6cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSksXG51bmNvbXByZXNzZWRMZW5ndGg6cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSl9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZENlbnRyYWxGaWxlSGVhZGVyKHJlYWRlcil7XG5jb25zdCB2ZXJzaW9uPXJlYWRlci5yZWFkVWludDgoKTtcbmNvbnN0IG1hZGVCeT1yZWFkZXIucmVhZFVpbnQ4KCk7XG5jb25zdCBoZWFkZXJzPXJlYWRIZWFkZXJzKHJlYWRlcik7XG5jb25zdCBuYW1lTGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZXh0cmFGaWVsZHNMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBjb21tZW50TGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZGlza051bWJlclN0YXJ0PXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5jb25zdCBmaWxlU3RhcnQ9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5cbmNvbnN0IG5hbWU9cmVhZGVyLnJlYWQobmFtZUxlbmd0aCk7XG4vL1xucmVhZGVyLnNraXAoZXh0cmFGaWVsZHNMZW5ndGgpO1xuXG5pZihoZWFkZXJzLnVuY29tcHJlc3NlZExlbmd0aD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuaWYoaGVhZGVycy5jb21wcmVzc2VkTGVuZ3RoPT09TUFYX1ZBTFVFXzMyQklUUyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5pZihmaWxlU3RhcnQ9PT1NQVhfVkFMVUVfMzJCSVRTKXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cbmlmKGRpc2tOdW1iZXJTdGFydD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuXG5jb25zdCBjb21tZW50PXJlYWRlci5yZWFkKGNvbW1lbnRMZW5ndGgpO1xuXG5yZXR1cm57XG5uYW1lLFxudmVyc2lvbixcbm1hZGVCeSxcbi4uLmhlYWRlcnMsXG5kaXNrTnVtYmVyU3RhcnQsXG5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzLFxuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyxcbmZpbGVTdGFydCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiByZWFkQ2VudHJhbERpcmVjdG9yeShyZWFkZXIsbG9jYXRvcil7XG5jb25zdHtjZW50cmFsRGlyZWN0b3J5T2Zmc2V0LGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzfT1sb2NhdG9yO1xucmVhZGVyLnNlZWsoY2VudHJhbERpcmVjdG9yeU9mZnNldCk7XG5cbmNvbnN0IGVudHJpZXM9W107XG53aGlsZShyZWFkZXIuZXhwZWN0KHNpZ25hdHVyZS5DRU5UUkFMX0ZJTEVfSEVBREVSKSl7XG5jb25zdCBlbnRyeT1yZWFkQ2VudHJhbEZpbGVIZWFkZXIocmVhZGVyKTtcbmVudHJpZXMucHVzaChlbnRyeSk7XG4gfVxuXG5pZihjZW50cmFsRGlyZWN0b3J5UmVjb3JkcyE9PWVudHJpZXMubGVuZ3RoKXtcbi8vXG4vL1xudGhyb3cgRXJyb3IoXG4gYENvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCAke2NlbnRyYWxEaXJlY3RvcnlSZWNvcmRzfSByZWNvcmRzIGluIGNlbnRyYWwgZGlyLCBnb3QgJHtlbnRyaWVzLmxlbmd0aH1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXM7XG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEZpbGUocmVhZGVyKXtcbnJlYWRlci5leHBlY3Qoc2lnbmF0dXJlLkxPQ0FMX0ZJTEVfSEVBREVSKTtcbmNvbnN0IGhlYWRlcnM9cmVhZEhlYWRlcnMocmVhZGVyKTtcbmNvbnN0IG5hbWVMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBleHRyYUZpZWxkc0xlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IG5hbWU9cmVhZGVyLnJlYWQobmFtZUxlbmd0aCk7XG5yZWFkZXIuc2tpcChleHRyYUZpZWxkc0xlbmd0aCk7XG5jb25zdCBjb250ZW50PXJlYWRlci5yZWFkKGhlYWRlcnMuY29tcHJlc3NlZExlbmd0aCk7XG5yZXR1cm57bmFtZSwuLi5oZWFkZXJzLGNvbnRlbnR9O1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZExvY2FsRmlsZXMocmVhZGVyLHJlY29yZHMpe1xuY29uc3QgZmlsZXM9W107XG5mb3IoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpe1xucmVhZGVyLnNlZWsocmVjb3JkLmZpbGVTdGFydCk7XG5jb25zdCBmaWxlPXJlYWRGaWxlKHJlYWRlcik7XG5maWxlcy5wdXNoKGZpbGUpO1xuIH1cbnJldHVybiBmaWxlcztcbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkQmxvY2tFbmRPZkNlbnRyYWwocmVhZGVyKXtcbmlmKCFyZWFkZXIuZXhwZWN0KHNpZ25hdHVyZS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpKXtcbnRocm93IEVycm9yKFxuJ0NvcnJ1cHQgemlwIGZpbGUsIG9yIHppcCBmaWxlIGNvbnRhaW5pbmcgYW4gdW5zdXBwb3J0ZWQgdmFyaWFibGUtd2lkdGggZW5kLW9mLWFyY2hpdmUgY29tbWVudCwgb3IgYW4gdW5zdXBwb3J0ZWQgemlwIGZpbGUgd2l0aCA2NCBiaXQgc2l6ZXMnKTtcblxuIH1cbmNvbnN0IGRpc2tOdW1iZXI9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBkaXNrV2l0aENlbnRyYWxEaXJTdGFydD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzT25UaGlzRGlzaz1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVNpemU9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5T2Zmc2V0PXJlYWRlci5yZWFkVWludDMyKHRydWUpO1xuY29uc3QgY29tbWVudExlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBjb21tZW50PXRleHREZWNvZGVyLmRlY29kZShyZWFkZXIucmVhZChjb21tZW50TGVuZ3RoKSk7XG5yZXR1cm57XG5kaXNrTnVtYmVyLFxuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQsXG5jZW50cmFsRGlyZWN0b3J5UmVjb3Jkc09uVGhpc0Rpc2ssXG5jZW50cmFsRGlyZWN0b3J5UmVjb3JkcyxcbmNlbnRyYWxEaXJlY3RvcnlTaXplLFxuY2VudHJhbERpcmVjdG9yeU9mZnNldCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gcmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChyZWFkZXIpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBjZW50cmFsRGlyZWN0b3J5RW5kPXJlYWRlci5sZW5ndGgtMjI7XG5pZihjZW50cmFsRGlyZWN0b3J5RW5kPDApe1xudGhyb3cgRXJyb3IoJ0NvcnJ1cHRlZCB6aXA6IG5vdCBlbm91Z2ggY29udGVudCcpO1xuIH1cbnJlYWRlci5zZWVrKGNlbnRyYWxEaXJlY3RvcnlFbmQpO1xuY29uc3QgbG9jYXRvcj1yZWFkQmxvY2tFbmRPZkNlbnRyYWwocmVhZGVyKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgemlwNjQ9XG5sb2NhdG9yLmRpc2tOdW1iZXI9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuY2VudHJhbERpcmVjdG9yeVJlY29yZHNPblRoaXNEaXNrPT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzPT09TUFYX1ZBTFVFXzE2QklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlTaXplPT09TUFYX1ZBTFVFXzMyQklUU3x8XG5sb2NhdG9yLmNlbnRyYWxEaXJlY3RvcnlPZmZzZXQ9PT1NQVhfVkFMVUVfMzJCSVRTO1xuXG5pZih6aXA2NCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5cbmNvbnN0e1xuY2VudHJhbERpcmVjdG9yeU9mZnNldCxcbmNlbnRyYWxEaXJlY3RvcnlTaXplXG4vL1xufT1sb2NhdG9yO1xuXG5jb25zdCBleHBlY3RlZENlbnRyYWxEaXJlY3RvcnlFbmQ9XG5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0K2NlbnRyYWxEaXJlY3RvcnlTaXplO1xuY29uc3QgZXh0cmFCeXRlcz1jZW50cmFsRGlyZWN0b3J5RW5kLWV4cGVjdGVkQ2VudHJhbERpcmVjdG9yeUVuZDtcblxucmVhZGVyLm9mZnNldD1leHRyYUJ5dGVzO1xuXG5yZXR1cm4gbG9jYXRvcjtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUmVjb3JkcyhjZW50cmFsUmVjb3JkLGxvY2FsUmVjb3JkLGFyY2hpdmVOYW1lKXtcbmNvbnN0IGNlbnRyYWxOYW1lPXRleHREZWNvZGVyLmRlY29kZShjZW50cmFsUmVjb3JkLm5hbWUpO1xuY29uc3QgbG9jYWxOYW1lPXRleHREZWNvZGVyLmRlY29kZShsb2NhbFJlY29yZC5uYW1lKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaWYoY2VudHJhbE5hbWUucmVwbGFjZSgvXFxcXC9nLCcvJykhPT1sb2NhbE5hbWUpe1xudGhyb3cgRXJyb3IoXG4gYFppcCBpbnRlZ3JpdHkgZXJyb3I6IGNlbnRyYWwgcmVjb3JkIGZpbGUgbmFtZSAke3EoXG5jZW50cmFsTmFtZSlcbiB9IG11c3QgbWF0Y2ggbG9jYWwgZmlsZSBuYW1lICR7cShsb2NhbE5hbWUpfSBpbiBhcmNoaXZlICR7cShcbmFyY2hpdmVOYW1lKVxuIH1gKTtcblxuIH1cblxuLypcblxuXG4gICAqL1xuZnVuY3Rpb24gY2hlY2sodmFsdWUsbWVzc2FnZSl7XG5pZighdmFsdWUpe1xudGhyb3cgRXJyb3IoXG4gYFppcCBpbnRlZ3JpdHkgZXJyb3I6ICR7bWVzc2FnZX0gZm9yIGZpbGUgJHtxKFxubG9jYWxOYW1lKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZU5hbWUpfWApO1xuXG4gfVxuIH1cblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLmJpdEZsYWc9PT1sb2NhbFJlY29yZC5iaXRGbGFnLFxuIGBDZW50cmFsIHJlY29yZCBiaXQgZmxhZyAke2NlbnRyYWxSZWNvcmQuYml0RmxhZy50b1N0cmluZyhcbjE2KVxuIH0gbXVzdCBtYXRjaCBsb2NhbCByZWNvcmQgYml0IGZsYWcgJHtsb2NhbFJlY29yZC5iaXRGbGFnLnRvU3RyaW5nKDE2KX1gKTtcblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kPT09bG9jYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2QsXG4gYENlbnRyYWwgcmVjb3JkIGNvbXByZXNzaW9uIG1ldGhvZCAke3EoXG5jZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kKVxuIH0gbXVzdCBtYXRjaCBsb2NhbCBjb21wcmVzc2lvbiBtZXRob2QgJHtxKGxvY2FsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kKX1gKTtcblxuLy9cbi8vXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuY3JjMzI9PT1sb2NhbFJlY29yZC5jcmMzMixcbiBgQ2VudHJhbCByZWNvcmQgQ1JDLTMyIGNoZWNrc3VtICR7Y2VudHJhbFJlY29yZC5jcmMzMn0gbXVzdCBtYXRjaCBsb2NhbCBjaGVja3N1bSAke2xvY2FsUmVjb3JkLmNyYzMyfWApO1xuXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aD09PWxvY2FsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGgsXG4gYENlbnRyYWwgcmVjb3JkIGNvbXByZXNzZWQgc2l6ZSAke2NlbnRyYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aH0gbXVzdCBtYXRjaCBsb2NhbCAke2xvY2FsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGh9YCk7XG5cbmNoZWNrKFxuY2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGg9PT1sb2NhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGgsXG4gYENlbnRyYWwgcmVjb3JkIHVuY29tcHJlc3NlZCBzaXplICR7Y2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGh9IG11c3QgbWF0Y2ggbG9jYWwgJHtsb2NhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGh9YCk7XG5cblxuY29uc3QgY2hlY2tzdW09Y3JjMzIobG9jYWxSZWNvcmQuY29udGVudCk7XG5jaGVjayhcbmNoZWNrc3VtPT09bG9jYWxSZWNvcmQuY3JjMzIsXG4gYENSQy0zMiBjaGVja3N1bSBtaXNtYXRjaCwgd2FudGVkICR7bG9jYWxSZWNvcmQuY3JjMzJ9IGJ1dCBhY3R1YWwgY29udGVudCBpcyAke2NoZWNrc3VtfWApO1xuXG4gfVxuXG4vKlxuXG4gKi9cbmZ1bmN0aW9uIG1vZGVGb3JFeHRlcm5hbEF0dHJpYnV0ZXMoZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl7XG5yZXR1cm4gZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmMHhmZmZmO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gcmVjb3JkVG9GaWxlKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQpe1xuY29uc3QgbW9kZT1tb2RlRm9yRXh0ZXJuYWxBdHRyaWJ1dGVzKGNlbnRyYWxSZWNvcmQuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyk7XG5yZXR1cm57XG5uYW1lOmNlbnRyYWxSZWNvcmQubmFtZSxcbm1vZGUsXG5kYXRlOmNlbnRyYWxSZWNvcmQuZGF0ZSxcbmNyYzMyOmNlbnRyYWxSZWNvcmQuY3JjMzIsXG5jb21wcmVzc2lvbk1ldGhvZDpjZW50cmFsUmVjb3JkLmNvbXByZXNzaW9uTWV0aG9kLFxuY29tcHJlc3NlZExlbmd0aDpjZW50cmFsUmVjb3JkLmNvbXByZXNzZWRMZW5ndGgsXG51bmNvbXByZXNzZWRMZW5ndGg6Y2VudHJhbFJlY29yZC51bmNvbXByZXNzZWRMZW5ndGgsXG5jb250ZW50OmxvY2FsUmVjb3JkLmNvbnRlbnQsXG5jb21tZW50OmNlbnRyYWxSZWNvcmQuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBkZWNvbXByZXNzRmlsZShmaWxlKXtcbmlmKGZpbGUuY29tcHJlc3Npb25NZXRob2QhPT1jb21wcmVzc2lvbi5TVE9SRSl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGZpbmQgZGVjb21wcmVzc29yIGZvciBjb21wcmVzc2lvbiBtZXRob2QgJHtxKFxuZmlsZS5jb21wcmVzc2lvbk1ldGhvZClcbiB9IGZvciBmaWxlICR7ZmlsZS5uYW1lfWApO1xuXG4gfVxucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50OmZpbGUuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBkZWNvZGVGaWxlKGZpbGUpe1xuY29uc3QgbmFtZT10ZXh0RGVjb2Rlci5kZWNvZGUoZmlsZS5uYW1lKTtcbmNvbnN0IGNvbW1lbnQ9dGV4dERlY29kZXIuZGVjb2RlKGZpbGUuY29tbWVudCk7XG5yZXR1cm57XG5uYW1lLFxudHlwZTonZmlsZScsXG5tb2RlOmZpbGUubW9kZSYwbzc3NyxcbmRhdGU6ZmlsZS5kYXRlLFxuY29udGVudDpmaWxlLmNvbnRlbnQsXG5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByZWFkWmlwKHJlYWRlcixuYW1lPSc8dW5rbm93bj4nKXtcbmNvbnN0IGxvY2F0b3I9cmVhZEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChyZWFkZXIpO1xuY29uc3QgY2VudHJhbFJlY29yZHM9cmVhZENlbnRyYWxEaXJlY3RvcnkocmVhZGVyLGxvY2F0b3IpO1xuY29uc3QgbG9jYWxSZWNvcmRzPXJlYWRMb2NhbEZpbGVzKHJlYWRlcixjZW50cmFsUmVjb3Jkcyk7XG5jb25zdCBmaWxlcz1uZXcgTWFwKCk7XG5cbmZvcihsZXQgaT0wO2k8Y2VudHJhbFJlY29yZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgY2VudHJhbFJlY29yZD1jZW50cmFsUmVjb3Jkc1tpXTtcbmNvbnN0IGxvY2FsUmVjb3JkPWxvY2FsUmVjb3Jkc1tpXTtcblxuY2hlY2tSZWNvcmRzKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQsbmFtZSk7XG5cbmlmKGlzRW5jcnlwdGVkKGNlbnRyYWxSZWNvcmQuYml0RmxhZykpe1xudGhyb3cgRXJyb3IoJ0VuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiB9XG5cbmNvbnN0IGlzRGlyPShjZW50cmFsUmVjb3JkLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMmMHgwMDEwKSE9PTA7XG5pZighaXNEaXIpe1xuY29uc3QgY29tcHJlc3NlZEZpbGU9cmVjb3JkVG9GaWxlKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQpO1xuY29uc3QgZGVjb21wcmVzc2VkRmlsZT1kZWNvbXByZXNzRmlsZShjb21wcmVzc2VkRmlsZSk7XG5jb25zdCBkZWNvZGVkRmlsZT1kZWNvZGVGaWxlKGRlY29tcHJlc3NlZEZpbGUpO1xuZmlsZXMuc2V0KGRlY29kZWRGaWxlLm5hbWUsZGVjb2RlZEZpbGUpO1xuIH1cbi8vXG4gfVxucmV0dXJuIGZpbGVzO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlYWRaaXAiOlsicmVhZFppcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACTyk3ZhRQAAIUUAAAlAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvZm9ybWF0LXdyaXRlci5qc3siaW1wb3J0cyI6WyIuL2NyYzMyLmpzIiwiLi9zaWduYXR1cmUuanMiLCIuL2NvbXByZXNzaW9uLmpzIl0sImV4cG9ydHMiOlsid3JpdGVaaXAiLCJ3cml0ZVppcFJlY29yZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgY3JjMzIsc2lnbmF0dXJlLGNvbXByZXNzaW9uOyRozY9faW1wb3J0cyhbW1wiLi9jcmMzMi5qc1wiLCBbW1wiY3JjMzJcIiwgWyRozY9fYSA9PiAoY3JjMzIgPSAkaM2PX2EpXV1dXSxbXCIuL3NpZ25hdHVyZS5qc1wiLCBbW1wiKlwiLCBbJGjNj19hID0+IChzaWduYXR1cmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NvbXByZXNzaW9uLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNvbXByZXNzaW9uID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3JpdGVaaXBSZWNvcmRzLCAnbmFtZScsIHt2YWx1ZTogXCJ3cml0ZVppcFJlY29yZHNcIn0pOyRozY9fb25jZS53cml0ZVppcFJlY29yZHMod3JpdGVaaXBSZWNvcmRzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkod3JpdGVaaXAsICduYW1lJywge3ZhbHVlOiBcIndyaXRlWmlwXCJ9KTskaM2PX29uY2Uud3JpdGVaaXAod3JpdGVaaXApOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgVU5JWD0zO1xuY29uc3QgVU5JWF9WRVJTSU9OPTMwO1xuXG5jb25zdCB0ZXh0RW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiB3cml0ZURvc0RhdGVUaW1lKHdyaXRlcixkYXRlKXtcbmNvbnN0IGRvc1RpbWU9XG5kYXRlIT09dW5kZWZpbmVkJiZkYXRlIT09bnVsbD9cbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCYweDdmKTw8MjV8Ly9cbmRhdGUuZ2V0VVRDTW9udGgoKSsxPDwyMXwvL1xuZGF0ZS5nZXRVVENEYXRlKCk8PDE2fC8vXG5kYXRlLmdldFVUQ0hvdXJzKCk8PDExfC8vXG5kYXRlLmdldFVUQ01pbnV0ZXMoKTw8NXwvL1xuZGF0ZS5nZXRVVENTZWNvbmRzKCk+PjEvL1xuOjA7Ly9cbndyaXRlci53cml0ZVVpbnQzMihkb3NUaW1lLHRydWUpO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gd3JpdGVGaWxlKHdyaXRlcixmaWxlKXtcbi8vXG5jb25zdCBmaWxlU3RhcnQ9d3JpdGVyLmluZGV4O1xud3JpdGVyLndyaXRlKHNpZ25hdHVyZS5MT0NBTF9GSUxFX0hFQURFUik7XG5jb25zdCBoZWFkZXJTdGFydD13cml0ZXIuaW5kZXg7XG4vL1xud3JpdGVyLndyaXRlVWludDE2KDEwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuYml0RmxhZyx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmNvbXByZXNzaW9uTWV0aG9kLHRydWUpO1xud3JpdGVEb3NEYXRlVGltZSh3cml0ZXIsZmlsZS5kYXRlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLmNyYzMyLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGZpbGUuY29tcHJlc3NlZExlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLnVuY29tcHJlc3NlZExlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLm5hbWUubGVuZ3RoLHRydWUpO1xuY29uc3QgaGVhZGVyRW5kPXdyaXRlci5sZW5ndGg7XG5cbi8vXG53cml0ZXIud3JpdGVVaW50MTYoMCx0cnVlKTtcbndyaXRlci53cml0ZShmaWxlLm5hbWUpO1xuLy9cbndyaXRlci53cml0ZShmaWxlLmNvbnRlbnQpO1xuXG5yZXR1cm57XG5maWxlU3RhcnQsXG5oZWFkZXJTdGFydCxcbmhlYWRlckVuZH07XG5cbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlQ2VudHJhbEZpbGVIZWFkZXIod3JpdGVyLGZpbGUsbG9jYXRvcil7XG53cml0ZXIud3JpdGUoc2lnbmF0dXJlLkNFTlRSQUxfRklMRV9IRUFERVIpO1xud3JpdGVyLndyaXRlVWludDgoZmlsZS52ZXJzaW9uKTtcbndyaXRlci53cml0ZVVpbnQ4KGZpbGUubWFkZUJ5KTtcbndyaXRlci53cml0ZUNvcHkobG9jYXRvci5oZWFkZXJTdGFydCxsb2NhdG9yLmhlYWRlckVuZCk7XG4vL1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5jb21tZW50Lmxlbmd0aCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmRpc2tOdW1iZXJTdGFydCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmludGVybmFsRmlsZUF0dHJpYnV0ZXMsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoZmlsZS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGxvY2F0b3IuZmlsZVN0YXJ0LHRydWUpO1xud3JpdGVyLndyaXRlKGZpbGUuY2VudHJhbE5hbWUpO1xuLy9cbndyaXRlci53cml0ZShmaWxlLmNvbW1lbnQpO1xuIH1cblxuLypcblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKFxud3JpdGVyLFxuZW50cmllc0NvdW50LFxuY2VudHJhbERpcmVjdG9yeVN0YXJ0LFxuY2VudHJhbERpcmVjdG9yeUxlbmd0aCxcbmNvbW1lbnRCeXRlcylcbntcbndyaXRlci53cml0ZShzaWduYXR1cmUuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbndyaXRlci53cml0ZVVpbnQxNigwLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZW50cmllc0NvdW50LHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGVudHJpZXNDb3VudCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihjZW50cmFsRGlyZWN0b3J5TGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGNlbnRyYWxEaXJlY3RvcnlTdGFydCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihjb21tZW50Qnl0ZXMubGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlKGNvbW1lbnRCeXRlcyk7XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgd3JpdGVaaXBSZWNvcmRzKHdyaXRlcixyZWNvcmRzLGNvbW1lbnQ9Jycpe1xuLy9cbmNvbnN0IGxvY2F0b3JzPVtdO1xuZm9yKGxldCBpPTA7aTxyZWNvcmRzLmxlbmd0aDtpKz0xKXtcbmxvY2F0b3JzLnB1c2god3JpdGVGaWxlKHdyaXRlcixyZWNvcmRzW2ldKSk7XG4gfVxuXG4vL1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVN0YXJ0PXdyaXRlci5pbmRleDtcbmZvcihsZXQgaT0wO2k8bG9jYXRvcnMubGVuZ3RoO2krPTEpe1xud3JpdGVDZW50cmFsRmlsZUhlYWRlcih3cml0ZXIscmVjb3Jkc1tpXSxsb2NhdG9yc1tpXSk7XG4gfVxuY29uc3QgY2VudHJhbERpcmVjdG9yeUxlbmd0aD13cml0ZXIuaW5kZXgtY2VudHJhbERpcmVjdG9yeVN0YXJ0O1xuXG5jb25zdCBjb21tZW50Qnl0ZXM9dGV4dEVuY29kZXIuZW5jb2RlKGNvbW1lbnQpO1xuXG4vL1xud3JpdGVFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQoXG53cml0ZXIsXG5yZWNvcmRzLmxlbmd0aCxcbmNlbnRyYWxEaXJlY3RvcnlTdGFydCxcbmNlbnRyYWxEaXJlY3RvcnlMZW5ndGgsXG5jb21tZW50Qnl0ZXMpO1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlRmlsZShmaWxlKXtcbmNvbnN0IG5hbWU9dGV4dEVuY29kZXIuZW5jb2RlKGZpbGUubmFtZS5yZXBsYWNlKC9cXFxcL2csJy8nKSk7XG5jb25zdCBjb21tZW50PXRleHRFbmNvZGVyLmVuY29kZShmaWxlLmNvbW1lbnQpO1xucmV0dXJue1xubmFtZSxcbm1vZGU6ZmlsZS5tb2RlLFxuZGF0ZTpmaWxlLmRhdGUsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gY29tcHJlc3NGaWxlV2l0aFN0b3JlKGZpbGUpe1xucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY3JjMzI6Y3JjMzIoZmlsZS5jb250ZW50KSxcbmNvbXByZXNzaW9uTWV0aG9kOmNvbXByZXNzaW9uLlNUT1JFLFxuY29tcHJlc3NlZExlbmd0aDpmaWxlLmNvbnRlbnQubGVuZ3RoLFxudW5jb21wcmVzc2VkTGVuZ3RoOmZpbGUuY29udGVudC5sZW5ndGgsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiBleHRlcm5hbEZpbGVBdHRyaWJ1dGVzKG1vZGUpe1xucmV0dXJuKG1vZGUmMG83Nzd8MG8xMDAwMDApPDwxNjtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIG1ha2VGaWxlUmVjb3JkKGZpbGUpe1xucmV0dXJue1xubmFtZTpmaWxlLm5hbWUsXG5jZW50cmFsTmFtZTpmaWxlLm5hbWUsXG5tYWRlQnk6VU5JWCxcbnZlcnNpb246VU5JWF9WRVJTSU9OLFxudmVyc2lvbk5lZWRlZDowLC8vXG5iaXRGbGFnOjAsXG5jb21wcmVzc2lvbk1ldGhvZDpjb21wcmVzc2lvbi5TVE9SRSxcbmRhdGU6ZmlsZS5kYXRlLFxuY3JjMzI6ZmlsZS5jcmMzMixcbmNvbXByZXNzZWRMZW5ndGg6ZmlsZS5jb21wcmVzc2VkTGVuZ3RoLFxudW5jb21wcmVzc2VkTGVuZ3RoOmZpbGUudW5jb21wcmVzc2VkTGVuZ3RoLFxuZGlza051bWJlclN0YXJ0OjAsXG5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzOjAsXG5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzOmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMoZmlsZS5tb2RlKSxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50LFxuY29udGVudDpmaWxlLmNvbnRlbnR9O1xuXG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgd3JpdGVaaXAod3JpdGVyLGZpbGVzLGNvbW1lbnQ9Jycpe1xuY29uc3QgZW5jb2RlZEZpbGVzPWZpbGVzLm1hcChlbmNvZGVGaWxlKTtcbmNvbnN0IGNvbXByZXNzZWRGaWxlcz1lbmNvZGVkRmlsZXMubWFwKGNvbXByZXNzRmlsZVdpdGhTdG9yZSk7XG4vL1xuY29uc3QgZmlsZVJlY29yZHM9Y29tcHJlc3NlZEZpbGVzLm1hcChtYWtlRmlsZVJlY29yZCk7XG53cml0ZVppcFJlY29yZHMod3JpdGVyLGZpbGVSZWNvcmRzLGNvbW1lbnQpO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IndyaXRlWmlwUmVjb3JkcyI6WyJ3cml0ZVppcFJlY29yZHMiXSwid3JpdGVaaXAiOlsid3JpdGVaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0fQWEvoFAAD6BQAAHgAAAEBlbmRvL3ppcC12MS4wLjkvc3JjL3JlYWRlci5qc3siaW1wb3J0cyI6WyIuL2J1ZmZlci1yZWFkZXIuanMiLCIuL2Zvcm1hdC1yZWFkZXIuanMiXSwiZXhwb3J0cyI6WyJaaXBSZWFkZXIiLCJyZWFkWmlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEJ1ZmZlclJlYWRlcixyZWFkWmlwRm9ybWF0OyRozY9faW1wb3J0cyhbW1wiLi9idWZmZXItcmVhZGVyLmpzXCIsIFtbXCJCdWZmZXJSZWFkZXJcIiwgWyRozY9fYSA9PiAoQnVmZmVyUmVhZGVyID0gJGjNj19hKV1dXV0sW1wiLi9mb3JtYXQtcmVhZGVyLmpzXCIsIFtbXCJyZWFkWmlwXCIsIFskaM2PX2EgPT4gKHJlYWRaaXBGb3JtYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jbGFzcyAgICAgICAgWmlwUmVhZGVye1xuLypcblxuXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKGRhdGEsb3B0aW9ucz17fSl7XG5jb25zdHtuYW1lPSc8dW5rbm93bj4nfT1vcHRpb25zO1xuY29uc3QgcmVhZGVyPW5ldyBCdWZmZXJSZWFkZXIoZGF0YSk7XG50aGlzLmZpbGVzPXJlYWRaaXBGb3JtYXQocmVhZGVyKTtcbnRoaXMubmFtZT1uYW1lO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHJlYWQobmFtZSl7XG5jb25zdCBmaWxlPXRoaXMuZmlsZXMuZ2V0KG5hbWUpO1xuaWYoZmlsZT09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvciggYENhbm5vdCBmaW5kIGZpbGUgJHtuYW1lfSBpbiBaaXAgZmlsZSAke3RoaXMubmFtZX1gKTtcbiB9XG5yZXR1cm4gZmlsZS5jb250ZW50O1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHN0YXQobmFtZSl7XG5jb25zdCBmaWxlPXRoaXMuZmlsZXMuZ2V0KG5hbWUpO1xuaWYoZmlsZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbnJldHVybntcbnR5cGU6ZmlsZS50eXBlLFxubW9kZTpmaWxlLm1vZGUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50fTtcblxuIH19XG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS4gWmlwUmVhZGVyKFppcFJlYWRlcik7XG5jb25zdCAgICAgICAgcmVhZFppcD1hc3luYyhkYXRhLGxvY2F0aW9uKT0+e1xuY29uc3QgcmVhZGVyPW5ldyBaaXBSZWFkZXIoZGF0YSx7bmFtZTpsb2NhdGlvbn0pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkPWFzeW5jKHBhdGgpPT5yZWFkZXIucmVhZChwYXRoKTtcbnJldHVybntyZWFkfTtcbiB9OyRozY9fb25jZS5yZWFkWmlwKHJlYWRaaXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiWmlwUmVhZGVyIjpbIlppcFJlYWRlciJdLCJyZWFkWmlwIjpbInJlYWRaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7N6vPoYGAACGBgAAIQAAAEBlbmRvL3ppcC12MS4wLjkvc3JjL3NpZ25hdHVyZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwiQ0VOVFJBTF9GSUxFX0hFQURFUiIsIkRBVEFfREVTQ1JJUFRPUiIsIkxPQ0FMX0ZJTEVfSEVBREVSIiwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiB1KHN0cmluZyl7XG5jb25zdCBhcnJheT1uZXcgVWludDhBcnJheShzdHJpbmcubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8c3RyaW5nLmxlbmd0aDtpKz0xKXtcbmFycmF5W2ldPXN0cmluZy5jaGFyQ29kZUF0KGkpJjB4ZmY7XG4gfVxucmV0dXJuIGFycmF5O1xuIH1cblxuY29uc3QgICAgICAgIExPQ0FMX0ZJTEVfSEVBREVSPXUoJ1BLXFx4MDNcXHgwNCcpOyRozY9fb25jZS5MT0NBTF9GSUxFX0hFQURFUihMT0NBTF9GSUxFX0hFQURFUik7XG5jb25zdCAgICAgICAgQ0VOVFJBTF9GSUxFX0hFQURFUj11KCdQS1xceDAxXFx4MDInKTskaM2PX29uY2UuQ0VOVFJBTF9GSUxFX0hFQURFUihDRU5UUkFMX0ZJTEVfSEVBREVSKTtcbmNvbnN0ICAgICAgICBDRU5UUkFMX0RJUkVDVE9SWV9FTkQ9dSgnUEtcXHgwNVxceDA2Jyk7JGjNj19vbmNlLkNFTlRSQUxfRElSRUNUT1JZX0VORChDRU5UUkFMX0RJUkVDVE9SWV9FTkQpO1xuY29uc3QgICAgICAgIFpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9dSgnUEtcXHgwNlxceDA3Jyk7JGjNj19vbmNlLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IoWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUik7XG5jb25zdCAgICAgICAgWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPXUoJ1BLXFx4MDZcXHgwNicpOyRozY9fb25jZS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQoWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtcbmNvbnN0ICAgICAgICBEQVRBX0RFU0NSSVBUT1I9dSgnUEtcXHgwN1xceDA4Jyk7JGjNj19vbmNlLkRBVEFfREVTQ1JJUFRPUihEQVRBX0RFU0NSSVBUT1IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTE9DQUxfRklMRV9IRUFERVIiOlsiTE9DQUxfRklMRV9IRUFERVIiXSwiQ0VOVFJBTF9GSUxFX0hFQURFUiI6WyJDRU5UUkFMX0ZJTEVfSEVBREVSIl0sIkNFTlRSQUxfRElSRUNUT1JZX0VORCI6WyJDRU5UUkFMX0RJUkVDVE9SWV9FTkQiXSwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiI6WyJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SIl0sIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCI6WyJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQiXSwiREFUQV9ERVNDUklQVE9SIjpbIkRBVEFfREVTQ1JJUFRPUiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJ8lB/FoBgAAaAYAAB4AAABAZW5kby96aXAtdjEuMC45L3NyYy93cml0ZXIuanN7ImltcG9ydHMiOlsiLi9idWZmZXItd3JpdGVyLmpzIiwiLi9mb3JtYXQtd3JpdGVyLmpzIl0sImV4cG9ydHMiOlsiWmlwV3JpdGVyIiwid3JpdGVaaXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQnVmZmVyV3JpdGVyLHdyaXRlWmlwRm9ybWF0OyRozY9faW1wb3J0cyhbW1wiLi9idWZmZXItd3JpdGVyLmpzXCIsIFtbXCJCdWZmZXJXcml0ZXJcIiwgWyRozY9fYSA9PiAoQnVmZmVyV3JpdGVyID0gJGjNj19hKV1dXV0sW1wiLi9mb3JtYXQtd3JpdGVyLmpzXCIsIFtbXCJ3cml0ZVppcFwiLCBbJGjNj19hID0+ICh3cml0ZVppcEZvcm1hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNsYXNzICAgICAgICBaaXBXcml0ZXJ7XG4vKlxuXG5cblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3Iob3B0aW9ucz17ZGF0ZTpuZXcgRGF0ZSgpfSl7XG5jb25zdHtkYXRlfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnRoaXMuZmlsZXM9bmV3IE1hcCgpO1xudGhpcy5kYXRlPWRhdGU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuICAgICB3cml0ZShuYW1lLGNvbnRlbnQsb3B0aW9ucz17fSl7XG5jb25zdHttb2RlPTBvNjQ0LGRhdGU9dW5kZWZpbmVkLGNvbW1lbnQ9Jyd9PW9wdGlvbnM7XG5pZighY29udGVudCl7XG50aHJvdyBFcnJvciggYFppcFdyaXRlciB3cml0ZSByZXF1aXJlcyBjb250ZW50IGZvciAke25hbWV9YCk7XG4gfVxudGhpcy5maWxlcy5zZXQobmFtZSx7XG5uYW1lLFxubW9kZSxcbmRhdGUsXG5jb250ZW50LFxuY29tbWVudH0pO1xuXG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICBzbmFwc2hvdCgpe1xuY29uc3Qgd3JpdGVyPW5ldyBCdWZmZXJXcml0ZXIoKTtcbndyaXRlWmlwRm9ybWF0KHdyaXRlcixBcnJheS5mcm9tKHRoaXMuZmlsZXMudmFsdWVzKCkpKTtcbnJldHVybiB3cml0ZXIuc3ViYXJyYXkoKTtcbiB9fVxuXG5cbi8qXG5cbiAqLyRozY9fb25jZS4gWmlwV3JpdGVyKFppcFdyaXRlcik7XG5jb25zdCAgICAgICAgd3JpdGVaaXA9KCk9PntcbmNvbnN0IHdyaXRlcj1uZXcgWmlwV3JpdGVyKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3cml0ZT1hc3luYyhwYXRoLGRhdGEpPT57XG53cml0ZXIud3JpdGUocGF0aCxkYXRhKTtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc25hcHNob3Q9YXN5bmMoKT0+d3JpdGVyLnNuYXBzaG90KCk7XG5yZXR1cm57d3JpdGUsc25hcHNob3R9O1xuIH07JGjNj19vbmNlLndyaXRlWmlwKHdyaXRlWmlwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlppcFdyaXRlciI6WyJaaXBXcml0ZXIiXSwid3JpdGVaaXAiOlsid3JpdGVaaXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZlcRCcMBAADDAQAAHAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL21haW4uanN7ImltcG9ydHMiOlsiLi9yaW5nMC9tYWluLmpzIiwiLi9yaW5nMS9tYWluLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9yaW5nMC9tYWluLmpzIiwiLi9yaW5nMS9tYWluLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3JpbmcwL21haW4uanNcIiwgW11dLFtcIi4vcmluZzEvbWFpbi5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACQYc8DcwEAAHMBAAAfAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyJAZW5kby9mYXIiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADg9bkfbwIAAG8CAAAsAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jR2VuZXJhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0dlbmVyYXRlPShuZXh0KT0+e1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6YXN5bmMoKT0+aGFyZGVuKG5leHQoKSl9KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmFzeW5jR2VuZXJhdGUoYXN5bmNHZW5lcmF0ZSk7XG5oYXJkZW4oYXN5bmNHZW5lcmF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0dlbmVyYXRlIjpbImFzeW5jR2VuZXJhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/34fduYBAADmAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9tYWtlcnMuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9FLmpzIiwiLi9hc3luYy1nZW5lcmF0ZS5qcyIsIi4vbWFrZXJzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL0UuanNcIiwgW11dLFtcIi4vbWFrZXJzLmpzXCIsIFtdXSxbXCIuL2FzeW5jLWdlbmVyYXRlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADcX0E7MBwAAzAcAACQAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VNYXAiLCJtYWtlUHJvbWlzZSIsIm1ha2VTZXQiLCJtYWtlV2Vha01hcCIsIm1ha2VXZWFrU2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRozY9fb25jZS5tYWtlUHJvbWlzZShtYWtlUHJvbWlzZSk7XG5oYXJkZW4obWFrZVByb21pc2UpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZU1hcD0oZW50cmllc09ySXRlcmFibGUpPT5oYXJkZW4obmV3IE1hcChlbnRyaWVzT3JJdGVyYWJsZSkpOyRozY9fb25jZS5tYWtlTWFwKG1ha2VNYXApO1xuaGFyZGVuKG1ha2VNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRozY9fb25jZS5tYWtlV2Vha01hcChtYWtlV2Vha01hcCk7XG5oYXJkZW4obWFrZVdlYWtNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBXZWFrU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlV2Vha1NldChtYWtlV2Vha1NldCk7XG5oYXJkZW4obWFrZVdlYWtTZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2UiOlsibWFrZVByb21pc2UiXSwibWFrZU1hcCI6WyJtYWtlTWFwIl0sIm1ha2VTZXQiOlsibWFrZVNldCJdLCJtYWtlV2Vha01hcCI6WyJtYWtlV2Vha01hcCJdLCJtYWtlV2Vha1NldCI6WyJtYWtlV2Vha1NldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKNuO+SQMAAEkDAAApAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanN7ImltcG9ydHMiOlsiLi4vcmluZzAvbWFpbi5qcyJdLCJleHBvcnRzIjpbImFzeW5jRG9XaGlsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZTskaM2PX2ltcG9ydHMoW1tcIi4uL3JpbmcwL21haW4uanNcIiwgW1tcIm1ha2VQcm9taXNlXCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNEb1doaWxlPShib2R5KT0+e1xucmV0dXJuIG1ha2VQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbmNvbnN0IGxvb3A9YXN5bmMoKT0+e1xuY29uc3QgZG9Db250aW51ZT1hd2FpdCBib2R5KCk7XG5pZighZG9Db250aW51ZSl7XG4vL1xucmVzb2x2ZSh1bmRlZmluZWQpO1xucmV0dXJuO1xuIH1cblxuLy9cbi8vXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9O1xuXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9KTtcbiB9OyRozY9fb25jZS5hc3luY0RvV2hpbGUoYXN5bmNEb1doaWxlKTtcbmhhcmRlbihhc3luY0RvV2hpbGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXN5bmNEb1doaWxlIjpbImFzeW5jRG9XaGlsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAGbyZCiAEAAIgBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc3siaW1wb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9hc3luYy10b29scy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hc3luYy10b29scy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsBAh4DCgAAAAAAAAAAABWHRz9yJwEAcicBABQAAAAAAAAAAAAAAKSBAAAAAGNvbXBhcnRtZW50LW1hcC5qc29uUEsBAh4DCgAAAAAAAAAAAAULvaB/AQAAfwEAACAAAAAAAAAAAAAAAKSBpCcBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACcAAAAAAAAAAAAAAKSBYSkBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAS3H/kWQoAAFkKAAAkAAAAAAAAAAAAAACkgfAqAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2hlYXAuanNQSwECHgMKAAAAAAAAAAAA7lq3z2sCAABrAgAAJQAAAAAAAAAAAAAApIGLNQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB16UGuWAIAAFgCAAArAAAAAAAAAAAAAACkgTk4AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2lzLXBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAB5pTBl1AwAAdQMAACQAAAAAAAAAAAAAAKSB2joBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc1BLAQIeAwoAAAAAAAAAAAAfQoYp4gYAAOIGAAApAAAAAAAAAAAAAACkgZE+AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL21ha2Utb25jZS5qc1BLAQIeAwoAAAAAAAAAAADvarSSXwkAAF8JAAAtAAAAAAAAAAAAAACkgbpFAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAXM2qhwAdAAAAHQAAJgAAAAAAAAAAAAAApIFkTwEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudE1hdGguanNQSwECHgMKAAAAAAAAAAAAgUbFhdQDAADUAwAAJwAAAAAAAAAAAAAApIGobAEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAOih3RrHBQAAxwUAACcAAAAAAAAAAAAAAKSBwXABAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9kaXNwbGF5SW5mby5qc1BLAQIeAwoAAAAAAAAAAAAjjjJqPwIAAD8CAAAhAAAAAAAAAAAAAACkgc12AQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAaJTTyWoWAABqFgAAJQAAAAAAAAAAAAAApIFLeQEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2lzc3VlcktpdC5qc1BLAQIeAwoAAAAAAAAAAADkq2Pu4QUAAOEFAAA6AAAAAAAAAAAAAACkgfiPAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAEGFj3ifBQAAnwUAADoAAAAAAAAAAAAAAKSBMZYBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAlStwyWcEAABnBAAANgAAAAAAAAAAAAAApIEonAEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAEcKueNIBgAASAYAADYAAAAAAAAAAAAAAKSB46ABAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAA2P0rVfwMAAH8DAAAjAAAAAAAAAAAAAACkgX+nAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudC5qc1BLAQIeAwoAAAAAAAAAAABLLaf76x8AAOsfAAApAAAAAAAAAAAAAACkgT+rAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudExlZGdlci5qc1BLAQIeAwoAAAAAAAAAAAAdxNEKuhAAALoQAAAhAAAAAAAAAAAAAACkgXHLAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcHVyc2UuanNQSwECHgMKAAAAAAAAAAAAipljyNYFAADWBQAALQAAAAAAAAAAAAAApIFq3AEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAABIwcE7MGAAAzBgAACYAAAAAAAAAAAAAAKSBi+IBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACcAAAAAAAAAAAAAAKSBm/sBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABW0VcR6RkAAOkZAAAnAAAAAAAAAAAAAACkgSr9AQBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY2FsbGJhY2suanNQSwECHgMKAAAAAAAAAAAAMgP9Gc0FAADNBQAAJQAAAAAAAAAAAAAApIFYFwIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NvbmZpZy5qc1BLAQIeAwoAAAAAAAAAAACcqLSXSAQAAEgEAAAkAAAAAAAAAAAAAACkgWgdAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZGVidWcuanNQSwECHgMKAAAAAAAAAAAAAtXgwo4CAACOAgAAJQAAAAAAAAAAAAAApIHyIQIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2Vycm9ycy5qc1BLAQIeAwoAAAAAAAAAAAAf9quECwUAAAsFAAAkAAAAAAAAAAAAAACkgcMkAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAzC+m1R8HAAAfBwAAJwAAAAAAAAAAAAAApIEQKgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2pzLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAACZtFKvTFQAA0xUAAC8AAAAAAAAAAAAAAKSBdDECAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAALa9IV5rCAAAawgAACsAAAAAAAAAAAAAAKSBlEcCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tZXRob2QtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAAmgUfr4YdAACGHQAAKAAAAAAAAAAAAAAApIFIUAIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Nlcy11dGlscy5qc1BLAQIeAwoAAAAAAAAAAACHqlog/QIAAP0CAAAoAAAAAAAAAAAAAACkgRRuAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUNoZWNrLmpzUEsBAh4DCgAAAAAAAAAAAKKVARBOAwAATgMAACkAAAAAAAAAAAAAAKSBV3ECAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACoAAAAAAAAAAAAAAKSB7HQCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACbh0FqEgcAABIHAAAqAAAAAAAAAAAAAACkgX52AgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXBncmFkZS1hcGkuanNQSwECHgMKAAAAAAAAAAAArvhjAwcIAAAHCAAAMwAAAAAAAAAAAAAApIHYfQIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzUEsBAh4DCgAAAAAAAAAAALUW0pDdBwAA3QcAACQAAAAAAAAAAAAAAKSBMIYCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADZW6LCcRAAAHEQAAAnAAAAAAAAAAAAAACkgU+OAgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAdHozoS0rAAAtKwAAKgAAAAAAAAAAAAAApIEFnwIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3B1Ymxpc2gta2l0LmpzUEsBAh4DCgAAAAAAAAAAAKidGFwRCAAAEQgAAC4AAAAAAAAAAAAAAKSBesoCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAApxMCM+0VAADtFQAAJwAAAAAAAAAAAAAApIHX0gIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3Jlc3ViLmpzUEsBAh4DCgAAAAAAAAAAABUHXvMhEgAAIRIAACgAAAAAAAAAAAAAAKSBCekCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAAh2h7X9EHAADRBwAAKQAAAAAAAAAAAAAApIFw+wIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAR1oa2u0DAADtAwAAJAAAAAAAAAAAAAAApIGIAwMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACoAAAAAAAAAAAAAAKSBtwcDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADIQNAGlA0AAJQNAAAhAAAAAAAAAAAAAACkgUkJAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA8CKrrjUFAAA1BQAALAAAAAAAAAAAAAAApIEcFwMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAusRN7fcEAAD3BAAAMAAAAAAAAAAAAAAApIGbHAMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAADtePIKcEAAAnBAAADEAAAAAAAAAAAAAAKSB4CEDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAmCzfJc0LAADNCwAAMQAAAAAAAAAAAAAApIHLMgMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADpDjncsA0AALANAAA1AAAAAAAAAAAAAACkgec+AwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAABUfScVcwoAAHMKAAA1AAAAAAAAAAAAAACkgepMAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAAB52wuHqw4AAKsOAAAuAAAAAAAAAAAAAACkgbBXAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAAAAAAAAAAAAAKSBp2YDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADfeBBmIgIAACICAAAcAAAAAAAAAAAAAACkgTBoAwBAYWdvcmljL3RpbWUtdjAuMy4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAADGdYs5xEwAAcRMAACMAAAAAAAAAAAAAAKSBjGoDAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3RpbWVNYXRoLmpzUEsBAh4DCgAAAAAAAAAAABoG4QkLCQAACwkAACUAAAAAAAAAAAAAAKSBPn4DAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJgAAAAAAAAAAAAAApIGMhwMAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAABf/mwKAWAACgFgAAKAAAAAAAAAAAAAAApIEaiQMAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2V4by11dGlscy5qc1BLAQIeAwoAAAAAAAAAAAC49RYwqAgAAKgIAAAkAAAAAAAAAAAAAACkgQCgAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAADBFy6awWAACsFgAAMAAAAAAAAAAAAAAApIHqqAMAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzUEsBAh4DCgAAAAAAAAAAAJmiqMSSEwAAkhMAACgAAAAAAAAAAAAAAKSB5L8DAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NsZWFuUHJvcG9zYWwuanNQSwECHgMKAAAAAAAAAAAAsrkuZnsJAAB7CQAANwAAAAAAAAAAAAAApIG80wMAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9hbGxvY2F0aW9uTWF0aC5qc1BLAQIeAwoAAAAAAAAAAAC+f87F5gQAAOYEAAA5AAAAAAAAAAAAAACkgYzdAwBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L2V2YWxDb250cmFjdENvZGUuanNQSwECHgMKAAAAAAAAAAAAbAmG8BYNAAAWDQAALQAAAAAAAAAAAAAApIHJ4gMAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9leGl0LmpzUEsBAh4DCgAAAAAAAAAAAASKblpyAQAAcgEAADcAAAAAAAAAAAAAAKSBKvADAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvaW50ZXJuYWwtdHlwZXMuanNQSwECHgMKAAAAAAAAAAAASAKBWasKAACrCgAAPAAAAAAAAAAAAAAApIHx8QMAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9vZmZlckhhbmRsZXJTdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAAIullZr6BQAA+gUAADQAAAAAAAAAAAAAAKSB9vwDAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJTYWZldHkuanNQSwECHgMKAAAAAAAAAAAAKz52JhEMAAARDAAAMwAAAAAAAAAAAAAApIFCAwQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9yZWFsbG9jYXRlLmpzUEsBAh4DCgAAAAAAAAAAAKz4G/qxCQAAsQkAADsAAAAAAAAAAAAAAKSBpA8EAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvcmlnaHRzQ29uc2VydmF0aW9uLmpzUEsBAh4DCgAAAAAAAAAAAMS+fFNuBQAAbgUAADMAAAAAAAAAAAAAAKSBrhkEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAIwpyyTAEAAEwBAAA2AAAAAAAAAAAAAACkgW0fBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3R5cGVzLWFtYmllbnQuanNQSwECHgMKAAAAAAAAAAAA+R4vph8JAAAfCQAAMAAAAAAAAAAAAAAApIENIQQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC92YXRSb290LmpzUEsBAh4DCgAAAAAAAAAAAEvDnnpBEgAAQRIAADAAAAAAAAAAAAAAAKSBeioEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvemNmTWludC5qc1BLAQIeAwoAAAAAAAAAAABceuZbmzAAAJswAAAwAAAAAAAAAAAAAACkgQk9BABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3pjZlNlYXQuanNQSwECHgMKAAAAAAAAAAAAQIONv343AAB+NwAAMgAAAAAAAAAAAAAApIHybQQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC96Y2ZaeWdvdGUuanNQSwECHgMKAAAAAAAAAAAAF+2coTkHAAA5BwAAOQAAAAAAAAAAAAAApIHApQQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzUEsBAh4DCgAAAAAAAAAAABRWH+bhAgAA4QIAACgAAAAAAAAAAAAAAKSBUK0EAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2hhbmRsZVdhcm5pbmcuanNQSwECHgMKAAAAAAAAAAAA0yc1o/gOAAD4DgAAMAAAAAAAAAAAAAAApIF3sAQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaW5zdGFuY2VSZWNvcmRTdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAAJty+dFtBAAAbQQAACkAAAAAAAAAAAAAAKSBvb8EAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2ludGVybmFsLXR5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAImXtjnXAwAA1wMAACcAAAAAAAAAAAAAAKSBccQEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2lzc3VlclJlY29yZC5qc1BLAQIeAwoAAAAAAAAAAAAydfQsnxEAAJ8RAAAoAAAAAAAAAAAAAACkgY3IBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pc3N1ZXJTdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAADODslVRBgAAUQYAACUAAAAAAAAAAAAAAKSBctoEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL21ha2VIYW5kbGUuanNQSwECHgMKAAAAAAAAAAAAi3sP2XpDAAB6QwAAJQAAAAAAAAAAAAAApIEG4QQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAADbdTr/iAEAAIgBAAAeAAAAAAAAAAAAAACkgcMkBQBAYWdvcmljL3pvbmUtdjAuMi4yL2R1cmFibGUuanNQSwECHgMKAAAAAAAAAAAA97rZ1goRAAAKEQAAIgAAAAAAAAAAAAAApIGHJgUAQGFnb3JpYy96b25lLXYwLjIuMi9zcmMvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAACB6R2zYQIAAGECAAAbAAAAAAAAAAAAAACkgdE3BQBAZW5kby9iYXNlNjQtdjEuMC45L2F0b2IuanNQSwECHgMKAAAAAAAAAAAAJlRd5gEDAAABAwAAGwAAAAAAAAAAAAAApIFrOgUAQGVuZG8vYmFzZTY0LXYxLjAuOS9idG9hLmpzUEsBAh4DCgAAAAAAAAAAAHP6J4+rAQAAqwEAAB0AAAAAAAAAAAAAAKSBpT0FAEBlbmRvL2Jhc2U2NC12MS4wLjkvZGVjb2RlLmpzUEsBAh4DCgAAAAAAAAAAAPf3R0KrAQAAqwEAAB0AAAAAAAAAAAAAAKSBiz8FAEBlbmRvL2Jhc2U2NC12MS4wLjkvZW5jb2RlLmpzUEsBAh4DCgAAAAAAAAAAAGrmdmeWAgAAlgIAABwAAAAAAAAAAAAAAKSBcUEFAEBlbmRvL2Jhc2U2NC12MS4wLjkvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAXXMWJxEDAAARAwAAIQAAAAAAAAAAAAAApIFBRAUAQGVuZG8vYmFzZTY0LXYxLjAuOS9zcmMvY29tbW9uLmpzUEsBAh4DCgAAAAAAAAAAAOBOTL53BwAAdwcAACEAAAAAAAAAAAAAAKSBkUcFAEBlbmRvL2Jhc2U2NC12MS4wLjkvc3JjL2RlY29kZS5qc1BLAQIeAwoAAAAAAAAAAABHC8qpIAYAACAGAAAhAAAAAAAAAAAAAACkgUdPBQBAZW5kby9iYXNlNjQtdjEuMC45L3NyYy9lbmNvZGUuanNQSwECHgMKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAAAAAAAAAAAApIGmVQUAQGVuZG8vY29tbW9uLXYxLjIuOC9hcHBseS1sYWJlbGluZy1lcnJvci5qc1BLAQIeAwoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAAAAAAAAAAACkgbZaBQBAZW5kby9jb21tb24tdjEuMi44L2Zyb20tdW5pcXVlLWVudHJpZXMuanNQSwECHgMKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAAAAAAAAAAAApIFaXwUAQGVuZG8vY29tbW9uLXYxLjIuOC9pZGVudC1jaGVja2VyLmpzUEsBAh4DCgAAAAAAAAAAAGFY/oZ4AgAAeAIAACYAAAAAAAAAAAAAAKSB02EFAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzUEsBAh4DCgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAAAAAAAAAAAAAKSBj2QFAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1hcnJheS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAABWiwnjOQIAADkCAAAkAAAAAAAAAAAAAACkgTRoBQBAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAAAAAAAAAAAApIGvagUAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAADufX47hAwAA4QMAACYAAAAAAAAAAAAAAKSB8G0FAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1ldGEtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAAAAAAAAAAAAAKSBFXIFAEBlbmRvL2NvbW1vbi12MS4yLjgvdGhyb3ctbGFiZWxlZC5qc1BLAQIeAwoAAAAAAAAAAABZ+7ACbwIAAG8CAAAxAAAAAAAAAAAAAACkgTh2BQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL2ltcG9ydC1hcmNoaXZlLmpzUEsBAh4DCgAAAAAAAAAAAJibqCm2JwAAticAADYAAAAAAAAAAAAAAKSB9ngFAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2NvbXBhcnRtZW50LW1hcC5qc1BLAQIeAwoAAAAAAAAAAADGuu2vAQMAAAEDAAAwAAAAAAAAAAAAAACkgQChBQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9leHRlbnNpb24uanNQSwECHgMKAAAAAAAAAAAAJkDyRM8kAADPJAAAOgAAAAAAAAAAAAAApIFPpAUAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvaW1wb3J0LWFyY2hpdmUtbGl0ZS5qc1BLAQIeAwoAAAAAAAAAAAAtzg/BBQUAAAUFAAA9AAAAAAAAAAAAAACkgXbJBQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzUEsBAh4DCgAAAAAAAAAAAPndhplYCAAAWAgAADUAAAAAAAAAAAAAAKSB1s4FAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1hcmNoaXZlLmpzUEsBAh4DCgAAAAAAAAAAAP4lB+zcOAAA3DgAADIAAAAAAAAAAAAAAKSBgdcFAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1ob29rLmpzUEsBAh4DCgAAAAAAAAAAAEhJcrj+AgAA/gIAACsAAAAAAAAAAAAAAKSBrRAGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2pzb24uanNQSwECHgMKAAAAAAAAAAAAZhRgzkEeAABBHgAAKwAAAAAAAAAAAAAApIH0EwYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvbGluay5qc1BLAQIeAwoAAAAAAAAAAAADP028WRMAAFkTAAAxAAAAAAAAAAAAAACkgX4yBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9tYXAtcGFyc2VyLmpzUEsBAh4DCgAAAAAAAAAAACpLzuR1CgAAdQoAADwAAAAAAAAAAAAAAKSBJkYGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL25vZGUtbW9kdWxlLXNwZWNpZmllci5qc1BLAQIeAwoAAAAAAAAAAABPTL0h4AQAAOAEAAAyAAAAAAAAAAAAAACkgfVQBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wYXJzZS1ieXRlcy5qc1BLAQIeAwoAAAAAAAAAAADdEsKIyBAAAMgQAABGAAAAAAAAAAAAAACkgSVWBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzUEsBAh4DCgAAAAAAAAAAAPdvzz7cBAAA3AQAADEAAAAAAAAAAAAAAKSBUWcGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLWpzb24uanNQSwECHgMKAAAAAAAAAAAAtcxvGCsHAAArBwAANAAAAAAAAAAAAAAApIF8bAYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtcHJlLWNqcy5qc1BLAQIeAwoAAAAAAAAAAADpWxIY7gQAAO4EAAA0AAAAAAAAAAAAAACkgflzBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wYXJzZS1wcmUtbWpzLmpzUEsBAh4DCgAAAAAAAAAAALk8ETSSBAAAkgQAADEAAAAAAAAAAAAAAKSBOXkGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLXRleHQuanNQSwECHgMKAAAAAAAAAAAAm8DSNy4WAAAuFgAANAAAAAAAAAAAAAAApIEafgYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcG9saWN5LWZvcm1hdC5qc1BLAQIeAwoAAAAAAAAAAABN8FzwGSUAABklAAAtAAAAAAAAAAAAAACkgZqUBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wb2xpY3kuanNQSwECHgMKAAAAAAAAAAAATcxCbg0IAAANCAAALQAAAAAAAAAAAAAApIH+uQYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcG93ZXJzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAADUAAAAAAAAAAAAAAKSBVsIGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3R5cGVzLWV4dGVybmFsLmpzUEsBAh4DCgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAAAAAAAAAAAAAKSB88MGAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACSt0d+7A0AAOwNAAArAAAAAAAAAAAAAACkgcbFBgBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvc3JjL2Vudi1vcHRpb25zLmpzUEsBAh4DCgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAAAAAAAAAAAAAKSB+9MGAEBlbmRvL2Vycm9ycy12MS4yLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAfl1VK6UQAAClEAAAIwAAAAAAAAAAAAAApIEU3AYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL0UuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKQAAAAAAAAAAAAAApIH67AYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAAAAAAAAAAAApIGL7gYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL2xvY2FsLmpzUEsBAh4DCgAAAAAAAAAAAAGOcEzpDAAA6QwAADUAAAAAAAAAAAAAAKSBevsGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzUEsBAh4DCgAAAAAAAAAAABlsu0UzAwAAMwMAACkAAAAAAAAAAAAAAKSBtggHAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9uby1zaGltLmpzUEsBAh4DCgAAAAAAAAAAAIaopsdfCQAAXwkAAC0AAAAAAAAAAAAAAKSBMAwHAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy90cmFjay10dXJucy5qc1BLAQIeAwoAAAAAAAAAAAA/8Oc6VgIAAFYCAAAjAAAAAAAAAAAAAACkgdoVBwBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC91dGlscy5qc1BLAQIeAwoAAAAAAAAAAACxWDaYUgIAAFICAAAZAAAAAAAAAAAAAACkgXEYBwBAZW5kby9leG8tdjEuNS43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAD6B373XFAAA1xQAACIAAAAAAAAAAAAAAKSB+hoHAEBlbmRvL2V4by12MS41Ljcvc3JjL2V4by1tYWtlcnMuanNQSwECHgMKAAAAAAAAAAAAzu5bBuYvAADmLwAAIQAAAAAAAAAAAAAApIERMAcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAEaTPG42AgAANgIAACUAAAAAAAAAAAAAAKSBNmAHAEBlbmRvL2V4by12MS41Ljcvc3JjL2dldC1pbnRlcmZhY2UuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAHQAAAAAAAAAAAAAApIGvYgcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAC0qYOFYCAABWAgAAHQAAAAAAAAAAAAAApIE0ZAcAQGVuZG8vZmFyLXYxLjEuOS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAafAZnzMKAAAzCgAANQAAAAAAAAAAAAAApIHFZgcAQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIvc3JjL2NvbXBhcnRtZW50LXdyYXBwZXIuanNQSwECHgMKAAAAAAAAAAAAHMaQXiMMAAAjDAAAJwAAAAAAAAAAAAAApIFLcQcAQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAAAAAAAAAAAAAKSBs30HAEBlbmRvL21hcnNoYWwtdjEuNi4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAANdsW6VZQwAAWUMAACoAAAAAAAAAAAAAAKSBYoUHAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAAAAAAAAAAACkgQPJBwBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzUEsBAh4DCgAAAAAAAAAAAA9KG6suIgAALiIAAC0AAAAAAAAAAAAAAKSBnusHAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc1BLAQIeAwoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAAAAAAAAAAACkgRcOCABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1qdXN0aW4uanNQSwECHgMKAAAAAAAAAAAARBKm51wGAABcBgAALQAAAAAAAAAAAAAApIFvMQgAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAACnDUk4qJwAAKicAACMAAAAAAAAAAAAAAKSBFjgIAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAALvjTYmcJwAAnCcAACUAAAAAAAAAAAAAAKSBgV8IAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAAAAAAAAAAAApIFghwgAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAAAAAAAAAAAAAKSB6YgIAEBlbmRvL25hdC12NS4wLjEzL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAAAAAAAAAAACkgX6OCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAAAAAAAAAAACkgfuYCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAADLPSrUpCAAAKQgAACkAAAAAAAAAAAAAAKSBlZ8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAHAi5XpWCgAAVgoAAC4AAAAAAAAAAAAAAKSBBagIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAAAAAAAAAAAApIGnsggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAAAAAAAAAAAAAKSBHcUIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAAAAAAAAAAAApIH1yggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAAAAAAAAAAAAAKSBe9wIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAAAAAAAAAAAAAKSBQuEIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAAAAAAAAAAACkgaT2CABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAUoR7eqYXAACmFwAAKAAAAAAAAAAAAAAApIGcGwkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAAAAAAAAAAACkgYgzCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJiXXyyyBwAAsgcAACUAAAAAAAAAAAAAAKSBV0AJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAAAAAAAAAAAApIFMSAkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAABg1WOeFAcAABQHAAAlAAAAAAAAAAAAAACkgYtSCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAAAAAAAAAAAAAKSB4lkJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAAAAAAAAAAAAAKSBJ2MJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAAAAAAAAAAACkgbNkCQBAZW5kby9wYXR0ZXJucy12MS40LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAAAAAAAAAAAApIGmcwkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NoZWNrS2V5LmpzUEsBAh4DCgAAAAAAAAAAAIQ/iwcTFQAAExUAAC0AAAAAAAAAAAAAAKSBJ6YJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1BLAQIeAwoAAAAAAAAAAABMm2YWxw0AAMcNAAApAAAAAAAAAAAAAACkgYW7CQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc1BLAQIeAwoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAAAAAAAAAAACkgZPJCQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weVNldC5qc1BLAQIeAwoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAAAAAAAAAAACkgajVCQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAAAAAAAAAAAApIHf6AkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAfWCLM4scAACLHAAANQAAAAAAAAAAAAAApIGE/wkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAAAAAAAAAAAApIFiHAoAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzUEsBAh4DCgAAAAAAAAAAAB04DJTIrQAAyK0AADUAAAAAAAAAAAAAAKSBozUKAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACIAAAAAAAAAAAAAAKSBvuMKAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA0gGixEIGAABCBgAAIQAAAAAAAAAAAAAApIFI5QoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAAAAAAAAAAAAAKSByesKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAD6ZvCRnAcAAJwHAAApAAAAAAAAAAAAAACkgWbuCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAACcbcSyfAUAAHwFAAA0AAAAAAAAAAAAAACkgUn2CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACUAAAAAAAAAAAAAAKSBF/wKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA3Gj3QpARAACQEQAAHAAAAAAAAAAAAAAApIGk/QoAQGVuZG8vc3RyZWFtLXYxLjIuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAqEOyRkQEAAJEBAAAgAAAAAAAAAAAAAACkgW4PCwBAZW5kby90cmFtcG9saW5lLXYxLjAuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADyaLmgIAcAACAHAAApAAAAAAAAAAAAAACkgT0RCwBAZW5kby90cmFtcG9saW5lLXYxLjAuMy9zcmMvdHJhbXBvbGluZS5qc1BLAQIeAwoAAAAAAAAAAADXAE+zjAIAAIwCAAAZAAAAAAAAAAAAAACkgaQYCwBAZW5kby96aXAtdjEuMC45L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGSqkgNCEgAAQhIAACUAAAAAAAAAAAAAAKSBZxsLAEBlbmRvL3ppcC12MS4wLjkvc3JjL2J1ZmZlci1yZWFkZXIuanNQSwECHgMKAAAAAAAAAAAAORKVkEIOAABCDgAAJQAAAAAAAAAAAAAApIHsLQsAQGVuZG8vemlwLXYxLjAuOS9zcmMvYnVmZmVyLXdyaXRlci5qc1BLAQIeAwoAAAAAAAAAAACwsuVsmAEAAJgBAAAjAAAAAAAAAAAAAACkgXE8CwBAZW5kby96aXAtdjEuMC45L3NyYy9jb21wcmVzc2lvbi5qc1BLAQIeAwoAAAAAAAAAAAB3uLF1rAMAAKwDAAAdAAAAAAAAAAAAAACkgUo+CwBAZW5kby96aXAtdjEuMC45L3NyYy9jcmMzMi5qc1BLAQIeAwoAAAAAAAAAAAAaLaJ32SUAANklAAAlAAAAAAAAAAAAAACkgTFCCwBAZW5kby96aXAtdjEuMC45L3NyYy9mb3JtYXQtcmVhZGVyLmpzUEsBAh4DCgAAAAAAAAAAAJPKTdmFFAAAhRQAACUAAAAAAAAAAAAAAKSBTWgLAEBlbmRvL3ppcC12MS4wLjkvc3JjL2Zvcm1hdC13cml0ZXIuanNQSwECHgMKAAAAAAAAAAAA0fQWEvoFAAD6BQAAHgAAAAAAAAAAAAAApIEVfQsAQGVuZG8vemlwLXYxLjAuOS9zcmMvcmVhZGVyLmpzUEsBAh4DCgAAAAAAAAAAAOzerz6GBgAAhgYAACEAAAAAAAAAAAAAAKSBS4MLAEBlbmRvL3ppcC12MS4wLjkvc3JjL3NpZ25hdHVyZS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAAAAAAAAAAACkgRCKCwBAZW5kby96aXAtdjEuMC45L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAACfJQfxaAYAAGgGAAAeAAAAAAAAAAAAAACkgZWLCwBAZW5kby96aXAtdjEuMC45L3NyYy93cml0ZXIuanNQSwECHgMKAAAAAAAAAAAAZlcRCcMBAADDAQAAHAAAAAAAAAAAAAAApIE5kgsAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACQYc8DcwEAAHMBAAAfAAAAAAAAAAAAAACkgTaUCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzUEsBAh4DCgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAAAAAAAAAAAAAKSB5pULAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAP9+H3bmAQAA5gEAACIAAAAAAAAAAAAAAKSBn5gLAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanNQSwECHgMKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAAAAAAAAAAAApIHFmgsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAIo2475JAwAASQMAACkAAAAAAAAAAAAAAKSB06ILAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAAAAAAAAAAAAAKSBY6YLAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanNQSwUGAAAAANAA0ADTRgAAK6gLAAAA","endoZipBase64Sha512":"647061820cee79ca1dd35bdad1010a3fb9fab291c7bb3a10e334cefc3a78b4db802c79724d50e0ded0952d332935c3eb3e99f76149e72407aa7457d37027e84c"};
1
+ export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAABPUYovfigBAH4oAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0RmFjZXQvdmF0Um9vdC5qcyIKICB9LAogICJjb21wYXJ0bWVudHMiOiB7CiAgICAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2Jhc2Utem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaGVhcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNlNGYzMDAwMDA4MzBiMGQ0MGE0NWQxZDQ1MTNkZjgxZTE0YjM1MzFlNGIwYjFjMzM1NjdhZDRkNmMxYzIyNTQ0NGI2MjdlYmIyMzg0OWUyMGI4MDczOWQ2MjkwYmE0ZmE1ZTdmODY4MzQ3NGM3ODBkMWRjM2JhNTQwNzA1NjA0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9oZWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9oZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTNmZjA2YzI2NWIzODZlN2EwZDkwZTE3ZGY0MGQ3OTk1NGIxYTExODdlOWQ2NDhlMTg4ODQ3YmFiYzc2ZGEzNWViZGM5MzYxNDFmZWFlM2UxOGUzYWUzMGM3OGJkOTJmN2U4MjI2ZmJjYTE0YWY4ZDNkNzg0ZTliYjYxZGI5NmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDFiY2JkZGE0NzNmN2ZkNDI1ZTQ3YzMzMTgwOTU2ZGYxM2JjY2M0YzVlOGY4ZTg5OWZkNGI5ZjVlMjg4N2E3MWU4OGU3MWRjMDNlMDlkZjE4OTBkYmVjNDgyOTg1ZDI1YWIyYTk5YTI4ZjlhOTlmNDZkMzg1OGNkMjdkYmIzMzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDFkMmE4NWY5YjI4OTA3NzdhODEwY2NlYTc0MmNmMzU4ODZlZTA0NzQ3ZjAyY2Y0ZDYzNjc1NDM1NzI0Y2FkYTAwZDE4ZmFhNTY3MTU2YjZjMzFlOWFjZGY0MDc3ZTc5NTA2MGYyMjcxM2Q1YzdkMDA0YmRmYWVjMTk4MTAzM2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNWU4NzU3YzcxNTA2OTZkY2Y5NDUzYmNmZTZiNDIzODA5NDE0NDQwMzg0Njk3NjM1NTIzODQwMTY1YWQ2NmFiNjkwNjNhYWJkNzZkMjZjZTM3NzIwZjQxYWYxOTdhZjYxNzc4MmFiMjIzM2ZiMWZkMjFjMzQ4Y2UzZTZmNWNjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2Utb25jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1vbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTgzOWRiZjE4NDYxZWJlZTNjYzcxNDY2MzJhNzQ5N2U2MDRjMjBiOWI3NThmYTBhNmY3OTY2YjZjMjU1Yzg4ZjQyNWNiMmYyMzYyMjYzNmQ5ZDlhNjBhMTNhNWZlZmE3NzI5M2RiYjc2ODg0YWY1ZDA5ODAzYTc1N2ZkYjhmMTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2F0Y2gtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2F0Y2gtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1ZWQ3N2M3NGU3M2IzOGYyZDgwZGI2MzAyMmZiODRjNDU1ZDcyOWEyNWIyN2U2Y2Y4ODVjMTM0MDg5M2FlOWMxYjVhZTdlNTZiM2I2YWFmZjQyMDM5OTEwMDE4MTM1ZTJkMjk2MjlmMWJkYTZiNGU3YjBiNDM0ZTgxOGUzZmFjIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2VydHAtdjAuMTYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9lcnRwIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzAyNzUxMTMwNzdhNTNiM2M2NWE4NmJlNzk0NzIxNWNmZWQ5YTBmNjUyMTY2OTVkODVkNTkxN2I2NTRkYmQyYTNhNTAwODA0YmY4YmY5YmNiYTM5NzIzZDhlNmQ3MDRkYzYwN2IzOTVlNGNjNTI4ZjY4NzczMDU0NjUxNGVmNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA1OTNkOTg3ZTBhMGUzZTNlODRlZjAwN2I2MzJlMjkwMzNiMmExMWM4MDU0M2Q1Yjg4M2Q2NjNjMDRiY2Y1MDdiNGUxZDFhZjEyMTY3YTU3ODkzZGVjMzgxNzU0OGY0YzRmMGRiYjczMjBiMWM0MGY4N2ExMzVmNDA1NzNjY2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmNlNmQ4YjM4NDUxM2E1MDUyZDI1YzRkYmI1YjIxZTBkNTc0MmZhYzhhOTQ4OTY4ODY2Zjc3YmI5MjE3Y2EzNzJmOWRiMTMyMjVlOTEyOTAyMGFmZGQ3YmU2OTMxYTNhZWQxNGMyNGE4MTE0YzI1NWNkNzc4YmQ0YWE5NTA5OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmJmNDAwZWNkZmE5YTBhYWI5OWVhZDgzZjRiMmJjMWJlNmJlMGE1ODI4MDc2ZGZmZGVkNWMxZjdhMDkwZDk4MmZjYjI5NWQ0MzU4ZTIzZWNmMDIyYWM0MDMxNDljYTdiMTgyMWZkMDRjNTY3NGMzNDNlMTc3ODI3OGQyNDdmMWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMTAxZjczMDA1YTA1M2Y2Njk4NGE3MDIwNDI2MzVmY2NlMjYxNmI4NmZkM2MxMTAxZGUxMWU5ZTcwNGE1OGEyMjU1NDdjYzFjZDUwNjk3NGMyYzM3MGQ0NmFlYTA1ZjJlMDg5ZTU1MDYzYjI2ZTRlMjhmZjg0OGFiNTEwMWQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDBlZDBmZjdmMTBiYTU0N2E2MTQxMTI0ZGQyOWZhNzAxM2NkZmQ4ODQ2NTJkOGQzNWM0ZGY4OTQ5OTc2YjM2OWMzMmJjOWQwZmJmODc3NWRmM2E1YTU2ZTBhYzU2NWIyOTQ5ODVkOWU5ZGJiMmE4ODA1YzU0NTVlMGU5ZTQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2NkNDAxZDUyZjc0YWQ1NTQ2YzY5YmVmNzE3OTU3N2ZmYzc4NGE5NzBhNzA0MmE2ZWQ1YmEwMDczNmUzMjgxNWExYzA0OTIzZDE2ZTI0ZWQ0NzgzYzExYzg2ZWYxMzE1NTA5MzdhZDdiNTExNDg5NDkwMDFmMDYzMmEwYjI0OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNlMGMyODc0MmEyNTE1OTBkNzE0ZWUzMjBiYzc4Y2FmMjI1NzVhNGZjMmI3MGQ3NjU3YWNmMDM2OTViOTUxZDJjNWEyYmE1YWZhNWQ4NjgyNGVmZmQ2ZTU1MzA3ZGJlN2NjZDlkOTQzZGY4MDA3Y2Q5ZDYxZDI1OTNlM2RhMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmYwMGUxYjdhODk3M2NlM2EzM2MzNTA1YTc5NTlmMjg1OTZhYjRiZmM1ODAyOTk5OWRhZDRjYzZiOWRhYmQyMjg4YmY2NzRjOWY5NTEwNTYwZWRmNzVkNjY2NjcyOTQzZWU0YjMyNDI4MWVjYzc2ZDNjZTcwMmU4YjQ4ZmY4M2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM2ZjY3NDVlNzJkMzg0YjJmOTUyMjlmMmZmOTliMWFjM2UxNWQ1ODg1NzA1MTU0MTRlNjc5YzA0YTRkYmNlMDNiZWVhOGJkOWQ2NjhhNzA3MTlhYWRjZmI4ZTJjY2RiMGM5OGZkNjM1ZGU2NzRkMmVmNDc2ZGJlOTYyOTZhZWExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NmRiZTI2YjJkZjdlMjNlOTQ2NDA3MGU2Y2ZhNjYxODBlYzRmZDhjNmFjMjlkMGM2ZWJhZGRlMGIwMWEwNjE4Nzc2NDAzYjAyNzJiYWVhNzJkNDNjN2NiMTVlNTkyYjMxOGI0Njc2MTkxYjk3YThmYmVlOTEwZGYxMjc4YjU0YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNDIyMDQwNzhmYjY4NDEzMTQwYzhmZjQ5ZTAyODAxMWQyMTBiMDhkNmFlZDc4NDZlYmVjOGU2ODlkYTE1YTdmZGFmM2FjMzk0ZDY2NDcwOWE4YjRlMTAyZjA5NDNmNDAyMWJlZWFiMDZlZjgwZmY0MDNhYjZkOGI2MDQ0YjQ0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTU0NjZkNDg1ZGVmMTNlNjEzNDU5YzcxYmI5MGFiODZjMGFjNTJjN2NmYTkyMGI3ZTRjMDBiOTk0YjEzNzc1ZjNiZTA3MjA0YzgxM2Q4ZWQyYmNmYzFlMjEyNzgyMDY1YmFkZDE1ODk4NmYxYTI4ZDE0ODEzZmExMDFhZmI4MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlkYmViY2JiN2VkOTkxZjk4YWE4NDgyMjA3NTlmMjU0MTI1YTY4OGEwMzgxZmRmNDYwM2FhOTQ5NzQ0ZThmYmNmZTNmNTk0Y2YzNjU5NGM5Yjg3MGFlYzRlMzkzYWU1MjUyNzNkYTY3OTZlNzkzNWUxYjdmMWZmYTdhOWMyNTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWxsYmFjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FsbGJhY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2QwOGNjNjIzOGFmODczNmE3OGEzYTI2YzQ2OWIyYmYzMGZlNDE4ODA0YzU3ZTg5MGNlNmYzZWJkNDIzMWRmMjQ3ZGM4YjAwNWU3ZGRkMjM3ZWFhOGNiNWM1ODkxZDA5NWU3ODI0OWQzZjZjM2NlNWNiYmJhMTQzZjViYjM0ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25maWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbmZpZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk1YmI4NjhjMjQ1ZTUzN2RjNTIxZmI2Mjc4MGYwNGE5NjkzMmFkNWRjOGNjYTNmNDIyMTkzM2MyZmM2YmFlZmUzOWY2NTM0ZTc5NTFlODU4MzVmNTY2NTcxM2I5MzZmZDM2ZTA0YjFmNmU4ZTA4MjJkZDM1ZGE2YWU2YmU3MGZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlYnVnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWJ1Zy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyMmJhZTVjMzZkODM5MzFiM2RmN2RmZmQ5Y2NiMGEzM2IxZjIxYTk0NWFhOGI1ZWM3YzdmZGIyMjg4MTNkMGY4ODU4MmYyZTI5ZmFhOTY1NzEwMTk4MDE4ZDVlOWFmYTljMjkzMWUzYjIyYzcxNDE2YWQ0MTY4MzIwOTdhN2IwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjMzZDk1ZmY5M2JlN2FjNGJiN2RlZjFkNzNlMTA5YWY1OTE5ZjRkMmFlYjVhZjA4ZmIwNGQ0MGQ2Yzg3N2RlODBhMjdkNWJiMWE3MjJjZDcxMjk2ZTQ3ZDI2OWJjYWFiODA1NGJlZWNkZmFmMWZjNzBmNTRmMTVlYWFkODVlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGE0NWViN2Q3Mjk3NWFlZmNmYWU4M2FhMDQ5Y2E5ZWE0MjdmZjdlYzA1MzlhZTQxOGQ3YWIwZTEzMjM3ZTJiNTgwOTBkMzVkY2I3OTVkYjZhNTQ1ZjBiODhhY2Q3ZGNmZmI5YWYyNTM3ZTFjZWRlZDVkZjY3ZGY3MDQ1N2FiYTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanMtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2pzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWM5OTAzMjM0ZDM4YjRkYzQ4M2NmZTRmYWI4MDUzMDJmZTI1NDhlMmZmOGM0ZGQ4OGY2NzI1NzJmZWRiNWQwY2M1NTg5N2YyYzMwMjYxZTY3YjJiZDg5MzQxYzEzYzE4YWQ1YTQxMjlmMDEwNWYxNTEzY2FkZDcxYzczMmIxOTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg3MzFmMWMzMDM2NjAyYWQ5MGQ1OTliMzVhNjA2ZmZiMTI4NjY4YjBmY2YyMDAzYzUzYThiNDgwNDE0YWRkNTFmNGU3YzE2MTFiNjhkM2M4M2Y1MTk1MTE5ZGY1YjQ2ZDVmMjlmNDQxMmI3Y2Q3YjY1ZjFmYzU1MmUwZDBhYzgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OWY5MDI4NDhlZTc0M2JjNmM2OWQxMDA1MmY5NGRmM2IzYTE3NGJlMzVjNDUxMmJiNzI4ZDQ2NjkxMzRjYjIwZWNiMTE5N2I0MWNhNmRhYTVmZjNmNDQ2NjQzMGVlM2IzNzBjNDRhYzIzZjQzYmJmZWJlM2QyYzkwNzczOGI1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXRob2QtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ldGhvZC10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwNDQ1NjlkYzc0YTYyZTQyMGRjOGUzOTE3YjVmYWYxZjdhYTBkZWRlYTA2MTczNDkzNTJiYmFhN2U5ZTA1ZGZhOTBmNmZlZDAwNTg5NjZiMTIxMTIxZWRhODM1YzQxNDA1YWMxNjMwNmRiZmIwNjI5MjUwMzIxOTQwOWFmMDAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Nlcy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2VzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQyZjY4NzI3M2VjNTkxNjU3OTA2MjA1NmM2NWEzODZmMGM5OWNkY2E3YTU5Y2EyMTA4MmE3MDM1YTY0MzAwY2NmYzAzYTEyMzM2MjJiNWExYTMxZjM3MThjMGE4ZTVhZDYwNGJjNjFhZTgyNTE3YzcyOTc0NmE0YTJjYmJjMTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUNoZWNrLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlQ2hlY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MWU1MjA1MGZkODlmZTc4MTVlZmVjNjI4ZWFhZWIyMDBiN2Y3Y2RkYTg0ZWU3Y2RiYzZmMjAzYzAzZWRlZjA2MTcxYmYyZWM2N2MyMDgxMmY4MzIxYTRlMjU5Y2Q5N2VkODUzNzdjZjU2NDVlNzMxMTQxYzljMjNmN2VlYjU3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODZmZjdjZDZiNmRkYWZmNTc5YTVhNjFmODIzMWM4NDVmZTM5NDA5YjJkODRmZmY0NzFmYmI3YzZmYzIxOWVhYzg4ZWEyZTY1YmRkODI4OWRkMWQ4YWQ4OWE4Nzc3OWI5MmFjYmJlNjc2NTkxMmI3ZWM3ZjI2OWM2YjMwMjdhNmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3VwZ3JhZGUtYXBpLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTBlYzJjNGQwZTU2OWUzM2ZmODdjM2YzNTQ1N2JjZDQ2NzY2OGJjZGQ5ZDJiM2Q3NTA5NWI4N2I5YWViM2IxMzFjOWQ5ZDgzOGM4OWU4MzQ3MzU2YzA3M2UwY2RhZTkzMDQwNDRhYzk1NjQ3OTZkYzk0NzI2NGUxNzZkNGI0YjQiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL25vdGlmaWVyIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3VwZ3JhZGUtYXBpLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjliOWM1NDZmYzFiMzJkZDdlMTNjZjM4OGIxNWYwYWJkODk4OTU5ZWJlMTc4YTc3MWRjNzkyNWVlMWQzYWZmMDdiZDg2ZGFkYzAwMjUwNmQ5N2JiMmI5OTA1ZDIxYzNhNjQ5NjNkOGRkZDRjOTM4OGVhNDgzNmU4OWU4OTZiOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDAxMTAwYWQxZWMwY2MxNTQ1NWNmZmJhYTYwNDAzMDNiMWMzMWZjZDgxODRiOTQ0ZmI5YzdjYWU4NjIxNmMyMDA5ODBjYmY2ZTY4NmI0YjlkY2I0NTM0YmQ4MDQyMDViNzJlZDk3Zjc5ZmE2MTA1YTdmODA5YzZmZGZiNmVlNjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGUwYzY5ODIxNjljMTkyODk0MGFmNjY5NjFkZjlkNzdkZmExN2M4ZTkyNThjN2M3ZGIxYzViMjk3ZTU3MTM0YjhiNTQ3ZTM0M2RiZTZkNTU1YjYwN2YxYzg3M2JkZTJiZmVmMjUwNzI1NTM4Mzc0NmE5NmY4YWU2YTVmNzIzNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHVibGlzaC1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1Ymxpc2gta2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTQyYmMwNDYxNGQ3ZWI5MjMxOTkxODIwYmRkYWQ5ODYxYzRkYTRlZmNhZTg3NGZmMGUxNTY2MGYwN2Y1YTc1ZTE1NDFjMjcxOWM0MTRiMDI0N2I0ZDBiZTJhNTllNDY4N2FlYzI0MWYzNzc4MTNlZTlkNWU1OGNiODBkNWI0MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZWQtbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWM4YTA3ZDc1OTdhNzU1ZjEzMjNiMTdhMzU3ZTJmZWM4ZjRmZGNkMTc3NTNlYjdiNWQyNDc0ODhkNDgxNzcwYmQ3OTU4ODdjZDc3OWMxZGIxN2UyODcwOGNlYWRlOGU3MjQ4N2IzMDVjYTYzZmE4NWNmNDc2ZGYwNDlmYzdjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXN1Yi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzdWIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MWU1ZmE4MWY1OWFmMmIzY2QxM2NhZDZjNTdmMjZjNjIxNTE1OGQ3MDQzODQ3NTQzZjIwMmUwZDZjM2NmNGJmNzJkZDNkZWNjYzNiMzMzYzliZGMzNWY0YWE5ODM5NGFhOWZkODU4MGJjOTdkOTQwYzI2YmE0NjdlYTJmZmRlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0Y2I4YmU2ZmNiOGEwMzMxYmYyOWQyYTk5NGQ4MmJjZjc1ZGYwODRjZDkyZGY3MzYwY2VkNGQ4NzUzYWRlMjg2YzYxMzZhN2ZkMjQzZThmMDVlZDZkYzlhZmIxMGZjYTc5YmM5OWU1MjEyZDA5ODZhZWRiNDE2YWJlMTg4OWYyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTY2MzFlNTc3NGU3NTQ1OWY1NjE4MGI0MjkxMzFmMzIwZjYxYmI3ODU0NDIzNzdhYTc4MGQ0Nzg1MGRkNWI3NDcwYTk0ODBmMDM5NjI5NDQyMTcwNzMyNWI5OTM1YjEzNTFjNjc3MmRlMzFmOTRjYWYwOWU0OGIxYzJmNTEwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90b3BpYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdG9waWMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4YTVhNDZkNzQ1YmMxZjVjMTAxNmFmNjI5NTRjODM0OTBkMTU2ZjVkZmY3MTU5NzU1ZjNjMjU5N2Y4YmFjYzVjMjJhNTBmN2JjY2NlYmVlODYyYmQ4N2Q0NDg0YzBiNjA2NzUzNDQ3NDI5MjczNDU2OTQ4MzE5NDYxMThmMWJiYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc3RvcmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhOGExZWIzYzViNzEzZmE5MGQ5NjUxYjQ2NzczYTQ0MDFjZDUxOTM2MWViZDBkYTQ2ZTIwMTFmYWEwNzQyOGEyNGZiZWIyOTY0YWM4MzJiNDJkODJjZDJkOTRkZWViODIxZjU3NWNhMTNmYTFhZWQ1Y2QzZjBkMDE1NzM2Y2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODg0ODczMmEyNDhiZjNkODI0MWQxOWVhYjk0MDY2ZmQyOTExMGM1Y2IzN2JiZjhhNWMxNWI2ZTQ0YzdjZDkxMDI1ZjEzYzhiYzJkZThhNTY2MWY4ZjI5ZjM0YjIxN2M2ZjJiYTViM2MxNDllNmRhYjhhNDFjZmFkOTZhNGE4ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYjBkMzNjMWQ1ZDFjY2U3ODI2YjM3OTZmZmZjZmIwZjhlOTljNTM4MDMzYTgzYzNiNDg3N2UwOGJkOTc5NmMyYTRjMWZmZmFkYzMyOGNhMDRlZGUxMTY0ZDQ2Y2IyNWQ5YmM3MDg0OGVhZDc1YTI5ODJmYzViMzQ4NmViNTU0MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4Yjg2YjFjMmFjNWRiNjFmNTYwYmMxNWZmMDVmY2M1MzU1Yjk5OWRmMTI4ZDFjODM0MzgzOTM1YmJmNjgzNzhlZWJhM2QxN2FlMmQzOGY1NjIwMTQxMzc4MTc4NTgxZTc4YzhiMTRiMGRjYjM3ZDAzYmVmNzExODRhZTM0YWIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTYzMTIwY2MxNzZlMjBhNDNjZjljZDk4NTlmZjJkMjRiYWU3ZGQ5MjFjMWUwZTgyZGEwZGE4ZTI1YTk5ODYxNjYwNDBiMGJmMmY2MDVmYmExMzZlOGY3NzJjNTJlMDM5YWY4MmU1OGEyMjgyYzFjZjZmN2YzNzNkYzM1MjZhOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwY2ZlYjAxZThmMjlhMWVjZWFhMjQxM2Q0NzZkZTMwOTUxMzg5YjQ5N2IzNDJmZDY0YzYyYzVlOWY3NjBlMjkxZmI2NmQ5N2VhM2MyYWVhZTI5YTc2ZDQwNDQxNTFhZDg1NDE1OTgzODI3ZjFlMTg5ZTViNDZiNTg2NTNhODg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzE4ODY1ZGVlNGI5ZjFlMTA1NGFjZDZkMWU0ZWZmNmRjMDBjNzdkMWQwZTUxZmViN2YwMzNkZmQ0MzNhNDA2NmMwNDY5MTY1MDFiZGIxMmU0NWIxMGNiMDQyMzUyZGJhZTlkMGVhN2U1NWY5YjJhY2ZiZmYyNTBiNTMzZjIxYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY1ODlhNjgxYzI2MzYxZjFhNTM2YjMzM2FmNjQ1NDg3MDk3MDNhMmM4MDdhMjU2NjI3YTg4Yzk1NGEzMzRmMDM4N2JjMzRiMjFhMTNmNjRiNGVmMGM1MGYwMjdlMGM3ZDczOTMzMzdjMDU3YzAwNzlmZjNhZjY1MTFmMTFjZjBkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3RpbWUtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3RpbWUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzZjYjJkMjIxMGYyMmYzYTk0MWUzZmNiMzlmY2M5Y2ZmY2NhMWFhOTA4NGQyNTlhMzc1Yzg1NTBhZDE3Y2M0NmFhOWIwZjk0OWExMDAwMDEyMjZmODBiNWZjZTlkZTUxMjFmYjI0MjcxNTMzY2Y4OGE1NjBjZDUwMDQ4YjIxMjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGltZU1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RpbWVNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjQyMGIwNzE1MzhjOWUzNTA0NWE3ODMyNThkODE0ODdiZDQyYjBlMjQwYTAwN2RmZTY1YTQ4NTE2NmVkMGU2NDZiNDNiM2EwMWVjMTVmOGExMzU0YmE2ZmViNTY3ZjZjMzVlOWZjYzkzZjZjM2NmOTU2NmUzMDE4MDI3YzY0ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4OTg1YjZiNTgwMjQ3MjhhZDliYmEyNDhiYjA3YWJkMmZmNTM2NGJiN2UyODQ5YjM0ZDlhNmFkYmMwMDViZTA5NjNiNWQ3ZGIwZjIyZmJjMTMxM2I1MmIxN2I0MTQ3MTE4ZjBhNWZlOGE0OWMyZWZmNzg5YWI5NmYzMWFhNmEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXQtZGF0YSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVmZTBlNWVmZjlkZDIwMjAzNjk1NDE4OTM5MDliMjVlMDVmMDI1YjUyYzI1N2RiODk2Y2Q5MGIzYTQ5OTM1ZWE2M2Y2ZDY1MjlhNTEyMWYxYzc3YjhjMDBlZGIwYTE5MDJiMDViN2U5OGE5NjUxYzdjZmZmMDA1ZjllMjU3MzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDZlNWRkYzgyNDQyMTljNjlhZTU3ZTllMTIxZTI0NmUyZDA1ZGMzNjg4ZDhkZDNkYjllYjJiZGU2ZmFjMDNjNzQxOTQ4ZTFiZDUzMGJmMTRjYzYzOTYxYjc4Y2M0YzI1MDlkMmFlZGZmZDc3MGE5MDc1ODg4NjM2ODEyMzUxNTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjQ4ZDFkNzkyODI3NGYxZDZiZjlkOTMwYzgyNDJhYmYzYmQ2MDZiMDYxM2Y1MjFkN2RmODM2MGU5MWU2MGFjNWZmMjcyZTA0MDM5ZWI0ZGYxY2FmODZmNmI5NzNjODYyZWQ0NjljZjI4MDhiYjMwZTBmODkzZDdlMTEyZTVmYzkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9lLXYwLjI2LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2xlYW5Qcm9wb3NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2xlYW5Qcm9wb3NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE2Yjc1YTlhMzdjNWUxMDQ4MWQwNjkyNjBhNTY3NTczZTZmYTA1MmZiOWZhZjMzYzhkYmE1ODgwZTc3OTk1ODJhMjE5MjNlZWFmMWMwZjM4M2U1ZjcxNWY0OTQ2MDZkNDNlOTU5YTJmZGFjY2VjYWM0MTc1YWY5MDMxOWZlNzQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvYWxsb2NhdGlvbk1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvYWxsb2NhdGlvbk1hdGguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMzFkNmRlZGEzMWMzNzI4NDAxZjE1ZjQ3ZGNlN2VmNjY1NWYzZjVlOTYwZDJjMjIzNDdiYWE4MjRiYzM3MTBiMzEwYjQ2ZjA4MmQyMmExNzlkZWM4MTdmYWYwNjVjMTE2YTc5NTc1ODVmOWQ1ZDE2YzQ4M2ZjNDQyNjJlOGRkMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L2V2YWxDb250cmFjdENvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvZXZhbENvbnRyYWN0Q29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVjOTAxZjI4NzNmM2I4YTdkZmIxN2M0OWMwNmUzYzc2NjFjYmExMDZkZjhjMTdmMjExNTIzNTk5OWVlMTNmYzIxMTQyOTE4YWJkNTgwYmM4NTlmNGY4NTczNDE5ODFlZTc1ODViNmQ2ODhhZmRiNmFmYWE2YzFiMmM1ZTQzYjEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvZXhpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9leGl0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjRmZjYzMWI1MTlmMTdiNTBlNzU5NTg4MTFlOTVkZWE0YjQzOGY5OWViN2ZjZWIwYTRiNTlkYjgyZDViNWU4NjgzMWE2NDhjNWJmZGZkOGIyYzUxNWY0MDkwMTY5MTVmYzE1NzY5NGEwNDBiZDU3YzRhYzcwNDAyZTM3NjEyYjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9pbnRlcm5hbC10eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9pbnRlcm5hbC10eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIyNzA3YzQwMDgzYmM4YWRmMDgzNTExMDAwNDk3MzEzNGJlOWNiODBjNGQ2MWJiZmY5NzgwMjk0MTA1ZjFjY2E1ZjVlNzhmZGI3NTgyNjAyNDM1NGFmYmU0ZjlhMmIwNjVkZmY0YjBiYjQzY2NjMWVlY2VhYTcyMGNlNjQyZDNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJIYW5kbGVyU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9vZmZlckhhbmRsZXJTdG9yYWdlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzYyYTE1ZTk0ZjI3ZDg2MWZkMjc0MjhiYzhjZmRkMmZjNmZkYTRjODE3YjExYWQ0MGZlNTVmMjVlZDQwNDc1Y2EzNjNjNWQwMDM2YjEwYzIwYmQ5M2EwNTBiYzMxMDEwNTI2MGQ4NWMxZjhkMmNmZDU1MzdkZGQwMzUzM2VjNjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM3YzkwMDVhZmI0OTVlYWM3NWFhNjFmNjViOGUzZmM1Yjk1NTExZTExMTIyNmRkZGJhMDdjZDQ5YjM0MmVhY2E0M2FmNjRmNmRmYzJhN2YwOTFkOGJkMDkwZmMzNjMwMWU0ODZhYWFhMTg1NzkwZjY0YTExNzQ2OTUyNWMzNzE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvcmVhbGxvY2F0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC9yZWFsbG9jYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTAyMWE3ZDcwZmNkMWQ4ZWVmZDVlMGZmZDM3YzEyM2Q2ZGJjNjVjMjkwODFiZTYyN2NlY2U2NjAyZWIxNjUxN2YwMDNmMjQ4MzE3MzhhMWM1M2ExOGY5OGIyN2M1ZjAyMzJjNWQzMDUwNTBiYjMzMjFjNTUyNDI4ZjExZjhhMzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC9yaWdodHNDb25zZXJ2YXRpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvcmlnaHRzQ29uc2VydmF0aW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmI0ODMwOTIyMDZiNGZkOGQ2NjBhOGEwMmVjYWM4ZjE2ZGQwZDU4N2Q4M2QzMmViMWI0MWE3YTk4OTllNzVkNzI3OTc2YjExOTk0NTk3MjIzZjc0NGMyNTVjYWUwOGYzMDg5ZTFkNzhiMzJlYjI0NDk1MTFjMmE0NTVkZWQxYjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxM2I5N2E4OGQ3MDE2ZDI0ZjQxOTY2ZThiZDU1NGVkZjZlZDVhMDgzMzM2MDNmYjE0ZDRiZGQ2NGJhNmJlNmM3MWExNWMxYmRjNTJiZGI0MzcwMjVhNTNhMWNjNGJhMTBmZTcyYjJlZmRjNWE3ZTgwZjAwNzE1YmNjNzk3ODg0ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L3R5cGVzLWFtYmllbnQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvdHlwZXMtYW1iaWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBkMzdhMWViODhmYWEzNTJjOTE4N2UzZDgzYzE0N2UxOTQxNjFkMzMyNDAyMzNmOTI2MWE1YjVhMDAxY2MyMzU5MzljYTk3YWY1NGYyNzc4ODkzMjhiZjFiMTRkNjI5Yjk4ZmNlY2UzMmNlNjU4NDZkNzQyMTQ2Zjg0NDY0N2Y1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvdmF0Um9vdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RGYWNldC92YXRSb290LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjgzY2ExZTAxOTU4MDRhNmI2MTIwNjk0NmYwOTM3MGQxODUwNzNiMDc3YzY2ZDliNWIyNTQ0MmY1ZWJlODI5YTc1NWFmZGY2OTBhYTdkODg5OTJlNTUxMTBlNDk2N2RhMjc2ZTFmN2RjZmNmMGJmMWQzMmJiZDhjZmFlYjU2ZWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RGYWNldC96Y2ZNaW50LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L3pjZk1pbnQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmYWU0NWUwNjFmMDFjZDNjNjRjNzUyNzc1ZGVjNjlhZDU4NjBjMmQ5YzYzYzg0YzBhNzVlNTJmZGNmMjk1NjdmMTliZDc0ZjZkYTAzZTYwZGRlZDYwYTY2Y2RiNTBiZjk2MGI5MTYxNjJmZmMwMjc4Mzc5NjdjZWY1NmM5ZGFkMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdEZhY2V0L3pjZlNlYXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0RmFjZXQvemNmU2VhdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZjNjRlMjE2NjhkNzdjZTYyY2NlYzc4ODJiOWY0NTUwNWEwOWMyY2NjMGM1MDk1NDJhYzJjOTQ4MmM1MjRlZWViNzg3ZmUzMWFjMmZjY2VlZTg0N2FkNmU0MzdmZjJhNmZiMGY0ZjM5NzIxZDk3YTU0MDU0MzY5ZGEwMGIxOGViIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0RmFjZXQvemNmWnlnb3RlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdEZhY2V0L3pjZlp5Z290ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU0YmRjMGQzM2QwNGRmZWYyNWJlYzIzZTliYzJjNGVmZGJhM2RhODFjMzNhYWJhODNmNjRjZGZmMjJkMDU2ZmU3YjI0MmI3MTM5NThjNGU1ZWQ5Mjg0ZDA3NWJjOGYwNzIyMThlNTFhMDRhYjBkMDI3MWViZjUyZDkzNTgwYjNjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9hdG9taWNUcmFuc2Zlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzI2MDQyMTgzZWVhZDU4MTQ3YmVlZGQ5OWRhMmQ3MDI3YmZiNGIzYjk2ZDdjOGFkOTExM2NhMThlMzQ5ZGViZDA2ZDM5MmE3ZTUxYTk4M2U0MTQ4MjRhMWZjOGFmZDRhZmJjMWU4OWM5ZmE4MzVmNmNiOWU0NjA5YTNkZmM0MzEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaGFuZGxlV2FybmluZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaGFuZGxlV2FybmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQyMzNjN2RmMjVlOTg0Yjk5YzA1YzRlYjg4NmJiNGQ0NjBkZmIxMzliMjY3N2FmMDQwNzFiZmVlZmQxMGEwZjNkMzkxOWU5MGU5MTM3MTc5NGE4MTFiOGNkZGE2ZTJlYWRlZTcyYzgyZTZiZmNjMjkyNDc1YjQwODk3ZDgwN2U3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luc3RhbmNlUmVjb3JkU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5zdGFuY2VSZWNvcmRTdG9yYWdlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTBhNmEwOGUxNmVkNTZmNmYxOWZlMWY5NzE0NDhhYTNiYWNlNmQ0OWI2MjNiNGEwMDE3YTNmZDRlMzhhOTkzYjNmYjYyZDMxYjVhZDVjMmJiMDRjNWE0ZDE0OTBmZjQ2ZTJiZTA0MjhhY2Y3MmQzMzExYjFmNDc5ZWI2NDJiNTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW50ZXJuYWwtdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzk3OGZkMGE5OTBjYzI3ZjFkNzU4YWVhNDRlZDE2ZDJkMTg2MGYzYWFmNTAwOGE5NDVmYmRkY2E5OTJkNGMyMDI1MGI5ZjBjY2ZlOTNjZGZiZWM1ZDFlMWE1MmY4YzhiYWZmNTEwN2Y2M2IzZjg1MDc2MTI0ZGFmZDk4YTAyY2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyUmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ODcwNjA5Yzc5OTMyMjllOTE5YWZiZWZhYTNmODFmZWQ3YWE0ZTg5YTE1NTg5NDBlMDJjY2ZhODY4NmY4ZGNkOGYwMjU5ODgwOGQxYWIxMTU4YWU4OGFjM2RjMDVlMGRiY2NlYzYwZjVhYTg4MTJlMDYyMjRiYjVlYmE5NDFmMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJTdG9yYWdlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJTdG9yYWdlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2E1ZjRkYWM4NTJmZjYyM2ZkY2VmM2ZkN2Y0MTA5YWUyZWRlYTVhY2FkNGM1ZjRjOWYxMWZjNThiMGUxMjIyZDNiN2Y1NjBhZjgzNGU3MmU1NGU0NWU1MmY4MWZjNjA3Yjk1ZDVhZGNkMzRkMDRkZmI3NmE4MTg2NWRkYzBmMjMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZUhhbmRsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZUhhbmRsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzZDk1MjRhNTNiNzcyNzgyZGY1ZDQyZGU3ZjVjZTU5MDM5OTk0YWRjZDIwOWM4ZWE0ZDRkOWZkZWM4MmZlMjA2ZmVmMjEwZGQ0MTM1MDE0YzIyZGJmYjRjN2MxNjliNWMyYWYyMzFhMzA1YmQ4NzhmYjdjMzY1ZDJlMDhhN2NiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiYTkzYWE3MTVmMTQ4ZTlkNTNiODRkODFiODZkMmM1OTRlZTdhOTdjYjVlODg2N2M2MDM4M2NiMTJiNzU3YzViNGE2NjQ5ZTQzMzdhMDE0NGE5Y2M2MzQzZDQ0YjY0NGFlNmNkYjExOWQ4MWIxNjk0ZDk2YWU5MDgyODVmZmE1NCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b25lLXYwLjIuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJkdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzRkZjI2NDY0YjBlZDFiZmQxZWMzMDIzNTIzYTMxODNiNzliYzllMDM3NjAyZDZjMTkyMjZkYjc5ZjJkODljYzI5MGIxNGE1ZjViNzU3NDNmZjlhOGVhMTYyNDU0MDY5N2M3MDg1NWRiNzA4ZmE3YWI4NDk0MWJkZDM1M2VmYzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZHVyYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZhYjFhNjhmYTU5MmFlNThlMmU2ZjQ4OGU4OGMwMTFhNTJlYzIwZTBiMWE5YzhhNDdlNzA3YzM3MjAyZjQ1OTFmNDFiNzkyYWM3NDlkYWRjMzY5NDg3MTU1NGI4ZTRlZWExZjVlMmI1OTk1YmViZjRiNGY2NTkwYThlN2ViYmIzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9iYXNlNjQtdjEuMC45IjogewogICAgICAibmFtZSI6ICJAZW5kby9iYXNlNjQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vYmFzZTY0LXYxLjAuOSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9iYXNlNjQtdjEuMC45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vYXRvYi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJhdG9iLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2M2M2UwYzE1OWZlOGJiZmRmY2I1NWU4Y2I2OTJlMzY5YmZmODU4YTY5OTU0MjdlNzBjZjdjZDI1OGFiNjFmZjQzMzBjZDdkNjlmZTJhODY3ODgyZTgwNTM0MzVjM2MzZjIwMjM4NTA0NDU4MjE5Y2FjNzU4OTU2MGE4YTQ5YWEiCiAgICAgICAgfSwKICAgICAgICAiLi9idG9hLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImJ0b2EuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOWZjNjkyNzEzYTE1MTE0NTBkYjY1MWEyM2JhYzBiMzE3YmUxMTdiNjJmNzUyNmM3Yjc0NzI0N2VkZDVlZjliZmI0YWYyM2I0MzBlNmUyYzJkMTJkYTUzZTFhZjk2YTUwYTMxOGZmY2NmNzFkMDYwMTk0ODNlMDQ4OTc2ZDEzMCIKICAgICAgICB9LAogICAgICAgICIuL2RlY29kZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJkZWNvZGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NzRiOGY2NWQyYTA2MTU0NDgwNGJiMTc5ODhmMTE2NWJhYzFkYTc5YTFlYWNmMjQ4NzYwMjQ1YjBjMDhjNmQ1OTgwNjAzZGQ5ZjM5ODY3NTg0YWYyODNiNzA5ZGU2NTU2M2ZmMjNlZjA0MjBhMTQ3ZGJhNjc3NmEzODVlYjVlYiIKICAgICAgICB9LAogICAgICAgICIuL2VuY29kZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJlbmNvZGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4YjZlNDViY2RkNDE0MTViYTVmZmM2MmMyOTY2NTg3MzY3YjUyNWYwYWZlOTJkNDhhYTQ2ZDJjMjUxNWQ1ZWQyMjBhNzRhNzhkODBiMWI5NzA5NGY2MmNlMTE0OTg0YTUwMzJjZTAwNzU1M2QxMTI5ZTU5ZjIzZGUxODE0ZjlmYiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWQ0ZmY3ZjNiMzA4MTE3YWI1OTk2NDI0ZDM5MWYzZTc5ZTRlMWY2NWUzMDU2MDM2YjMzNjM0ZTlmNzFmZWVlZTRhOWNjOGU5ZDU3NGM0Y2RkMjA5MmNhOTk2YzZiOWYyNzE2ZjNhNTQyY2M1ZDYzODg3N2UzNTQ1OGNlZTU5ZDMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tbW9uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21tb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOGIyMGE2ZDExYTU4YWY0ODJkNzA1NjU5ODA2ZTUyM2YzMTkxYTkwZTIzMjRiNmZiN2E3MjIxYTM5ZWVhNGYyY2QzODAwNDQzN2FiMDQ5Mzk5MWRjOGE2ODM3YzE5MjFjMGFhY2ZiZDhhYWFmNDAyZjE4N2MxZTdkZjk2MzVjOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWNvZGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlY29kZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI5MDRlNzUwOTUzMmJjNmM1MTgwYTU2NTY5ZjY5ZTMwYTg4YjE4ZmFjODJkNzdkMmIxNTM4NTQxN2JkMzBiMWYwMTA4MTVhN2E1MjNhMzRhNDUzZDQyMTUwMzNlZWRjMmQ5OWI2NDc0YTdjMzJhZGZkNDQ2NWRmZjNkYmE5MTJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWRkMWIyZjQ1MzFjNDc2NmFkMGM2MTk4OTAxMTU3MDFmYTA0Yzg4NzQzODZiOWRjM2I1ZWY4NWJmZDNhM2EyMjVjYzMzY2JlM2U3YzNhY2UzMjg0NWRjNDQ2NzBlZGFiMDc4OTViMzYyNGRhY2EzNDQyYjA4ZTIzNTA4OWM5NmUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJhcHBseS1sYWJlbGluZy1lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJiYTQ3YTg5ZGJkZWFlNGQwZmNiN2M5NDRiMjNhZTE4OWQ1NTBiYjM2ZDZhZjQ2ZDAzN2EwNDRmOTc4MDJhYmVlYmY5NDM4ZGNjOTExNGE0ZjZkMTI2OThiMDJkZGEyOGM4Y2M0MTczZDA2YTg2ZjE2YzE3NDkxNzdkYjg3NTRhIgogICAgICAgIH0sCiAgICAgICAgIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJmcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGE0MGZkMGM3YjI5ZDJmNDYxNzE1MWU1MDNmNzIwZmQ1NTRiNjQxZjE4MmMxYjNjZDVkYTRmNGUxNzEzZWY1MjEyYjU3NjU4Y2U4Y2Y1MzZlYTA4NGI2NGRhMTk4OWE5ZGZkYTU1YjI0MzhiMmI2YTMwNTJhZWMxYzMzOGViZmQiCiAgICAgICAgfSwKICAgICAgICAiLi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImlkZW50LWNoZWNrZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxMDA2YTNlNDIxMmQ4MTczNzliNGYxNzAyMDc5Y2FkMjg0MzVkNDkwZDhjNWFiM2JkYTA2MGMxNTdkMThjYWMwMWMxZTMxNDVmOTQ3Y2M0YzI0MzYzMDlkMDg5NTkwMTE5ZjliZDVhNWQ0MjExNzIwMGJjODk3NGQ4YjBmMmQzNyIKICAgICAgICB9LAogICAgICAgICIuL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJsaXN0LWRpZmZlcmVuY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2MTM2MzFmYzRmYWY4YmFhNjc0YmI0ODI4OGU2YTQ2YjdkYWFlMmZkZTc4N2M1ZjFhMDUxZjk2ZDExZmQ4OWFiZDI1Y2Q2ZTg5MDA1NTAxMjFmNTZmZTFmNTEwZDMyZmM5ZTQ0NzM4YzhmZjc4MWNiYTY3YmJkMWFjZTY1MWIwOCIKICAgICAgICB9LAogICAgICAgICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibWFrZS1hcnJheS1pdGVyYXRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4OThjNjI2MTZiNGNkYjNmYzgxZTk3MTI5MDhhMzdkZGI1N2JlZjZiMWQ1ODIzZTA0Y2YyODFjYTk1ZTg2MDYwNTEwMjNlNTQ1ZGQ2YmRkYzI5NmZlZGViZTRlNjY1OTRlOTk4Njk5ODA1ZTIwOWVlN2RhNDFhOTFhZjgxN2M4IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjQzNmVjNGM2NjZjMmE1NTY3NDVjNWZhNTRlYzg2NDhhM2VjZDBmMzEyMDEwOTZhMTUxMGNhMTQzMzQ5OTg5NjZhNjQ2YzFkMDYzYjYxMDE5Y2NmNjQ1NTFiM2NiNWYxMjkwZTA2YTU5MTRkOGExZDVmMDNlYzZiMTcxYTMxZGYiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZjQzN2I1ZjNlMzNiNzczZGU2Y2JlZDEwZTUwYTllMGI5NDhjNzNhNmFlMTY0NjY0MDE0OWNjOGYwZjgxNjk1ODVhYWYyNTdkMTAyNjZmYzI2YmU1ZTFkYzM5NGY1YTM1MWVjNmE2YWY4NWQzYjk5MjI4ODE5OWRiOGQxNjZlOCIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJvYmplY3QtbWV0YS1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYWYwNDUxYjJlNmQwZWU0MTMwNTg5MWVmNmNmNWE5ZWM0YTAzNDVmMTg0OGZlOWIyZDljNTEyMzI0MzY2OWM1NGFjNTFjNTM4ODI0YzMwMTkwZDIwN2U0OGY1MGMwODQ1NjNmOTM4ZGE1ZTY0MWZiNzliYzQ2NTBlZDBlY2YxNyIKICAgICAgICB9LAogICAgICAgICIuL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidGhyb3ctbGFiZWxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdiNWQzNDI2YTE0YzBmNzU2MjUwNGZiNzg2YTliMDI0MGRlNGNiODUyNzk0YTM4YjA2MDMzMDBhOTkwZTUxMDM5ZDUzNWU1M2FlNjdlYzcxMDVjOWEzMjUzZDQ5NmFhZmM3MzIwNTRiNmFjMjU1MTc2M2M5MGQ3NTNmNTlmNmJhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wIjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXIiLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3RyYW1wb2xpbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vdHJhbXBvbGluZS12MS4wLjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3ppcCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby96aXAtdjEuMC45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2ltcG9ydC1hcmNoaXZlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGMyMTI0ZmMwMDVkZjc5NWU4OTYxZmQ3YjBiNGNkZDA0YWFhMWMxMDRjNDQ5NDE4MGU2M2JjYzQ5NDk5MWNlM2U2ZmRlMzAxYmZkMjc5MDU2N2IxZjA4NzEwODM4ODA4MzhmNWRjZWUzZThiNGVkMWJjODVlMDNjZDNmZWViNWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tcGFydG1lbnQtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb21wYXJ0bWVudC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMDlmNGQ1YmM5YmIwZmMzY2MwZGU1MjcyZGY1NzMyNDNiYzI3MTk2MWU1OWNlNzhmODJkOGUwN2Y1NjJhNzkxMDUxMTJlM2MzODU5YTUzMDYwMDlmYTE2NzgwZjg0NzBiZjMzNmMwNWY2OTRhMjRiNzcxOTI0MjA2NzA5NWQzNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHRlbnNpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4dGVuc2lvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJmNjM2YzkwZThiY2UwYzE4ZjdkODIyZTk2ODUwNjVkOTRkMDlkZjJmZmVmY2RlYTQ4Y2U1YjQzYzJhOTdjYzNkNzQxYWRmNzUyNTZiZmNmZTMwMThmZDIyNzEyZWJjZDI4OGM2Y2EyNjZmNmNmYzlkYWIyNDRjOGM3NWI3MzJkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwZDEyOWI4ZDIyMTgwOGYxYTJiOTYxYzVkYzY4NjAxYTVjZjM3MTgxOTRkZDUxOTU0YzZiODUzOThiYjQwODBjOGRhOWY5NjRkMTQwNmQ3MzkzYWRhZGEyMjliYjM0NjBmNGEyZDdkODdhNzhlZWZlZjYyNjNjNTc3ZTI1N2Y3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDIzNGU3MjZkNmQxMGNjNThhZmVkMWYzM2NjZTMxNmIzNWY3N2VkNzZlODQ3YjM0MTA2NDU1YTQ5NzFjZmI4YjE2ZDAwZDczOTI3MGU0NjYwZjFkNWE5MDhkOGNmNmExMTZjOWMzMmNiMjkzOGQ4ZWQyODQyMzU3MTA0ZmIzZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1hcmNoaXZlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGNmMGU2Y2ExNmU2OTM3YzY2ZDRjOGY4YjUzNmYwOTRkMWUxNGEzZmQyZDYxMTMzZjBkZDgyNmEyYmJiZTgwMDcxNDUwZDdkNmVmZDM3Nzc4NTZlZjFkM2VlNzg1OTgxZjllOWFkM2NkYTIyOTNjYTNmY2NmOGYxYzliMmNlMWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW1wb3J0LWhvb2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ltcG9ydC1ob29rLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODgwYjU3ODhiNmU2N2MzZGY5OWQ1ZGIyYTAwMTBlMmVlNjU5ZTlmZDc0OWMwOGIwOGVkN2Y3YjU2M2M5ZjAzZWYzNGFhZGJkOWI5ZDQxODU0NDNjYmRmOTMzZjFiODI3ODkxOTllNDk5YWY0NmZiOTU0YzQ5NzM5YThjYTNlZTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjlkYmJkMWM4MWMzNWJjNDc3YmJmOWRkMzM0YzY4ZTNhOTEwMzllNmQ5MzE3MjU2YzcwYzc4ODc1Yzk3Mzg5NTAyOWZmMmRmYzRmODFlOGM3ZTBiZTI0NzhmNjRjNTEzZjdmYzQ0ZjI5OGI1MDQwYmU3ZjZmZDc4NTRkY2JlYzNhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpbmsuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpbmsuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3ZGJkZDVhMWEzZjhhMjg3MzUxZjE1NDVmYTQ5NmFiNmQ2NThkZGViN2MxNWNkMWI2Njg2YTQyOTk0MGQyNDFlNDI5NWZmYzkwMDg2OTVlNGQ2NWFhNWM4ZDAxMjk0NWQyYjBhMmU0OGE2MDYwMDgyODI0MTllZDBkMjE5ZjIzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXAtcGFyc2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXAtcGFyc2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTM0MTJjNzUwNmVlMGMyN2RiOTkzOWZjZDkxODUyNThiOGE4YzUyYjRjYjY1NTkwZmJhYTVkYmE4ZjgyMDY4YWEwOGMzODFjYmY0NGQ2NDcxNWVjNzgzMjFjZGQ4YTIxMTNkYjc3ZGMzOWQwMWY1ZmNmMzNhNTFhOGE5MjdhMDEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNmM3MmMwNjcyMmQxN2Y0NDBjNWRlNGIwNTZiYzcxOTQzMTgzYTJkYmQxYzk1MzlhYmE4ODhhMmQxNmUyNDk5YWZlYzAwZDZjNTM5Y2RjMDE4OGU3NGJhODNmNDliY2ZiOGZiOWYxNWRiNzFkMDVkNjg3NzQ0NmMxMTFiMjc0NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1ieXRlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtYnl0ZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ZDQxM2RlMzU1YmNmYmM0MWMwMzNmNGM4NGU0MWM1NTA3NzJlYmJiMGU5ODVmOWVjMTY4NzMzYTU4MGYyMjFlNDRmZTAwOTA1ZjZkNjU5OTU3NTMzNGEzZjkzMTQxNDExYWU4N2MxNWYyY2VjMDIwNzMzZDA3NjllYTlkZjZkOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTI3NDgzNmRhYmYyOWZkMjg5OGMyZjUwNTk4ODQ0ODQ1YTQyZjExZjE1ZWEwOTM3MDhmZjYwMzAzZjFlOGU4N2UwNGQzZjViZTM0OWI2ZmZhMDBlMzM3OWJmYmQzMWVhNmNjMTZhNGYwYzU4ZDc5MjE1NmQwODg0ZWIyZTExOTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtanNvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtanNvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5Yjg0MDgzMmJjNjMxNjg2ZTgyZDU3ZDVjN2YzOGUwMGI2YTU2ZmU1Yzc0OTQwYjU0NzYxYTBjYjE3NzFhZWIxMGY3Mjg5Njg0MjdmMjY3Y2I1ZTQyZWRkOGQ5ODM3ODYzZmZhZmE3NmUzNTE2MWFlNWQxYWFhMjQzODgxYjM3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhcnNlLXByZS1janMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhcnNlLXByZS1janMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZmQzY2M5YWM5Njc3ZGQ2MTQwOGRkMjdmMTAyMTFlZTljODQ4NTlmZDQwOGJhMTkzZGIyZWUxMjk3ZDllYzc2MjlmM2RiODMxNjU1ZTRmYWVjY2IwNWVjNDI3Nzc2NjI4YWUxMmE1ZWY3MjEyZTM4NGY5MTY1ZjdhZDlmMGIyOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXJzZS1wcmUtbWpzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXJzZS1wcmUtbWpzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGVlMmYwODQzYTBmZjkwNDE5MjQwODIzYzZjNmM0NmQyZjQ5YjE1MGJmYWM4Y2VlYWJjOGJkYTU3YjNlZDg4YzllYzQxMGEwZGM2OWM3Zjk2MDhmYmVlZDU2OTgyZGJjMmQ3NmY3NzBjMDk4MzU0ZDhlMjljNmRhYWZjMGQzNjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFyc2UtdGV4dC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFyc2UtdGV4dC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmMTY1MzM4MzNiOTY1YmU4NDJkZjZkNzBiMWM3ODgxNzUzNzM5NmQ1ODY4ZTE4ODRhNGFjZmExMjczZWI1YjAwM2E4ZDg4YThlY2EzOGVhYmM4NTZkZDQ5ZTljNTVlNmNjY2VlZmVmOGJlM2FlMmE2OTc2MjdkYmI3OGVmMGNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BvbGljeS1mb3JtYXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS1mb3JtYXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMzVmYjhlYTM2YzgwNzIzMjM0ZTVhOWY2Y2JlNWIzMmQ4NGU5NTAwM2E1OWYxN2M1NjMwODJlZjYwOTQ2ODY5ZWU5ZGM5M2I4YzVjNDMwZTdiN2FjYjI1ODU3OWEwOTdhZWE4ZDQ5MDcxODYxMWIxY2JlMDBkNmRkZWIxNDA3YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wb2xpY3kuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BvbGljeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk5YjY0NDM5NWZjYzc0NDY0ZGViYzlhZWJkZWJlM2M2NDIwODU2ZTg1OTk2MmE2YzI1Y2I4YTc1M2M1MGMxYzEzOTY5YmI5YWQyNDFlODU1YzQwMTY4ZjY4OTVlZmQ2OTg0ZTkzNjNiNTcxZTcyYjU3N2ZhZmMxMzRiZjNmYjgxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bvd2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcG93ZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjE4NTNiYjM5ZDY1NGM5ZmZiYzk2MWY0NzU3Yjc1M2NlYzk4ODdmNjBjYzU4NGQ4ODhkODM4NWM0ZDU0NWNmZDBmNDkxNTlmYjcyZjJkYWJlNDQ5ZWE3MjA0NzBhZDRlODcwN2JkMWU0NGQ4YzkyM2U0ODQyYmVkYjE3MWM1YTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtZXh0ZXJuYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWV4dGVybmFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxZjhmNGY1N2Y0ZjZlMmM4YjVkMjk2NzM2N2ZmZTRkMDdjOWNiMTc2MWE3YzVjODg0ODZmNGIyN2E0ZTNmZTU3ZDI5ODRhNTkwODNjZjUyOTcxOTE4ZmY5OWViZmE2YjgyYThjMGQ5YzVkMzRlYzVkOTQ4YjE1Yzk5ZDJlYjEzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL0UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL0UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ZDNlOTEwNGI2ZTI1YjAyYTczNDk3OWFkNGYxOTc4NmJhODcxNjllODBmOGIwZDhhNTExNjc4MWQ5MTZjYTFjYWEwY2NhYWQ5ZWNiM2E0NWFmMTIwMTU2MmYwMDVlYThhMGEyZTBhZDI2MjJjMDdhOTU4ZWM4N2ZlNDU4MTA5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbG9jYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xvY2FsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTk1ZGY0Y2EzMjgyMDk2OGYxMjAzYWI1ZWEyNzJiOTYxYWUzMTE2MzQwNzBjZjE1MjBlOGFhYTYyY2E4ZWEyMjI5NzA0NGFjNGU4ODkyNjc0ZmJiOTFhMzQzYTc2NTBkY2JhZjUzYjdjNzQ1MjFhZDVlNTU2YjhmMzNhMzNhNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY5MTExNDZjOGUwNDUyMjcwMGUyM2M5MzhlNmJhNTcwYWM3ZWExZTkxNWQ5ZTdjNGRjYmM1M2ZjMGY3YWI4YWNiOGRkN2NmYzA3YzUyZTAyZjJjNjU3NDA0ZWU4OWVmNzMxMWEzMjc5NGE4NzExYWE3YWI0M2E1NDIwYjMyYzg4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL25vLXNoaW0uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vLXNoaW0uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOTIwNTFmNjk0NDJkYjEzZjllMmI2YzE5ZGRkMTg5YzUxYWIyMWE4NDA0MjEwMzAxZjhkMjYxYjNiMzE5NDhiZDUwY2I2Zjg1MjNlMDM1YzRmM2RmNzYzMTE1ODI4ZmMyZWFkYzljMmIxMjcxN2ZhMzkzOGZkNGYxZDc4NGIxMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFjay10dXJucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhY2stdHVybnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGNiYTc1Nzk4YmRhMzkyMGQ3NWQ2ODVkZjM4M2E2YmJhMDcxNWUxMzI2NDg0YzYzYWY4MWViZGU3ZTg0YjM4NWYwN2E3Mzc3ZmM1MmZjM2M4MGU4MDMxYmE3ZjkxYjViZDI1Yzg3YzQ5OTQ2OWVhMWQxMzcwNzc3NzlhYjFlOCIKICAgICAgICB9LAogICAgICAgICIuL3V0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmVhMDQxMWIyMTZjNzE0MTUxNDM5NjY2NGY4ZjgyMTNhY2QxMTJlOTMwYzBmNGZhYzAzNDI3ZjU3MzdkNzM3ZDBlOTQ2YjZjYzRjNjA4ODRkMDQwNTdiNzdmODgwOGEzOTY3MzY4NTk1NTg4NzI0MzVlYWVlZWQyZjEzMjY0N2QiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V4by12MS41LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V4byIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0MjljODVjMmFmZjY3Njk5ZDA2ZDA3ZGQwYTk3MWFjMjBmNzcyNjM1ZTY5NjhhNmVhYzBhYWEzZDM3Yzc3ZDg5ODZhYjMyOTdmOTdjNjYyMTM3NDNlY2QyNTM4ZmQyYzVlODYxMmYxNWUyYmZjZDVkNmU1NjU2N2FjZjM3Y2IyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYjc5NDE1MTJlZGUwNTEyOWYzYjIwY2Q1MDgwN2Q1YWExMDUzOWIzMDg5ZGI0MGU0YmRlZGRkNjY0YjU3OWY3ZDY0ODkwMzI1N2YwYzE1ZWQwNjZiZGE5NWUzNmY4OTA4MDM4MmY2ZjZhOTMxMWNhNmYyZWUwODczZDA2OGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1MGM2OGJhYWViMTA2NmE4YTVlMzIyNjBlNDJjZmE1NzVkNDkzOTA4MDc0YWZjYTM2ZWJmNjgyZjE4MGRkMDFmZjdiOWVkN2EyZDAwZjc3MzQwODRlMDg2ZmU2ZGUzNGVmN2QxYmRlZThhMDBjNWVkNTYxYjhjMzU4NDBlNjEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMDAzMzc4MmQ1NzAyMzk2MzNhMTkxOTQ3OGI3OWI2ZDE0ZmFlNTM4YzEwZTY5MzdmZjAyZDJmNGFjNjY0Y2EwZWM2OWJiMjM0OTMxMDVkNjRjMDhjM2FmNjlkMGRmYTViZDUxYjcwODU0ZGNlY2M2YjA2MTUxOWU3M2NkYmMxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDQzNTNjMWUyODJjN2YwOGE0OWQxNmFjMmVlYTA2OWExYzMyNTM0MDViZTYzZDg1NWE4MzliMDhiODBkOWJkM2MyNzQ0NWFlMWRhMmJjMzFiZjQ2MjEzZDViMmQ0MTQzOTExN2NmMWVjMGYxMWFmMDI0N2Q5NTVhNzYxNzc1NiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2ltcG9ydC1idW5kbGUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4zLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vYmFzZTY0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Jhc2U2NC12MS4wLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbXBvcnQtYXJjaGl2ZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29tcGFydG1lbnQtd3JhcHBlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBlMTEyNmMwYjU3ZTVlYWE1Y2Y5ZWE1OTkyMWJjNDMzMjgyMTBiZGQ2ZmQ4ZjM5MDllM2JlODQ1M2FkOTNmMjUwNzZiZTUzY2U0NzMzMmU5MTdmNTUxMzNkYjI4NGQ4MDRiMjFlM2EyZTE5ZjY1OWUzOWNiYjA0MmEwODdmZmM5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjAwOWYyYTE4NGI4N2Q5NDdjN2NiMzdiMWMwZDdmNGZlMDM4ZjAyZTY2MDVkZDIxMmJkYmFkZjNjOWNhNTE0YTM2MGYzNjAyMDExNDE3ZTc3N2YxNzRmNTBhM2JhZjFkNThiMDRhMWE4ZTRlNzI3MGNkYmEzYjQ5NDJiNDY0MjZjIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9tYXJzaGFsLXYxLjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbWFyc2hhbCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5NzFhNGJhZjkyYjU0OGUyNDc0ODgwYzA3ZGFiZjM2MWYyZmQwMzhjNDAwZGE1MWQwYTQ0NjgwOTJlMzY1NTU3Njk3YzhlYjFjYWUzMjVjZmQ5ZmFmNzJhYjg2YzEzZjA0MjQwYTZlMTQ3M2E3ZTM5Mzg2MmRkMDQxMWI1NGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzlkZDY0ZDZmZTJlMjU4NGE2OWEwNmYzNmI5OWQ2YmY4MDJkNDY0NDNjNTc1NDRmOGU1ZjQ0MGEyMDI2NGNiMGY4ZDRjNDM2MmFmM2M1OTc2MDNmMjQ3ZmQxMzM0Y2U5MmI5YThhMjEwYzhjNjBjMjM5ZGJiZjNiNDMyYmE2OTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb0NhcERhdGEuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMzJiNDhjN2IwYTdjNGFmMWYwNThjNDUwMzBjYzUxYTIxNjExNjA3NWMyNGU1MDhkYTllY2VmNmJkNmQ0MWM0ZGIwODBhMmE4MzgzMjI4N2ZmNjIwODczZTY3ZjMxOGVjYTQyMzE1NDFkMjEwYjk0YjQ0MjFjOWUzNGEzOTg4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkY2JkZjlhYWUzMTZiYzNlMzQwNWVmZGY3MDAzY2FhZTE4N2E5MzI5ODk0ZDkyOTJkYWM2NmQ1OTkwY2M1ZGZiODExMmY0MzNhODdkYzNkMmQxZWMwMjZkZDg1NjYwZGRmYTNkMTllZGU0OWFlYmJhYTI4NGQxYzAwOWVmODFkOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1qdXN0aW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MGI4YzFhOWM1YjY2ZDdkZjA2MTg0NWJiNzM4ZmVhZjMwZGU3NTQ4M2RkZDg1M2QyYjU1N2ZhYmQ4MzI3OWQ0MDRhYzQ5ZmY1NTNiMmUzM2ExOTAwMWY1MDExNjQyMzU4N2E5YzQyZDM2M2RkNWU5ZmMxNDUzMTIyOGVhOTQ2OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYzJiZDI0MWUyMjkzYmEyMWFlNmFiMmM0ZmZlMzYwNDcxZmQ1YjkxNWE0OTc2ZGE0MWYxNjhmOTgwMDI0MDJmZDQ3Y2VlYTgxOGI4ZDBiMzRjYjhjNTdhYTk1MDI5MmY3Mjk3M2ExMGI0N2MwOGIwNDE3YTRjY2IzZjA1ODJjNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVlYzY1NmQ1ZDRmZDIzYzI5YTU0YmE2ODVlZmJiMDkyZGNmMmY5NGUwY2JjYzg4MThhMTEyOWNhYzY4MTZhOTNlMTUwNGM1YWVkMGZmYzMxZTY2MmVmNDA1NDIxYmE1YzllMWI4NGQ4ZDQzMzBjMDY4MDNhYzIyYzUwMWFkMTEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmFua09yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yYW5rT3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMGQ4ZmNmZTRjMzdiYjU3YmE2MjMwZGI2NTFmNjgzNWI2ZWQ0MjkyNDM2MWMyODRhOGZjNWVkYmEyOWJkNzFmOTAzMGQxZTVjZTA2ZjFiM2FjZDVlNGM3ODc5Mjc5MDk4OThkZGY2OTJhM2E2MTQwZGZhZTk0YmQzMmZiYmNkNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbmF0LXY1LjAuMTMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL25hdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMjBhOTQ3ZjEyZmRkNTI2NjEwMmNmNmUyMDAzODNhNDI4OTdlOWRiMzk5YTI3MmI2Y2NkYzA1MDIzMjM1NjNlMjk5YzlkNjNmZmViZDcwNTFlMWNjNjg4ZWZhNWY5MWQ2OGU0M2U2NGM1YzkzMWYwYjdhNTQ4NTVlNDNhMDQ2ZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Bhc3Mtc3R5bGUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjk5MzJkNTRmNWI0MWFjN2IyNDFiMDQ0N2RlYmI1Zjc5MzU5YTRjYWM1MmQ3Y2I2ODQ1NTRkMjUxNTE5OWI5OWE0NWYwMWZlYzkyYWNhNDdhYTViNzE1OWU0ZWRiOTRhYzdjYzRiMWJhODYxNWIyMzk0NDI4ODFlZDg5MGZlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZjA3YWI5ZDE3M2M1MDM4MzhlYzVhYzkzMDYxYjk3YmMxZTAyNzljNmJlM2M0ZDdiYTQ2YzFlOWFjZjQxYzBjOTgwMGRhZGI5YTI1YmI5ZTc5YmE3MjJhMGQ0MzQ0YmNjZmI5MGIyMGViNjdmMWNmOTA4NTg4NGYyYzcyZmJhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFjNDljYzZkNTc3YWFiMmJlYTc4ZDQ0M2NlOGRlNzEzOGE0OGFkZDAxOGEyMjE1NjRmYTE0NDRiMTVlYWE2OWI2MjIxNjExODA4NWVlMjY1NTUyZWU0OGM2ZWRmNmVhNTlhMDAzOGU4Mzc1ZTU0MTQ5ODJlMjEyYTg5MWZlMjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4M2MwYmMwYmVjMTk0ZmQ5MTFiNDljODc5Mzk5ODg2ZGY2ZDY2ZGI3OWY3NTBkMjQzZDY2NWQ5YmFmYTFjY2M0NDcyZjg0MzM4NjQxYjBlMTg0Y2FjMzljNTc3ZGZhMTE1ZThiM2RiYmY2OTI3ZjliNzdiMGQ3MjgzNzRjNzA2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZWNkMGUzZGVhNjRhOTE5MmM1NzhkMDc4YmFmZGE2OGQxNWYzYmY4YzVmN2Y3MmRlYTUzYmY2MDQyZWRlMjY2MmExYTMwZTVkNWRhNGYxNjI3NjRlNDExMTFkYjA2ZGE5YjRiMjVjNDNhOTE3OWRhMjYxMmFiMDZkOGE1ZTgzZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhOGQ3Y2UwNTFiZWM4NzU2NGU3YzRmNmFkMTIwMzYyNjk4MmY0MWEzMjM4YTUxMDI1ZmFhNTMxMDFkNjI3YTUzMDBjYmI0MDY2MWIzOGU4ZGIxMjAwMDMyMmQ3YWRmOTU5MmNmMGE1YmE3Y2Q2MzE2OWMyMTdiNDBiYzQ4YzMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZGFiNTk2OGI2OTFhMjlhMmZkODU0Y2EzMzFiZDQ3NWUwZjQ3ZjU1NGJmMWY5ZGQ2N2NjMTdjZjI3YTEyYzlkNzY1NDZhZDZmYjZlMjllYjk5NjE1ZjQ0Y2I1ZjAxNTUxNDI4NmE5YWIyM2Y0NDhiYmM0NWIwODQxYzFkYWY5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDFmODJmOWI0MDY0M2Y1OWFkYzIwMmRhNzFhMDFhNTdhZjYwNDRmYTVkZTlmOWJmODkzYjkzMjc5Y2ExYTE1Y2JhMTBiZmQ1NmMwYWQ5MzAwNjM3YWUyZDYyZDA4ZWI4M2JhNzA2M2JhODA1ZGZkMWJlYWYxMjRiYzJmZWEyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZTU1NjA0N2VmMDMxZGI0MzZjODRmYTMyOGIzNzNmYjQ4YmE5ZTQ2NmVjMjQyZDQwZjFmZjJmZmIyZTZmZTBkMjkwY2JjY2QwOTA1ZDFmMjgxMDk2ZGRkNTM3YjgwY2ZhZDAxNjdjYTI2MTk1MzU5OTdhMjMyODhiMzY4OGNjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDJhOWVmYmIyODU2ZTZmZmMwZjM4OWM4NWRmZGRhODRlNjExYzNiZjQ3YmE0NzgwZjIwNzgxYjk2MzdiNjAyMjFiZTE0ODAzOGE4MDlmMmQ2ZmI3NmUyZGU2NDY5ZmRhZTYzYzAwNTI1NmJhNTRlNDk2ZTc0ZmJlZDUzOTdhZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5MTAwOTM4NzQ3NWNiOTczN2JjOGFkNTBmOThhNDg4YzhhNTExMTAzMzI2YjUzYjQyOTQ5MTdhZDY4Njg4M2EwYTRiYWQ2ZGIwNmE5NGMwNTA2YmVmMTRhY2JhZGYzMDg1MjhiOTFkYTI0YjJhNTBlOTU4MWEzZWNhOTIwNzU3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWQ2Y2JmYjNjM2Y5ZTE4YTAwNTY4N2M1OTdmMWVmYjc3OTVkYjNhYzM2OTc0NDdjYWEyYjI4MjRjYzFiYWIxNGNiMWI4YTFhNzA2YWRhMTI5ZDc5OGIwYTkyZDA5YTkxM2YwODNiZmM3YjYzNjc2ZTcxMzhmNWZiZmU5YzBjODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOWIyMTAxNzFkZmYyOTZmMzhiNDU3NzA2YWIwMjFlYWJiNzU2MGUyNThkOTNmZmY2OGI1NmU5NmM2YzJhNmMyYzlkOTcxNmI5NjYwZWE5OGNlZDlmZjRhYjZkZjAyYWEwMWI4ZjgxODZiNzA2ZTVmNzBiYTI3ZGZlOTVlZDg5ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NWM0ZWFjYTc5ZTgxY2U3MzBjNWNjYWM0MTIwZjkyYmY0OGIzMTdmMzRkODM1YWQyMTM5ZWM3MTExNTU5M2NlNGU5ZjlhYzY4ZDc3YjlkZDZiNmIzOTc1YmYxNjZiZjQxZGUzODI0ZWVjZmU1YmIxNjllNTcxYjMzYmFmZWMyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2RkMGNlOTJlZThiNWU2ZDAwOTdhNTc4ODI0MmE4NzllNzI2YzY3YzU0ZmZiMGUzYmE0ZWFlMzk5NjQxZGM0ZDFhYzVlNTYxOWY1ZjU2NmU2YTNlZGQ4NDZjZjg3M2I1YzFjNTk3ODViMjUxZmQyMDRlOTA4OWIxN2FjMDE0OTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMyOWZjMTU0MDUzNzcxNWRmODU0YTM4YTVlNDVhZTZkMjI4NmU5ZmIxNTFjNTI4NTZjOWI5ZGZjMWUyMmNkNjMwOWVkMzIyMjMwZTZmZWNjNmEyNDhhNmIzNDUwYTNmZjE2NGE2NzRlZWZmODI4YzkxNWVjNDgyMDNiZGM2NjQ3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXR0ZXJucy12MS40LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3BhdHRlcm5zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU2OWVjYTk5MmFlMmNmMDlkNDZlYWU3ZWVhMDA3ZTk1YmI0YzY0YWFhMzdiYTVlNDY2MjU4NmI5ZmRmY2YwOTQ0OGY5ZjFkNWRiOWY0MTY3ZTBhN2I3OTZmZTkyMGE1ZmQwYTk4ZDBjNTQ2NDllMjE3NjMwM2RhZjdlYTQ0OThmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY2hlY2tLZXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY2hlY2tLZXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5OTcyZmEwMDRiYmNkZWMzM2QyYjFlM2I3ZDkxODA0MGY1ZjgyYTQ4ZmY3ZTBjYzNhMjRjNjA2NjIyNmQ2MTExZWNjNzQ5NDY0YzhkZWQ1YTg1OGY4NWQ5ZDY4OTRkNjc5MWYxYjI1NzdjZTg1NDZhNTlkOTZkNTIzN2I0MjkyNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzFkODU0OGIzOTBjYzI2NjE3NWNjOWZlNjc5NTg2MWE0MjM3YTlkOTQyYTNkODljZmY2MjU5NDYyMzA0NDkzNDBlNDZjNTc1ZTM2YTczZjZiYTM4NTVlMGJmZTU5MmUyYTVkZmI2NzUyYWMwMGU2N2UxM2FjNWQwNDAzODFiODIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5QmFnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlCYWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNTU5NDg1OGRlODNkMzU3YzVjZThkYjBjZWVkNmYxZmViYmYzNWFkZjBhZjcxY2I2NzBhNDhkZjE0Mzg5N2RiYjljZDlhZWM2ZmY3YjFiYzYzZTZkM2UyZDczMjAxN2E4MDg4ZDlmZGI0ZDc1NmZiMjBkYTk2OWQ4ZTQyZTQ3NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlTZXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weVNldC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBiYjEzYmEwNmFjODZjYWU1MThiY2JiNGJmYjc1Njg5ODAxMGM3ZmJmMDgxODBlNTRkNmIxZGQ1NDQ3NTY3Yzg4M2Q0ZTgwZjg1NWY4MTYzYmI5NjNkZjk3OTNjMzQ1ZTljM2ZmMmIzNGFjMDNjNDNiZTJlMmQ1NjBjMmM5MzQ2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZDhmZGM3MDAzNDQ1ODg3ZWRiN2RhMjMxNzg3N2U3ZGY1M2M2M2JmYzg4NGZkNWNkYjU4N2JiNjZlODdjNzgwZGYzN2ZkZWJkMzIzZDZlYmMwY2Q2MTM4NmM5MjU1MjUxOWQ0ZWRhOTcwZTJmOGM1MDJhMWI3ZGVmYmJiMzBmNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxYjNhMmY0NDhmOTBmMjM4MjliNDZjOTczY2I2YzY5NmE5ZmUyYzIzNGQ2ZjJlMGJmY2NlZTFlN2M4ZTUyN2M0ODUxZjhiZDViYTg3ZTAwZWVlYWFmOWNjNDI3M2FlZGY2ZmEzNzE1ZGQyNzY0MDdlNzJiOGM2MTM0MDZmMDUyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2I4NWI4MTBlMzNhMmNjYjk1M2EwMWZjZWFmMDAzNmI2OTE0MWExYmU5ZDgzMjhlZWI1OTBjOTcwOTZkYTZjM2YxNTc0NWJiMDM3ODM5MWRlMmY3OTAwODVjMGVhNmNmNTgwYWQ5ZDBkMDk0YTAyNDQyNGI4MmZiOGZjYTYyODciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxYjllODU3Y2VlODg0YWIwOGI4Zjk4ZjhjMmZkMGVjNjIwMTkyYzJmMjE0MGU3MWEyYzljMmE0ZGJhYWRkNzhmZGVmNzlhNjk1ZDdmOTYyY2Y5MTliZDYwOTExNTRiZDVjY2IzYmM0NWRiMjM0ZWU5MDU1OTBmMjMxY2Q1OWZiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDVjMDc1Yjc0ZTc0ZDViYjA4ODg4OTFlM2MzZDIxZjRiNjMyOTUxNmY0NWEzY2M1OGFiNDdjMTQ0NGZkODE2ODI4NTJjYmE5YjkxMmU4ZDE5YWU2Y2ExMzhkOTllMDQyYWY3OThlYTQ2ODk5ODUzNzQwNmUyMTY0ZTYwM2VjMTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcHJvbWlzZS1raXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODM3NjUwNWY2OGJkYzNjYjk0ZTY1NzY0ZTJmZTMyZWNlOTAyNmExMzc3ZTcwNDFlZWFkYzc1MDE4MGE5N2U5ODJmN2M0YWI4ZjczMTg4ODQ4NDJkZDIyNTg1MjlkYjQyNTQ0ZjU4YmQwOTkwOTM5NDhiMGM1YzM0MGI4NmVlOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNjJiNTgwNWM0MjU1NzZiZDExYmEzODcxMDZlNzJhZDY5NWE3NDIyM2Y1OGQ2Zjg5MWNiZjE4YTY2Y2U0MjY4MTFiMTJmMzhkYjEzODQ4NzcwYzkyZmU5YTgzNDczYjQyZjE3MGRmNDZjYjg2ZDI1NDg4YjdmNWZkMWQ5ZWE0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDYyMjVmMWI1M2RmMWIyOGIzOWUzNzcyN2JhMGRmNDkxNThjMTI3MmJmYzExNTFlM2VkOTc4ZGU1ZTgwYmI1MzU4MGY5MDVhMzcyNTg2MjJiYWMzZmM4ZjgzZTA5MDQxZWJmNzQxZDgwNTZhZmZiNjFkMmI2MWQyZGI0YzNlYjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2E4YzUyMzQ3NWVlMDVkZTI4MDFiZDM2ZDk3NjdkNjgyNWFhNjBkZGEwNGQ0N2U0NDA0OWVjNGY0OTA4NjM2MWEzOWUzZmIxOThmYWM4NDhjMzU2MGZmNWY1NWM3NzM1MjI1NTM1ZWNhNTYzZWVhMjc2NzViMThhNGY5NDc2ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3N0cmVhbS12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3N0cmVhbSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmRkZmEzYWVmYWQ5NDZhMmUxYTRlM2FkZDdjZTE4ZDFjM2VjMTNmZGNmMWQ1Yjc0YzFjOWZkYjNhNWQ1Zjg2ZWEwNWZiYTFhNDc0ZDkwMGU3ZWY4YTJhZmI1MzdiZThmZGMzYzhiYzQyNTRmMDYwN2NiNDE2ZjJmZDU5NGZjNjkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zIjogewogICAgICAibmFtZSI6ICJAZW5kby90cmFtcG9saW5lIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjYzU0M2VmNTJiN2Y1MDVkZjhjNjAxZTdlZTU3NGM4Y2MzMjYxOTI5ODc2YWU2ZjZhNDk0MmUwNWFmNDEyN2VjODFkZThhYzEyZTg5YzIyZjI0NGM1NWI3OGUzMzE3MmU5MjUwY2I0MzljMjAyNzk5MmJkNjQzODBmMjdlOTQ2YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFtcG9saW5lLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFtcG9saW5lLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjVhMDI3YmU3MzRjNTc1OGU2MjY2ZGEyMTdiMTFhNjg5NGEzZTE1ZGM2YjkyYTBjMmUzN2ZmYTU5Y2E1YWJmZjY0MTQxZGJjNWM1YzlhMDZkNWVlOTkzZDA1ODBlZTFkMzQ1YjRiYjRhMzIyZGFmZmJjMGU5MWFmMWM3YjRhNDUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3ppcC12MS4wLjkiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3ppcCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby96aXAtdjEuMC45IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3ppcC12MS4wLjkiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk1MDg2OTdhZTMyNzJlZGE0YjliZTE5NDFiMDgwZTQwMDNlNThmZjQwMzIxZWI5YTcwZjg5NzM5ZWQzOGI3NDNiMThjNmY2ZDIwOGJjNzNkYTJjMDE1Nzk2ZmRlMmYwNzI5ZDc1MjMwNmQ5M2Y2M2Y1NTNjZTY5NjBmMTc1MTEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2J1ZmZlci1yZWFkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2J1ZmZlci1yZWFkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMmI1M2UwY2FkZDRmY2RlYTBjYTMxODY4NDVmMWViM2M4YjliNTUwN2JiODgxZDM3MmM1MzcyM2NlN2VmNmM2OTNmMmJkNGNiZjMzMWM4NDY2YmRmYzBlNmI3NzUxMTc5OTIwNDFiNTk3ZWNiYzc5MWNmNDdmZGM5OGQ4YTllZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9idWZmZXItd3JpdGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9idWZmZXItd3JpdGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWMzZmU3ZWM1OTExNjY1OWE1MzQwMzM4OWU5MmEwNDFjZDAxODQxMmM5MWU3MmZhNmU1MGMxZWFmOWU1NTlkZjQ0M2YyYjg3OTA1ODYxYWU2YTExYzdhYThlY2UwYTFjMDRlOTRlMWU1OTllNGMyOTNhMjFlZGJjOTc4YmYxMGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29tcHJlc3Npb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbXByZXNzaW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTgzZmZlZWI4YjFmNzk3NjExOTI4ODg0OTQwNmRiODY3MjI5MWY2NmY0NTczNmIwY2ZhYTYxZTNmY2YzMWQzYjZkOWY5MmIxZGUyZGQ1OGY3NzIwNjc2NGZiMjBlODI0M2RmNGNhM2RkNjA3NjRjMTFmMDQzMWE4NTMzZjQ1YzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY3JjMzIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NyYzMyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODBmZjg3NTMwMmEyMmU4OWYxZTUxNjE0ZjkzNTRkNTQ1NWU5NTM2YzAwZTA3YmY2NmI0MjM3MjA5NDNmZjI2MjQ4NGJlMTRkMzM1NDEyN2ZkOGQyOGQyZDAzOGViOWE3MmU4NzZlYjU2NGVjYjI0Njk3YmFmMTU4ZTM5NTEzM2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZm9ybWF0LXJlYWRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZm9ybWF0LXJlYWRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU3ODcwZDgxOTU0NjI4MjdjMjIyMWMwMzliOThhNDFmY2IzN2JhYjQyN2FlM2YwZWFkODgzYTIxZTlmNDY3Y2FlMjBiYjJmMjU1MGU5YzNmNzg0OTAxYTgyZGE5MDI3NWM4NWU3NGY0YTg1NTI5NjQxYmI2OGE1NjFlNTQwMTE3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Zvcm1hdC13cml0ZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Zvcm1hdC13cml0ZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlODUzOTg1MDAwZTIxMTY2YTgyMGY0YzJkZGMzZTI4Yjc2MjJjMGJkZDEyY2M0ZmRhZTVjNGUyYTdmOWU1YzE0NjE2NjBiOWU0ZDIzZjQ1OWVmYWFhZDA5YTY2ZjMwYzE2OWQ0ZDA5MDFhMjAyZmNiZTdjYWMwNTRlNjUyY2VmNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZWFkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlYWRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhMjgwNzcyZWZmNzFhMGQ5MWJmMWRjOThmNzc2YjEyZGZiMmU4ZTEzMjM5NjI5NGY4YTVlYTBkYWYwMjMwNDM5OGJlOGVhNzIzNTMwMDc5NTdhNGE4NmUyMGY5NDY5NDE3ZTIzNDA4MTIxY2Q4NDAzNGUxMTc3NDk4NWIwZTEwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NpZ25hdHVyZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2lnbmF0dXJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFhYWFhZDBjOTE5NTQ5MzFlYzliZTVlYjQ3MTg3Mzk3Y2ExZTM3OGRjMDM1MTNlOGUxNjc2MGRiOWY0N2NmOTg1MWIzYjM0MGQ0ZDQ1YmViNmI1N2U2MDMyMTU3ODlhZjJkZWI0N2FjY2I0MjRiMDAzNDZmODliNWIxN2Q3NzciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd3JpdGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93cml0ZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyZGQ0OTE3ZTE2YzkyMTM5OWQ1ODQ0YjFkYzc1ZDkwYjdkY2MyODI1YWIyNWJkODQ0ZTdmZTI5ZTNjMzBiYzZiMmExZjhmZjk4ZGZmOGQ4MzMyNGFmNGEyNzY3NmJkY2FkN2ZlMWMwYzkzYTA5MGNiN2U5ZDE0OGNkYzgzZDIyZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiamVzc2llLmpzLXYwLjMuNCI6IHsKICAgICAgIm5hbWUiOiAiamVzc2llLmpzIiwKICAgICAgImxhYmVsIjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAibG9jYXRpb24iOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjdkN2RkNjIzZWZmYWRkZWUwN2Q1ZGEwNmIyMDE4ZTY2Y2YyOGFkMDk0NDRmMWZhNzJkYzFlMGU2OTJlM2JiMzRkOTdiODA1ZjM3NDYwNDlkZWM3ODUxYWJiYmVmMWI4NWIyZmYxMDBmMTY4ZWRlNDBmNDFmMTdhOTM3NGQ2NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTg5MjZhZmRiNTljNWU1YTA4NjNkNDcxMzI0OTNlYThiZTYzOTIxMzEwZWU2N2RhNmZmNDc5ZDU2M2M5NTUyZGQ5YTIyNDI1NWE4MTg3NjRmMjc4MTJiOGNiMzQ0N2ExZmM5Y2RiY2U3Yzc3MTE4YmYwMGI3MmQ5MzM2MzIzZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDZjZWIxOTgzZmU0ZDEyYWM2MjdkOWYxYmQwNTY1MGRiYWNmMTQ0YjdmMzlmNjFlMGNhNzQyM2Y5OGNmOWIwNjE2NWRmY2Q4OGY2MTdhZjg2NmEwZDE1NzA3MGE5NzRlOGY5MmNlMWM1MDEwOWQwMDc3NDg4ZjQyOGMyZTA3OWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2ZmVlMTZkYWIzOGEyMWYwYjVjOGEwYjFmMTBjM2I3M2EzMTU3ZjZlOWY1ODkzODA5NmI0Yjg3OWIyYTA5OTNmZDdjOWRkZDdiMzkzMGU4MDI2MGUxYTg3YWIxYTRhYzY3NjFjYjc1Nzk4NThmZTM5ZTAxMDlkYzVhMTYwNTNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlhOGUzMzg0MGY1MGE3ZGEyMzJjODgzNmM2ZmJhMjRiM2Y3NTBlZjJiMzMxZGFiMTY1YWZlZDYwNTA4YmY3M2E3ODE4ZTI3OThjMmVlZGIzZDA0ZjNkNjcxN2Y5NDNmYjkzMDg4NmZlNjRlOGE3ODMwNDg2NTk2NzRhOTQyYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGZmMzE4OTU5NjFmMmM5ZmRmMzE0NDVkZDY4OGYzZGNmN2ZmNTE1MDcyZjgyMjliZTQ1NTE4NTY4NDIyMjJmNzFjNjVjODUzMzFhYmJkYWQ5ZTNkNTU1ZDkxZDVmOWZiNmZmMTgxNmI5MmM2Y2YwOTdjYzlmMmM4Y2NjY2JkYTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhlZDM5YzQ1ZDk3YzBmZDJhMTQxYmRhMWNjNTQ4NDQ5NGNmNTlmNjYwYjQ3OGM0ZDM5YTNmNzJiZTBkMzRhZTAwMDkyM2U3ODNmNjBlY2IxZTcxMzI5YTMwZGU3MzE1MDQ4OTVhNmQ0Y2YwMjJlNmUxYzcyNmNlOWQ5ZGQ2ZDNkIgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAABQu9oH8BAAB/AQAAIAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9oZWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACcAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABLcf+RZCgAAWQoAACQAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2hlYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2V4byIsIkBhZ29yaWMvc3RvcmUiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VIZWFwWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsaXNQYXNzYWJsZSxtYWtlRXhvLGRlZmluZUV4b0NsYXNzLGRlZmluZUV4b0NsYXNzS2l0LG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyU2V0U3RvcmUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha1NldFN0b3JlLG1ha2VPbmNlS2l0LGtleXMsd2F0Y2hQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9leG9cIiwgW1tcIm1ha2VFeG9cIiwgWyRozY9fYSA9PiAobWFrZUV4byA9ICRozY9fYSldXSxbXCJkZWZpbmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChkZWZpbmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJkZWZpbmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChkZWZpbmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhclNldFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJTZXRTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhcldlYWtTZXRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha1NldFN0b3JlID0gJGjNj19hKV1dXV0sW1wiLi9tYWtlLW9uY2UuanNcIiwgW1tcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9rZXlzLmpzXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dXV0sW1wiLi93YXRjaC1wcm9taXNlLmpzXCIsIFtbXCJ3YXRjaFByb21pc2VcIiwgWyRozY9fYSA9PiAod2F0Y2hQcm9taXNlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuY29uc3QgZGV0YWNoZWRIZWFwU3RvcmVzPUZhcignaGVhcFN0b3Jlcycse1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkSGVhcFN0b3JlcyxcbmlzU3RvcmFibGU6aXNQYXNzYWJsZSxcblxuc2V0U3RvcmU6bWFrZVNjYWxhclNldFN0b3JlLFxubWFwU3RvcmU6bWFrZVNjYWxhck1hcFN0b3JlLFxud2Vha01hcFN0b3JlOm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmU6bWFrZVNjYWxhcldlYWtTZXRTdG9yZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIZWFwWm9uZT0oYmFzZUxhYmVsPSdoZWFwWm9uZScpPT57XG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KGJhc2VMYWJlbCxkZXRhY2hlZEhlYXBTdG9yZXMpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBtYWtlU3ViWm9uZT0obGFiZWwsX29wdGlvbnMpPT5cbm1ha2VIZWFwWm9uZSggYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuXG5yZXR1cm4gRmFyKCdoZWFwWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihtYWtlRXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmU6d3JhcFByb3ZpZGVyKG1ha2VTdWJab25lKSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDpkZXRhY2hlZEhlYXBTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmRldGFjaGVkSGVhcFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLm1hcFN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMuc2V0U3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha01hcFN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtTZXRTdG9yZSl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VIZWFwWm9uZShtYWtlSGVhcFpvbmUpO1xuaGFyZGVuKG1ha2VIZWFwWm9uZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSGVhcFpvbmUiOlsibWFrZUhlYXBab25lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAO5at89rAgAAawIAACUAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vZXhwb3J0cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vZXhwb3J0cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL2tleXMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4vd2F0Y2gtcHJvbWlzZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdelBrlgCAABYAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcmVhbElzUGFzc2FibGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJpc1Bhc3NhYmxlXCIsIFskaM2PX2EgPT4gKHJlYWxJc1Bhc3NhYmxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGU9KHNwZWNpbWVuKT0+cmVhbElzUGFzc2FibGUoc3BlY2ltZW4pOyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZSI6WyJpc1Bhc3NhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB5pTBl1AwAAdQMAACQAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2tleXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBraW5kPShsYWJlbCk9PiBgJHtsYWJlbH1fa2luZEhhbmRsZWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNpbmdsZXRvbj0obGFiZWwpPT4gYCR7bGFiZWx9X3NpbmdsZXRvbmA7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhZ29yaWNWYXREYXRhS2V5cz17XG5leG9DbGFzczoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpXSksXG5leG9DbGFzc0tpdDoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpXSksXG5leG86KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKSxzaW5nbGV0b24obGFiZWwpXSksXG5zdG9yZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSksXG56b25lOihsYWJlbCk9PmhhcmRlbihbbGFiZWxdKX07JGjNj19vbmNlLmFnb3JpY1ZhdERhdGFLZXlzKGFnb3JpY1ZhdERhdGFLZXlzKTtcblxuaGFyZGVuKGFnb3JpY1ZhdERhdGFLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFnb3JpY1ZhdERhdGFLZXlzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB9ChiniBgAA4gYAACkAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL21ha2Utb25jZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlT25jZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaM2PX29uY2UubWFrZU9uY2VLaXQobWFrZU9uY2VLaXQpO1xuaGFyZGVuKG1ha2VPbmNlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VPbmNlS2l0IjpbIm1ha2VPbmNlS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAO9qtJJfCQAAXwkAAC0AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiLCJQcm9taXNlV2F0Y2hlckhhbmRsZXIiLCJQcm9taXNlV2F0Y2hlckkiLCJQcm9taXNlV2F0Y2hlclJlamVjdGVkSSIsIndhdGNoUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVySGFuZGxlcj1NLmNhbGwoTS5yYXcoKSkucmVzdChNLnJhdygpKS5yZXR1cm5zKCk7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckhhbmRsZXIoUHJvbWlzZVdhdGNoZXJIYW5kbGVyKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyJyx7XG5vbkZ1bGZpbGxlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXIsXG5vblJlamVjdGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckkoUHJvbWlzZVdhdGNoZXJJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyRnVsZmlsbGVkJyx7XG5vbkZ1bGZpbGxlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG4gKi8kaM2PX29uY2UuUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKFByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSk7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJSZWplY3RlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyUmVqZWN0ZWQnLHtcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkoUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkpO1xuY29uc3QgY2FsbE1lTWF5YmU9KHRoYXQscHJvcCxwb3N0QXJncyk9PntcbmNvbnN0IGZuPXRoYXRbcHJvcF07XG5pZighZm4pe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5hc3NlcnQudHlwZW9mKGZuLCdmdW5jdGlvbicpO1xuLypcblxuICAgKi9cbmNvbnN0IHdyYXBwZWQ9KGFyZyk9Pntcbi8vXG4vL1xuYXBwbHkoZm4sdGhhdCxbYXJnLC4uLnBvc3RBcmdzXSk7XG4gfTtcbnJldHVybiB3cmFwcGVkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB3YXRjaFByb21pc2U9KHAsd2F0Y2hlciwuLi53YXRjaGVyQXJncyk9PntcblByb21pc2UucmVzb2x2ZShwKT09PXB8fEZhaWwgYHdhdGNoUHJvbWlzZSBvbmx5IHdhdGNoZXMgcHJvbWlzZXNgO1xuY29uc3Qgb25GdWxmaWxsZWQ9Y2FsbE1lTWF5YmUod2F0Y2hlciwnb25GdWxmaWxsZWQnLHdhdGNoZXJBcmdzKTtcbmNvbnN0IG9uUmVqZWN0ZWQ9Y2FsbE1lTWF5YmUod2F0Y2hlciwnb25SZWplY3RlZCcsd2F0Y2hlckFyZ3MpO1xub25GdWxmaWxsZWR8fFxub25SZWplY3RlZHx8XG5GYWlsIGBwcm9taXNlIHdhdGNoZXIgbXVzdCBpbXBsZW1lbnQgYXQgbGVhc3Qgb25lIGhhbmRsZXIgbWV0aG9kYDtcbnZvaWQgRS53aGVuKHAsb25GdWxmaWxsZWQsb25SZWplY3RlZCk7XG4gfTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7XG5oYXJkZW4od2F0Y2hQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlByb21pc2VXYXRjaGVySGFuZGxlciI6WyJQcm9taXNlV2F0Y2hlckhhbmRsZXIiXSwiUHJvbWlzZVdhdGNoZXJJIjpbIlByb21pc2VXYXRjaGVySSJdLCJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiOlsiUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJIl0sIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIjpbIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIl0sIndhdGNoUHJvbWlzZSI6WyJ3YXRjaFByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAXM2qhwAdAAAAHQAAJgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQW1vdW50TWF0aCIsIkFzc2V0S2luZCIsImFzc2VydEFzc2V0S2luZCIsImFzc2VydFZhbHVlR2V0SGVscGVycyIsImdldEFzc2V0S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwscGFzc1N0eWxlT2YsYXNzZXJ0UmVtb3RhYmxlLGFzc2VydFJlY29yZCxNLG1hdGNoZXMsbmF0TWF0aEhlbHBlcnMsc2V0TWF0aEhlbHBlcnMsY29weVNldE1hdGhIZWxwZXJzLGNvcHlCYWdNYXRoSGVscGVyczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlbW90YWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRSZW1vdGFibGUgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVjb3JkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlY29yZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJuYXRNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChuYXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNcIiwgW1tcInNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKHNldE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanNcIiwgW1tcImNvcHlTZXRNYXRoSGVscGVyc1wiLCBbJGjNj19hID0+IChjb3B5U2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weUJhZ01hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlCYWdNYXRoSGVscGVycyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBBc3NldEtpbmQ9LyogICAgICAgICAgICAgICAgKi97XG5OQVQ6J25hdCcsXG5TRVQ6J3NldCcsXG5DT1BZX1NFVDonY29weVNldCcsXG5DT1BZX0JBRzonY29weUJhZyd9OyRozY9fb25jZS5Bc3NldEtpbmQoQXNzZXRLaW5kKTtcblxuaGFyZGVuKEFzc2V0S2luZCk7XG5jb25zdCBhc3NldEtpbmROYW1lcz1oYXJkZW4oT2JqZWN0LnZhbHVlcyhBc3NldEtpbmQpLnNvcnQoKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXNzZXRLaW5kPShhbGxlZ2VkQUspPT57XG5hc3NldEtpbmROYW1lcy5pbmNsdWRlcyhhbGxlZ2VkQUspfHxcbkZhaWwgYFRoZSBhc3NldEtpbmQgJHthbGxlZ2VkQUt9IG11c3QgYmUgb25lIG9mICR7cShhc3NldEtpbmROYW1lcyl9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRBc3NldEtpbmQoYXNzZXJ0QXNzZXRLaW5kKTtcbmhhcmRlbihhc3NlcnRBc3NldEtpbmQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgaGVscGVycz17XG5uYXQ6bmF0TWF0aEhlbHBlcnMsXG5zZXQ6c2V0TWF0aEhlbHBlcnMsXG5jb3B5U2V0OmNvcHlTZXRNYXRoSGVscGVycyxcbmNvcHlCYWc6Y29weUJhZ01hdGhIZWxwZXJzfTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQ9KHZhbHVlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbHVlKTtcbmlmKHBhc3NTdHlsZT09PSdiaWdpbnQnKXtcbnJldHVybiduYXQnO1xuIH1cbmlmKHBhc3NTdHlsZT09PSdjb3B5QXJyYXknKXtcbnJldHVybidzZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5zZXQoKSkpe1xucmV0dXJuJ2NvcHlTZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5iYWcoKSkpe1xucmV0dXJuJ2NvcHlCYWcnO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xudGhyb3cgRmFpbCBgdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBhIGJpZ2ludCwgY29weVNldCwgY29weUJhZywgb3IgYW4gYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0VmFsdWVHZXRIZWxwZXJzPSh2YWx1ZSk9PlxuLy9cbmhlbHBlcnNbYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGFzc2VydFZhbHVlR2V0SGVscGVycyk7XG5jb25zdCBvcHRpb25hbEJyYW5kQ2hlY2s9KGFsbGVnZWRCcmFuZCxicmFuZCk9PntcbmlmKGJyYW5kIT09dW5kZWZpbmVkKXtcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFsbGVnZWRCcmFuZD09PWJyYW5kfHxcbkZhaWwgYGFtb3VudCdzIGJyYW5kICR7cShhbGxlZ2VkQnJhbmQpfSBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGJyYW5kICR7cShcbmJyYW5kKVxuIH1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tMUkFuZEdldEhlbHBlcnM9KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0UmVjb3JkKGxlZnRBbW91bnQsJ2xlZnRBbW91bnQnKTtcbmFzc2VydFJlY29yZChyaWdodEFtb3VudCwncmlnaHRBbW91bnQnKTtcbmNvbnN0e3ZhbHVlOmxlZnRWYWx1ZSxicmFuZDpsZWZ0QnJhbmR9PWxlZnRBbW91bnQ7XG5jb25zdHt2YWx1ZTpyaWdodFZhbHVlLGJyYW5kOnJpZ2h0QnJhbmR9PXJpZ2h0QW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGxlZnRCcmFuZCwnbGVmdEJyYW5kJyk7XG5hc3NlcnRSZW1vdGFibGUocmlnaHRCcmFuZCwncmlnaHRCcmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGxlZnRCcmFuZCxicmFuZCk7XG5vcHRpb25hbEJyYW5kQ2hlY2socmlnaHRCcmFuZCxicmFuZCk7XG5sZWZ0QnJhbmQ9PT1yaWdodEJyYW5kfHxcbkZhaWwgYEJyYW5kcyBpbiBsZWZ0ICR7cShsZWZ0QnJhbmQpfSBhbmQgcmlnaHQgJHtxKFxucmlnaHRCcmFuZClcbiB9IHNob3VsZCBtYXRjaCBidXQgZG8gbm90YDtcbmNvbnN0IGxlZnRIZWxwZXJzPWFzc2VydFZhbHVlR2V0SGVscGVycyhsZWZ0VmFsdWUpO1xuY29uc3QgcmlnaHRIZWxwZXJzPWFzc2VydFZhbHVlR2V0SGVscGVycyhyaWdodFZhbHVlKTtcbmxlZnRIZWxwZXJzPT09cmlnaHRIZWxwZXJzfHxcbkZhaWwgYFRoZSBsZWZ0ICR7bGVmdEFtb3VudH0gYW5kIHJpZ2h0IGFtb3VudCAke3JpZ2h0QW1vdW50fSBoYWQgZGlmZmVyZW50IGFzc2V0S2luZHNgO1xucmV0dXJuIGxlZnRIZWxwZXJzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb2VyY2VMUj0oaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KT0+e1xuLy9cbnJldHVybltoLmRvQ29lcmNlKGxlZnRBbW91bnQudmFsdWUpLGguZG9Db2VyY2UocmlnaHRBbW91bnQudmFsdWUpXTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNHVEU9KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNHVEUoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFtb3VudE1hdGg9e1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZTooYnJhbmQsYWxsZWdlZFZhbHVlKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYWxsZWdlZFZhbHVlKTtcbmNvbnN0IHZhbHVlPWguZG9Db2VyY2UoYWxsZWdlZFZhbHVlKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29lcmNlOihicmFuZCxhbGxlZ2VkQW1vdW50KT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0UmVjb3JkKGFsbGVnZWRBbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlOmFsbGVnZWRWYWx1ZX09YWxsZWdlZEFtb3VudDtcbmJyYW5kPT09YWxsZWdlZEJyYW5kfHxcbkZhaWwgYFRoZSBicmFuZCBpbiB0aGUgYWxsZWdlZEFtb3VudCAke2FsbGVnZWRBbW91bnR9IGluICdjb2VyY2UnIGRpZG4ndCBtYXRjaCB0aGUgc3BlY2lmaWVkIGJyYW5kICR7YnJhbmR9LmA7XG4vL1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2UoYnJhbmQsYWxsZWdlZFZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5nZXRWYWx1ZTooYnJhbmQsYW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYW1vdW50KS52YWx1ZSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHk6KGJyYW5kLGFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqLyduYXQnKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5jb25zdCB2YWx1ZT1oZWxwZXJzW2Fzc2V0S2luZF0uZG9NYWtlRW1wdHkoKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eUZyb21BbW91bnQ6KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQsdmFsdWV9PWFtb3VudDtcbmNvbnN0IGFzc2V0S2luZD1hc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG4gfSxcbi8qXG5cblxuXG5cblxuICAgKi9cbmlzRW1wdHk6KGFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZX09YW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGFsbGVnZWRCcmFuZCwnYnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhhbGxlZ2VkQnJhbmQsYnJhbmQpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnModmFsdWUpO1xucmV0dXJuIGguZG9Jc0VtcHR5KGguZG9Db2VyY2UodmFsdWUpKTtcbiB9LFxuaXNHVEUsXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5pc0VxdWFsOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzRXF1YWwoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmFkZDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb0FkZCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuc3VidHJhY3Q6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9TdWJ0cmFjdCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5taW46KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueTpcbmlzR1RFKHkseCxicmFuZCk/XG54OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYCxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYXg6KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueDpcbmlzR1RFKHkseCk/XG55OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYH07JGjNj19vbmNlLkFtb3VudE1hdGgoQW1vdW50TWF0aCk7XG5cbmhhcmRlbihBbW91bnRNYXRoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBnZXRBc3NldEtpbmQ9KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7dmFsdWV9PWFtb3VudDtcbnJldHVybiBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4gfTskaM2PX29uY2UuZ2V0QXNzZXRLaW5kKGdldEFzc2V0S2luZCk7XG5oYXJkZW4oZ2V0QXNzZXRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkFzc2V0S2luZCI6WyJBc3NldEtpbmQiXSwiYXNzZXJ0QXNzZXRLaW5kIjpbImFzc2VydEFzc2V0S2luZCJdLCJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiOlsiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIl0sIkFtb3VudE1hdGgiOlsiQW1vdW50TWF0aCJdLCJnZXRBc3NldEtpbmQiOlsiZ2V0QXNzZXRLaW5kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIFGxYXUAwAA1AMAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanN7ImltcG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIl0sImV4cG9ydHMiOlsibWFrZUFtb3VudFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFtb3VudFN0b3JlPShzdGF0ZSxrZXkpPT57XG5yZXR1cm4gaGFyZGVuKHtcbmdldEFtb3VudDooKT0+c3RhdGVba2V5XSxcbmluY3JlbWVudDooZGVsdGEpPT57XG5zdGF0ZVtrZXldPUFtb3VudE1hdGguYWRkKHN0YXRlW2tleV0sZGVsdGEpO1xuIH0sXG5kZWNyZW1lbnQ6KGRlbHRhKT0+e1xuaWYoQW1vdW50TWF0aC5pc0dURShzdGF0ZVtrZXldLGRlbHRhKSl7XG5zdGF0ZVtrZXldPUFtb3VudE1hdGguc3VidHJhY3Qoc3RhdGVba2V5XSxkZWx0YSk7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gZmFsc2U7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUFtb3VudFN0b3JlKG1ha2VBbW91bnRTdG9yZSk7XG5oYXJkZW4obWFrZUFtb3VudFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBbW91bnRTdG9yZSI6WyJtYWtlQW1vdW50U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6KHdGscFAADHBQAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9kaXNwbGF5SW5mby5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiY29lcmNlRGlzcGxheUluZm8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VEaXNwbGF5SW5mbz0oYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZCk9Pntcbm11c3RNYXRjaChhbGxlZ2VkRGlzcGxheUluZm8sRGlzcGxheUluZm9TaGFwZSwnZGlzcGxheUluZm8nKTtcblxuaWYoYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZCE9PXVuZGVmaW5lZCl7XG5hbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kPT09YXNzZXRLaW5kfHxcbkZhaWwgYGRpc3BsYXlJbmZvLmFzc2V0S2luZCB3YXMgcHJlc2VudCAoJHthbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kfSkgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGFzc2V0S2luZCBhcmd1bWVudCAoJHthc3NldEtpbmR9KWA7XG4gfVxuY29uc3QgZGlzcGxheUluZm89aGFyZGVuKHsuLi5hbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kfSk7XG5cbmlmKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMhPT11bmRlZmluZWQpe1xuTnVtYmVyLmlzU2FmZUludGVnZXIoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyl8fFxuRmFpbCBgZGVjaW1hbFBsYWNlcyAke2Rpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXN9IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmA7XG4gfVxuXG5yZXR1cm4gZGlzcGxheUluZm87XG4gfTskaM2PX29uY2UuY29lcmNlRGlzcGxheUluZm8oY29lcmNlRGlzcGxheUluZm8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29lcmNlRGlzcGxheUluZm8iOlsiY29lcmNlRGlzcGxheUluZm8iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAI44yaj8CAAA/AgAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vYW1vdW50TWF0aC5qc1wiLCBbXV0sW1wiLi9pc3N1ZXJLaXQuanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABolNPJahYAAGoWAAAlAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2lzc3VlcktpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIiwiLi9hbW91bnRNYXRoLmpzIiwiLi9kaXNwbGF5SW5mby5qcyIsIi4vcGF5bWVudExlZGdlci5qcyJdLCJleHBvcnRzIjpbImhhc0lzc3VlciIsIm1ha2VEdXJhYmxlSXNzdWVyS2l0IiwibWFrZUlzc3VlcktpdCIsInByZXBhcmVJc3N1ZXJLaXQiLCJ1cGdyYWRlSXNzdWVyS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLGFzc2VydFBhdHRlcm4sbWFrZVNjYWxhckJpZ01hcFN0b3JlLG1ha2VEdXJhYmxlWm9uZSxBc3NldEtpbmQsYXNzZXJ0QXNzZXRLaW5kLGNvZXJjZURpc3BsYXlJbmZvLHByZXBhcmVQYXltZW50TGVkZ2VyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvbmUvZHVyYWJsZS5qc1wiLCBbW1wibWFrZUR1cmFibGVab25lXCIsIFskaM2PX2EgPT4gKG1ha2VEdXJhYmxlWm9uZSA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKEFzc2V0S2luZCA9ICRozY9fYSldXSxbXCJhc3NlcnRBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QXNzZXRLaW5kID0gJGjNj19hKV1dXV0sW1wiLi9kaXNwbGF5SW5mby5qc1wiLCBbW1wiY29lcmNlRGlzcGxheUluZm9cIiwgWyRozY9fYSA9PiAoY29lcmNlRGlzcGxheUluZm8gPSAkaM2PX2EpXV1dXSxbXCIuL3BheW1lbnRMZWRnZXIuanNcIiwgW1tcInByZXBhcmVQYXltZW50TGVkZ2VyXCIsIFskaM2PX2EgPT4gKHByZXBhcmVQYXltZW50TGVkZ2VyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2V0dXBJc3N1ZXJLaXQ9KFxue25hbWUsYXNzZXRLaW5kLGRpc3BsYXlJbmZvLGVsZW1lbnRTaGFwZX0sXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmFzc2VydEFzc2V0S2luZChhc3NldEtpbmQpO1xuXG4vL1xuY29uc3QgY2xlYW5EaXNwbGF5SW5mbz1jb2VyY2VEaXNwbGF5SW5mbyhkaXNwbGF5SW5mbyxhc3NldEtpbmQpO1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKG9wdFNodXRkb3duV2l0aEZhaWx1cmUsJ2Z1bmN0aW9uJyk7XG4gfVxuXG5pZihlbGVtZW50U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihlbGVtZW50U2hhcGUpO1xuIH1cblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX09cHJlcGFyZVBheW1lbnRMZWRnZXIoXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmNsZWFuRGlzcGxheUluZm8sXG5lbGVtZW50U2hhcGUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYnJhbmQsXG5pc3N1ZXIsXG5taW50LFxubWludFJlY292ZXJ5UHVyc2UsXG5kaXNwbGF5SW5mbzpjbGVhbkRpc3BsYXlJbmZvfSk7XG5cbiB9O1xuaGFyZGVuKHNldHVwSXNzdWVyS2l0KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSU5TVEFOQ0VfS0VZPSdpc3N1ZXInO1xuLypcblxuXG5cbiAqL1xuY29uc3QgUkVDT1ZFUllfU0VUU19TVEFURT0ncmVjb3ZlcnlTZXRzU3RhdGUnO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdXBncmFkZUlzc3VlcktpdD0oXG5pc3N1ZXJCYWdnYWdlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG5yZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkKT0+XG57XG5jb25zdCBpc3N1ZXJSZWNvcmQ9aXNzdWVyQmFnZ2FnZS5nZXQoSU5TVEFOQ0VfS0VZKTtcbmNvbnN0IGlzc3VlclpvbmU9bWFrZUR1cmFibGVab25lKGlzc3VlckJhZ2dhZ2UpO1xuY29uc3Qgb2xkUmVjb3ZlcnlTZXRzU3RhdGU9aXNzdWVyQmFnZ2FnZS5oYXMoUkVDT1ZFUllfU0VUU19TVEFURSk/XG5pc3N1ZXJCYWdnYWdlLmdldChSRUNPVkVSWV9TRVRTX1NUQVRFKTpcbidoYXNSZWNvdmVyeVNldHMnO1xuaWYoXG5vbGRSZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cycmJlxucmVjb3ZlcnlTZXRzT3B0aW9uPT09J2hhc1JlY292ZXJ5U2V0cycpXG57XG5GYWlsIGBDYW5ub3QgKHlldD8pIHVwZ3JhZGUgZnJvbSAnbm9SZWNvdmVyeVNldHMnIHRvICdoYXNSZWNvdmVyeVNldHMnYDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCByZWNvdmVyeVNldHNTdGF0ZT1yZWNvdmVyeVNldHNPcHRpb258fG9sZFJlY292ZXJ5U2V0c1N0YXRlO1xucmV0dXJuIHNldHVwSXNzdWVyS2l0KFxuaXNzdWVyUmVjb3JkLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS51cGdyYWRlSXNzdWVyS2l0KHVwZ3JhZGVJc3N1ZXJLaXQpO1xuaGFyZGVuKHVwZ3JhZGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaGFzSXNzdWVyPShiYWdnYWdlKT0+YmFnZ2FnZS5oYXMoSU5TVEFOQ0VfS0VZKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmhhc0lzc3VlcihoYXNJc3N1ZXIpO1xuY29uc3QgICAgICAgIG1ha2VEdXJhYmxlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxue2VsZW1lbnRTaGFwZT11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGlzc3VlckRhdGE9aGFyZGVuKHtcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZX0pO1xuXG5pc3N1ZXJCYWdnYWdlLmluaXQoSU5TVEFOQ0VfS0VZLGlzc3VlckRhdGEpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCByZWNvdmVyeVNldHNTdGF0ZT1yZWNvdmVyeVNldHNPcHRpb258fCdoYXNSZWNvdmVyeVNldHMnO1xuaXNzdWVyQmFnZ2FnZS5pbml0KFJFQ09WRVJZX1NFVFNfU1RBVEUscmVjb3ZlcnlTZXRzU3RhdGUpO1xucmV0dXJuIHNldHVwSXNzdWVyS2l0KFxuaXNzdWVyRGF0YSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG4gfTskaM2PX29uY2UubWFrZUR1cmFibGVJc3N1ZXJLaXQobWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuaGFyZGVuKG1ha2VEdXJhYmxlSXNzdWVyS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUlzc3VlcktpdD0oXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbm9wdGlvbnM9e30pPT5cbntcbmlmKGhhc0lzc3Vlcihpc3N1ZXJCYWdnYWdlKSl7XG5jb25zdHtlbGVtZW50U2hhcGU6Xz11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgaXNzdWVyS2l0PXVwZ3JhZGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbnJlY292ZXJ5U2V0c09wdGlvbik7XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1lbHNle1xuY29uc3QgaXNzdWVyS2l0PW1ha2VEdXJhYmxlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG5vcHRpb25zKTtcblxucmV0dXJuIGlzc3VlcktpdDtcbiB9XG4gfTskaM2PX29uY2UucHJlcGFyZUlzc3VlcktpdChwcmVwYXJlSXNzdWVyS2l0KTtcbmhhcmRlbihwcmVwYXJlSXNzdWVyS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXNzdWVyS2l0PShcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9PlxuXG5tYWtlRHVyYWJsZUlzc3VlcktpdChcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnZHJvcHBlZCBpc3N1ZXIga2l0Jyx7ZHVyYWJsZTp0cnVlfSksXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxue2VsZW1lbnRTaGFwZSxyZWNvdmVyeVNldHNPcHRpb259KTskaM2PX29uY2UubWFrZUlzc3VlcktpdChtYWtlSXNzdWVyS2l0KTtcblxuaGFyZGVuKG1ha2VJc3N1ZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUlzc3VlcktpdCI6WyJ1cGdyYWRlSXNzdWVyS2l0Il0sImhhc0lzc3VlciI6WyJoYXNJc3N1ZXIiXSwibWFrZUR1cmFibGVJc3N1ZXJLaXQiOlsibWFrZUR1cmFibGVJc3N1ZXJLaXQiXSwicHJlcGFyZUlzc3VlcktpdCI6WyJwcmVwYXJlSXNzdWVyS2l0Il0sIm1ha2VJc3N1ZXJLaXQiOlsibWFrZUlzc3VlcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADkq2Pu4QUAAOEFAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGtleUVRLG1ha2VDb3B5QmFnLG11c3RNYXRjaCxNLGdldENvcHlCYWdFbnRyaWVzLGJhZ0lzU3VwZXJiYWcsYmFnVW5pb24sYmFnRGlzam9pbnRTdWJ0cmFjdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5QmFnXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5QmFnID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjNj19hKV1dLFtcImJhZ0lzU3VwZXJiYWdcIiwgWyRozY9fYSA9PiAoYmFnSXNTdXBlcmJhZyA9ICRozY9fYSldXSxbXCJiYWdVbmlvblwiLCBbJGjNj19hID0+IChiYWdVbmlvbiA9ICRozY9fYSldXSxbXCJiYWdEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGJhZ0Rpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5QmFnKFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weUJhZ01hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooYmFnKT0+e1xubXVzdE1hdGNoKGJhZyxNLmJhZygpLCdiYWcgb2YgYW1vdW50Jyk7XG5yZXR1cm4gYmFnO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGJhZyk9PmdldENvcHlCYWdFbnRyaWVzKGJhZykubGVuZ3RoPT09MCxcbmRvSXNHVEU6YmFnSXNTdXBlcmJhZyxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOmJhZ1VuaW9uLFxuZG9TdWJ0cmFjdDpiYWdEaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLmNvcHlCYWdNYXRoSGVscGVycyhjb3B5QmFnTWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29weUJhZ01hdGhIZWxwZXJzIjpbImNvcHlCYWdNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBhY94nwUAAJ8FAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weVNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGtleUVRLG1ha2VDb3B5U2V0LG11c3RNYXRjaCxNLGdldENvcHlTZXRLZXlzLHNldElzU3VwZXJzZXQsc2V0RGlzam9pbnRVbmlvbixzZXREaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV0sW1wic2V0SXNTdXBlcnNldFwiLCBbJGjNj19hID0+IChzZXRJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcInNldERpc2pvaW50VW5pb25cIiwgWyRozY9fYSA9PiAoc2V0RGlzam9pbnRVbmlvbiA9ICRozY9fYSldXSxbXCJzZXREaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKHNldERpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlTZXQoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvcHlTZXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KHNldCk9Pntcbm11c3RNYXRjaChzZXQsTS5zZXQoKSwnc2V0IG9mIGFtb3VudCcpO1xucmV0dXJuIHNldDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihzZXQpPT5nZXRDb3B5U2V0S2V5cyhzZXQpLmxlbmd0aD09PTAsXG5kb0lzR1RFOnNldElzU3VwZXJzZXQsXG5kb0lzRXF1YWw6a2V5RVEsXG5kb0FkZDpzZXREaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDpzZXREaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLmNvcHlTZXRNYXRoSGVscGVycyhjb3B5U2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29weVNldE1hdGhIZWxwZXJzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACVK3DJZwQAAGcEAAA2AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL25hdCJdLCJleHBvcnRzIjpbIm5hdE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTmF0LGlzTmF0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV0sW1wiaXNOYXRcIiwgWyRozY9fYSA9PiAoaXNOYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgZW1wdHk9MG47XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KG5hdCk9Pntcbi8vXG5hc3NlcnQudHlwZW9mKG5hdCwnYmlnaW50Jyk7XG5pc05hdChuYXQpfHxGYWlsIGB2YWx1ZSAke25hdH0gbXVzdCBiZSBhIG5hdHVyYWwgbnVtYmVyYDtcbnJldHVybiBOYXQobmF0KTtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihuYXQpPT5uYXQ9PT1lbXB0eSxcbmRvSXNHVEU6KGxlZnQscmlnaHQpPT5sZWZ0Pj1yaWdodCxcbmRvSXNFcXVhbDoobGVmdCxyaWdodCk9PmxlZnQ9PT1yaWdodCxcbi8vXG5kb0FkZDoobGVmdCxyaWdodCk9PmxlZnQrcmlnaHQsXG5kb1N1YnRyYWN0OihsZWZ0LHJpZ2h0KT0+TmF0KGxlZnQtcmlnaHQpfSk7JGjNj19vbmNlLm5hdE1hdGhIZWxwZXJzKG5hdE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im5hdE1hdGhIZWxwZXJzIjpbIm5hdE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEcKueNIBgAASAYAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJzZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixhc3NlcnRLZXksZWxlbWVudHNJc1N1cGVyc2V0LGVsZW1lbnRzRGlzam9pbnRVbmlvbixlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QsY29lcmNlVG9FbGVtZW50cyxlbGVtZW50c0NvbXBhcmU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNJc1N1cGVyc2V0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzSXNTdXBlcnNldCA9ICRozY9fYSldXSxbXCJlbGVtZW50c0Rpc2pvaW50VW5pb25cIiwgWyRozY9fYSA9PiAoZWxlbWVudHNEaXNqb2ludFVuaW9uID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QgPSAkaM2PX2EpXV0sW1wiY29lcmNlVG9FbGVtZW50c1wiLCBbJGjNj19hID0+IChjb2VyY2VUb0VsZW1lbnRzID0gJGjNj19hKV1dLFtcImVsZW1lbnRzQ29tcGFyZVwiLCBbJGjNj19hID0+IChlbGVtZW50c0NvbXBhcmUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1oYXJkZW4oW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobGlzdCk9Pntcbmxpc3Q9Y29lcmNlVG9FbGVtZW50cyhsaXN0KTtcbi8vXG4vL1xuLy9cbi8vXG5hc3NlcnRLZXkobGlzdCk7XG5yZXR1cm4gbGlzdDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihsaXN0KT0+cGFzc1N0eWxlT2YobGlzdCk9PT0nY29weUFycmF5JyYmbGlzdC5sZW5ndGg9PT0wLFxuZG9Jc0dURTplbGVtZW50c0lzU3VwZXJzZXQsXG5kb0lzRXF1YWw6KHgseSk9PmVsZW1lbnRzQ29tcGFyZSh4LHkpPT09MCxcbmRvQWRkOmVsZW1lbnRzRGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6ZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0fSk7JGjNj19vbmNlLnNldE1hdGhIZWxwZXJzKHNldE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNldE1hdGhIZWxwZXJzIjpbInNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADY/StV/AwAAfwMAACMAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsicHJlcGFyZVBheW1lbnRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGluaXRFbXB0eTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVBheW1lbnRLaW5kPShpc3N1ZXJab25lLG5hbWUsYnJhbmQsUGF5bWVudEkpPT57XG5jb25zdCBtYWtlUGF5bWVudD1pc3N1ZXJab25lLmV4b0NsYXNzKFxuIGAke25hbWV9IHBheW1lbnRgLFxuUGF5bWVudEksXG5pbml0RW1wdHksXG57XG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9fSk7XG5cblxucmV0dXJuIG1ha2VQYXltZW50O1xuIH07JGjNj19vbmNlLnByZXBhcmVQYXltZW50S2luZChwcmVwYXJlUGF5bWVudEtpbmQpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUGF5bWVudEtpbmQiOlsicHJlcGFyZVBheW1lbnRLaW5kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEstp/vrHwAA6x8AACkAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudExlZGdlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc3RvcmUiLCIuL2Ftb3VudE1hdGguanMiLCIuL3BheW1lbnQuanMiLCIuL3B1cnNlLmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEZhaWwsYW5ub3RhdGVFcnJvcixpc1Byb21pc2UsbXVzdE1hdGNoLE0sa2V5RVEsQW1vdW50TWF0aCxwcmVwYXJlUGF5bWVudEtpbmQscHJlcGFyZVB1cnNlS2luZCxCcmFuZEksbWFrZUlzc3VlckludGVyZmFjZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIi4vcGF5bWVudC5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRLaW5kXCIsIFskaM2PX2EgPT4gKHByZXBhcmVQYXltZW50S2luZCA9ICRozY9fYSldXV1dLFtcIi4vcHVyc2UuanNcIiwgW1tcInByZXBhcmVQdXJzZUtpbmRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVB1cnNlS2luZCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQnJhbmRJXCIsIFskaM2PX2EgPT4gKEJyYW5kSSA9ICRozY9fYSldXSxbXCJtYWtlSXNzdWVySW50ZXJmYWNlc1wiLCBbJGjNj19hID0+IChtYWtlSXNzdWVySW50ZXJmYWNlcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGU9KGJyYW5kLGFzc2V0S2luZCxlbGVtZW50U2hhcGUpPT57XG5sZXQgdmFsdWVTaGFwZTtcbnN3aXRjaChhc3NldEtpbmQpe1xuY2FzZSduYXQnOntcbnZhbHVlU2hhcGU9TS5uYXQoKTtcbmVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBGdW5naWJsZSBhc3NldHMgY2Fubm90IGhhdmUgYW4gZWxlbWVudFNoYXBlOiAke3EoZWxlbWVudFNoYXBlKX1gO1xuYnJlYWs7XG4gfVxuY2FzZSdzZXQnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmtleSgpKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5hcnJheU9mKE0uYW5kKE0ua2V5KCksZWxlbWVudFNoYXBlKSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5U2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLnNldCgpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLnNldE9mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmJhZygpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLmJhZ09mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5GYWlsIGB1bmV4cGVjdGVkIGFzc2V0IGtpbmQgJHtxKGFzc2V0S2luZCl9YDtcbiB9fVxuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWhhcmRlbih7XG5icmFuZCwvL1xudmFsdWU6dmFsdWVTaGFwZX0pO1xuXG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50TGVkZ2VyPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5lbGVtZW50U2hhcGUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGJyYW5kPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBicmFuZGAsQnJhbmRJLHtcbmlzTXlJc3N1ZXIoYWxsZWdlZElzc3Vlcil7XG4vL1xucmV0dXJuIGFsbGVnZWRJc3N1ZXI9PT1pc3N1ZXI7XG4gfSxcbmdldEFsbGVnZWROYW1lKCl7XG5yZXR1cm4gbmFtZTtcbiB9LFxuLy9cbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbmdldEFtb3VudFNoYXBlKCl7XG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfX0pO1xuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWFtb3VudFNoYXBlRnJvbUVsZW1lbnRTaGFwZShcbmJyYW5kLFxuYXNzZXRLaW5kLFxuZWxlbWVudFNoYXBlKTtcblxuXG5jb25zdHtJc3N1ZXJJLE1pbnRJLFBheW1lbnRJLFB1cnNlSUtpdH09bWFrZUlzc3VlckludGVyZmFjZXMoXG5icmFuZCxcbmFzc2V0S2luZCxcbmFtb3VudFNoYXBlKTtcblxuXG5jb25zdCBtYWtlUGF5bWVudD1wcmVwYXJlUGF5bWVudEtpbmQoaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZT0ocmVhc29uKT0+e1xuLy9cbi8vXG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbnRyeXtcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUocmVhc29uKTtcbiB9Y2F0Y2goZXJySW5TaHV0ZG93bil7XG5hbm5vdGF0ZUVycm9yKGVyckluU2h1dGRvd24sWCBgQ2F1c2VkIGJ5OiAke3JlYXNvbn1gKTtcbnRocm93IGVyckluU2h1dGRvd247XG4gfVxuIH1cbnRocm93IHJlYXNvbjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudExlZGdlcj1pc3N1ZXJab25lLndlYWtNYXBTdG9yZSgncGF5bWVudExlZGdlcicse1xudmFsdWVTaGFwZTphbW91bnRTaGFwZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBheW1lbnRSZWNvdmVyeVNldHM9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRSZWNvdmVyeVNldHMnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbml0UGF5bWVudD0ocGF5bWVudCxhbW91bnQsb3B0UmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnKXtcbm9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkfHxcbkZhaWwgYHdoZW4gcmVjb3ZlclNldHNTdGF0ZSA9PT0gJ25vUmVjb3ZlcnlTZXRzJywgb3B0UmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG4gfVxuaWYob3B0UmVjb3ZlcnlTZXQhPT11bmRlZmluZWQmJiFBbW91bnRNYXRoLmlzRW1wdHkoYW1vdW50KSl7XG5vcHRSZWNvdmVyeVNldC5hZGQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmluaXQocGF5bWVudCxvcHRSZWNvdmVyeVNldCk7XG4gfVxucGF5bWVudExlZGdlci5pbml0KHBheW1lbnQsYW1vdW50KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVsZXRlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuZGVsZXRlKHBheW1lbnQpO1xuaWYocGF5bWVudFJlY292ZXJ5U2V0cy5oYXMocGF5bWVudCkpe1xuY29uc3QgcmVjb3ZlcnlTZXQ9cGF5bWVudFJlY292ZXJ5U2V0cy5nZXQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmRlbGV0ZShwYXltZW50KTtcbnJlY292ZXJ5U2V0LmRlbGV0ZShwYXltZW50KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb2VyY2U9KGFsbGVnZWRBbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbGxlZ2VkQW1vdW50KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRBbW91bnRDb25zaXN0ZW50PShwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk9PntcbmlmKG9wdEFtb3VudFNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSwnYW1vdW50Jyk7XG4gfVxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydExpdmVQYXltZW50PShwYXltZW50KT0+e1xucGF5bWVudExlZGdlci5oYXMocGF5bWVudCl8fFxuRmFpbCBgJHtwYXltZW50fSB3YXMgbm90IGEgbGl2ZSBwYXltZW50IGZvciBicmFuZCAke3EoXG5icmFuZClcbiB9LiBJdCBjb3VsZCBiZSBhIHVzZWQtdXAgcGF5bWVudCwgYSBwYXltZW50IGZvciBhbm90aGVyIGJyYW5kLCBvciBpdCBtaWdodCBub3QgYmUgYSBwYXltZW50IGF0IGFsbC5gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVwb3NpdEludGVybmFsPShcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZT11bmRlZmluZWQpPT5cbntcbiFpc1Byb21pc2Uoc3JjUGF5bWVudCl8fFxuYXNzZXJ0LmZhaWwoXG4gYGRlcG9zaXQgZG9lcyBub3QgYWNjZXB0IHByb21pc2VzIGFzIGZpcnN0IGFyZ3VtZW50LiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIHByb21pc2UgKGRlcG9zaXQocGF5bWVudFByb21pc2UpKSwgY29uc2lkZXIgdW53cmFwcGluZyB0aGUgcHJvbWlzZSBmaXJzdDogRS53aGVuKHBheW1lbnRQcm9taXNlLCAoYWN0dWFsUGF5bWVudCA9PiBkZXBvc2l0KGFjdHVhbFBheW1lbnQpKWAsXG5UeXBlRXJyb3IpO1xuXG5hc3NlcnRMaXZlUGF5bWVudChzcmNQYXltZW50KTtcbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPXBheW1lbnRMZWRnZXIuZ2V0KHNyY1BheW1lbnQpO1xuYXNzZXJ0QW1vdW50Q29uc2lzdGVudChzcmNQYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk7XG50cnl7XG4vL1xuLy9cbi8vXG5kZWxldGVQYXltZW50KHNyY1BheW1lbnQpO1xuYmFsYW5jZVN0b3JlLmluY3JlbWVudChzcmNQYXltZW50QmFsYW5jZSk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd2l0aGRyYXdJbnRlcm5hbD0oYmFsYW5jZVN0b3JlLGFtb3VudCxyZWNvdmVyeVNldD11bmRlZmluZWQpPT57XG5hbW91bnQ9Y29lcmNlKGFtb3VudCk7XG5jb25zdCBwYXltZW50PW1ha2VQYXltZW50KCk7XG4vL1xuLy9cbmJhbGFuY2VTdG9yZS5kZWNyZW1lbnQoYW1vdW50KXx8XG5GYWlsIGBXaXRoZHJhd2FsIG9mICR7YW1vdW50fSBmYWlsZWQgYmVjYXVzZSB0aGUgcHVyc2Ugb25seSBjb250YWluZWQgJHtiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCl9YDtcbnRyeXtcbmluaXRQYXltZW50KHBheW1lbnQsYW1vdW50LHJlY292ZXJ5U2V0KTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gcGF5bWVudDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG1ha2VFbXB0eVB1cnNlPXByZXBhcmVQdXJzZUtpbmQoXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmJyYW5kLFxuUHVyc2VJS2l0LFxuaGFyZGVuKHtcbmRlcG9zaXRJbnRlcm5hbCxcbndpdGhkcmF3SW50ZXJuYWx9KSxcblxucmVjb3ZlcnlTZXRzU3RhdGUsXG5wYXltZW50UmVjb3ZlcnlTZXRzKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBpc3N1ZXI9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IGlzc3VlcmAsSXNzdWVySSx7XG5nZXRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbmdldEFzc2V0S2luZCgpe1xucmV0dXJuIGFzc2V0S2luZDtcbiB9LFxuZ2V0RGlzcGxheUluZm8oKXtcbnJldHVybiBkaXNwbGF5SW5mbztcbiB9LFxubWFrZUVtcHR5UHVyc2UoKXtcbnJldHVybiBtYWtlRW1wdHlQdXJzZSgpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmlzTGl2ZShwYXltZW50KXtcbi8vXG5yZXR1cm4gcGF5bWVudExlZGdlci5oYXMocGF5bWVudCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0QW1vdW50T2YocGF5bWVudCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5yZXR1cm4gcGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuYnVybihwYXltZW50LG9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5jb25zdCBwYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChwYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbmRlbGV0ZVBheW1lbnQocGF5bWVudCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnRCYWxhbmNlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZT0vKiAgICAgICAgICAgICAgICAgICAqL1xuaXNzdWVyWm9uZS5tYWtlT25jZSgnbWludFJlY292ZXJ5UHVyc2UnLCgpPT5tYWtlRW1wdHlQdXJzZSgpKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtaW50PWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBtaW50YCxNaW50SSx7XG5nZXRJc3N1ZXIoKXtcbnJldHVybiBpc3N1ZXI7XG4gfSxcbm1pbnRQYXltZW50KG5ld0Ftb3VudCl7XG5uZXdBbW91bnQ9Y29lcmNlKG5ld0Ftb3VudCk7XG5tdXN0TWF0Y2gobmV3QW1vdW50LGFtb3VudFNoYXBlLCdtaW50ZWQgYW1vdW50Jyk7XG4vL1xuLy9cbmNvbnN0IHJhd1BheW1lbnQ9bWFrZVBheW1lbnQoKTtcbmluaXRQYXltZW50KHJhd1BheW1lbnQsbmV3QW1vdW50LHVuZGVmaW5lZCk7XG5cbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlPW1pbnRSZWNvdmVyeVB1cnNlLmdldEN1cnJlbnRBbW91bnQoKTtcbm1pbnRSZWNvdmVyeVB1cnNlLmRlcG9zaXQocmF3UGF5bWVudCxuZXdBbW91bnQpO1xuY29uc3QgcGF5bWVudD1taW50UmVjb3ZlcnlQdXJzZS53aXRoZHJhdyhuZXdBbW91bnQpO1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2VBZnRlcj1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5hc3NlcnQoa2V5RVEobWludFJlY292ZXJ5UHVyc2VCZWZvcmUsbWludFJlY292ZXJ5UHVyc2VBZnRlcikpO1xucmV0dXJuIHBheW1lbnQ7XG4gfX0pO1xuXG5cbmNvbnN0IGlzc3VlcktpdD1oYXJkZW4oe2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfSk7XG5yZXR1cm4gaXNzdWVyS2l0O1xuIH07JGjNj19vbmNlLnByZXBhcmVQYXltZW50TGVkZ2VyKHByZXBhcmVQYXltZW50TGVkZ2VyKTtcbmhhcmRlbihwcmVwYXJlUGF5bWVudExlZGdlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUGF5bWVudExlZGdlciI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAdxNEKuhAAALoQAAAhAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3B1cnNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL2Ftb3VudE1hdGguanMiLCIuL3RyYW5zaWVudE5vdGlmaWVyLmpzIiwiLi9hbW91bnRTdG9yZS5qcyJdLCJleHBvcnRzIjpbInByZXBhcmVQdXJzZUtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxNLG1ha2VDb3B5U2V0LEFtb3VudE1hdGgsbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0LG1ha2VBbW91bnRTdG9yZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCIuL3RyYW5zaWVudE5vdGlmaWVyLmpzXCIsIFtbXCJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRTdG9yZS5qc1wiLCBbW1wibWFrZUFtb3VudFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VBbW91bnRTdG9yZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgRU1QVFlfQ09QWV9TRVQ9bWFrZUNvcHlTZXQoW10pO1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUHVyc2VLaW5kPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuYnJhbmQsXG5QdXJzZUlLaXQsXG5wdXJzZU1ldGhvZHMsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbnBheW1lbnRSZWNvdmVyeVNldHMpPT5cbntcbmNvbnN0IGFtb3VudFNoYXBlPWJyYW5kLmdldEFtb3VudFNoYXBlKCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0e3Byb3ZpZGVOb3RpZmllcix1cGRhdGU6dXBkYXRlQmFsYW5jZX09bWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlY292ZXJ5U2V0PShzdGF0ZSk9PntcbmNvbnN0e3JlY292ZXJ5U2V0fT1zdGF0ZTtcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J2hhc1JlY292ZXJ5U2V0cycpe1xucmV0dXJuIHJlY292ZXJ5U2V0O1xuIH1lbHNle1xucmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnfHxcbkZhaWwgYHJlY292ZXJTZXRzU3RhdGUgbXVzdCBiZSBub1JlY292ZXJ5U2V0cyBpZiBpdCBpc24ndCBoYXNSZWNvdmVyU2V0c2A7XG5wYXltZW50UmVjb3ZlcnlTZXRzIT09dW5kZWZpbmVkfHxcbkZhaWwgYHBheW1lbnRSZWNvdmVyeVNldHMgbXVzdCBhbHdheXMgYmUgZGVmaW5lZGA7XG5yZWNvdmVyeVNldC5nZXRTaXplKCk9PT0wfHxcbkZhaWwgYFdpdGggbm9SZWNvdmVyeVNldHMsIHJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdHtkZXBvc2l0SW50ZXJuYWwsd2l0aGRyYXdJbnRlcm5hbH09cHVyc2VNZXRob2RzO1xuY29uc3QgbWFrZVB1cnNlS2l0PWlzc3VlclpvbmUuZXhvQ2xhc3NLaXQoXG4gYCR7bmFtZX0gUHVyc2VgLFxuUHVyc2VJS2l0LFxuKCk9PntcbmNvbnN0IGN1cnJlbnRCYWxhbmNlPUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvdmVyeVNldD1pc3N1ZXJab25lLmRldGFjaGVkKCkuc2V0U3RvcmUoJ3JlY292ZXJ5IHNldCcpO1xuXG5yZXR1cm57XG5jdXJyZW50QmFsYW5jZSxcbnJlY292ZXJ5U2V0fTtcblxuIH0sXG57XG5wdXJzZTp7XG5kZXBvc2l0KHNyY1BheW1lbnQsb3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKXtcbi8vXG4vL1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xuLy9cbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPWRlcG9zaXRJbnRlcm5hbChcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZSk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9LFxud2l0aGRyYXcoYW1vdW50KXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7cHVyc2V9PXRoaXMuZmFjZXRzO1xuXG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3QgcGF5bWVudD13aXRoZHJhd0ludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuYW1vdW50LFxub3B0UmVjb3ZlcnlTZXQpO1xuXG51cGRhdGVCYWxhbmNlKHB1cnNlLGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKSk7XG5yZXR1cm4gcGF5bWVudDtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xucmV0dXJuIGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKTtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyKCl7XG5yZXR1cm4gcHJvdmlkZU5vdGlmaWVyKHRoaXMuZmFjZXRzLnB1cnNlKTtcbiB9LFxuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfSxcblxuZ2V0RGVwb3NpdEZhY2V0KCl7XG5yZXR1cm4gdGhpcy5mYWNldHMuZGVwb3NpdEZhY2V0O1xuIH0sXG5cbmdldFJlY292ZXJ5U2V0KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIEVNUFRZX0NPUFlfU0VUO1xuIH1cbnJldHVybiBvcHRSZWNvdmVyeVNldC5zbmFwc2hvdCgpO1xuIH0sXG5yZWNvdmVyQWxsKCl7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5sZXQgYW1vdW50PUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmlmKG9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkKXtcbnJldHVybiBhbW91bnQ7Ly9cbiB9XG5mb3IoY29uc3QgcGF5bWVudCBvZiBvcHRSZWNvdmVyeVNldC5rZXlzKCkpe1xuLy9cbi8vXG5jb25zdCBkZWx0YT1mYWNldHMucHVyc2UuZGVwb3NpdChwYXltZW50KTtcbmFtb3VudD1BbW91bnRNYXRoLmFkZChhbW91bnQsZGVsdGEsYnJhbmQpO1xuIH1cbm9wdFJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgaW50ZXJuYWw6IFJlbWFpbmluZyB1bnJlY292ZXJlZCBwYXltZW50czogJHtmYWNldHMucHVyc2UuZ2V0UmVjb3ZlcnlTZXQoKX1gO1xucmV0dXJuIGFtb3VudDtcbiB9fSxcblxuZGVwb3NpdEZhY2V0OntcbnJlY2VpdmUoLi4uYXJncyl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVyc2UuZGVwb3NpdCguLi5hcmdzKTtcbiB9fX0sXG5cblxue1xuc3RhdGVTaGFwZTp7XG5jdXJyZW50QmFsYW5jZTphbW91bnRTaGFwZSxcbnJlY292ZXJ5U2V0Ok0ucmVtb3RhYmxlKCdyZWNvdmVyeVNldCcpfX0pO1xuXG5cblxucmV0dXJuKCk9Pm1ha2VQdXJzZUtpdCgpLnB1cnNlO1xuIH07JGjNj19vbmNlLnByZXBhcmVQdXJzZUtpbmQocHJlcGFyZVB1cnNlS2luZCk7XG5oYXJkZW4ocHJlcGFyZVB1cnNlS2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUHVyc2VLaW5kIjpbInByZXBhcmVQdXJzZUtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAipljyNYFAADWBQAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90cmFuc2llbnROb3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvbm90aWZpZXIiXSwiZXhwb3J0cyI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxwcm92aWRlTGF6eSxtYWtlTm90aWZpZXJLaXQ7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjNj19hID0+IChwcm92aWRlTGF6eSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VUcmFuc2llbnROb3RpZmllcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdHJhbnNpZW50Tm90aWZlcktpdHM9bWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShcbid0cmFuc2llbnROb3RpZmVyS2l0cycpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcktpdD0oa2V5KT0+XG5wcm92aWRlTGF6eSh0cmFuc2llbnROb3RpZmVyS2l0cyxrZXksKCk9PlxubWFrZU5vdGlmaWVyS2l0KGtleS5nZXRDdXJyZW50QW1vdW50KCkpKTtcblxuXG5jb25zdCBwcm92aWRlTm90aWZpZXI9KGtleSk9PnByb3ZpZGVOb3RpZmllcktpdChrZXkpLm5vdGlmaWVyO1xuY29uc3QgdXBkYXRlPShrZXksbmV3VmFsdWUpPT57XG5pZih0cmFuc2llbnROb3RpZmVyS2l0cy5oYXMoa2V5KSl7XG5jb25zdHt1cGRhdGVyfT10cmFuc2llbnROb3RpZmVyS2l0cy5nZXQoa2V5KTtcbnVwZGF0ZXIudXBkYXRlU3RhdGUobmV3VmFsdWUpO1xuIH1cbiB9O1xuXG5yZXR1cm57cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZX07XG4gfTskaM2PX29uY2UubWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KG1ha2VUcmFuc2llbnROb3RpZmllcktpdCk7XG5oYXJkZW4obWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUcmFuc2llbnROb3RpZmllcktpdCI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEjBwTswYAADMGAAAJgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiQW1vdW50UGF0dGVyblNoYXBlIiwiQW1vdW50U2hhcGUiLCJBc3NldEtpbmRTaGFwZSIsIkJyYW5kSSIsIkJyYW5kU2hhcGUiLCJEZXBvc2l0RmFjZXRTaGFwZSIsIkRpc3BsYXlJbmZvU2hhcGUiLCJJc3N1ZXJLaXRTaGFwZSIsIklzc3VlclNoYXBlIiwiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIiwiTWludFNoYXBlIiwiTm90aWZpZXJTaGFwZSIsIlBheW1lbnRTaGFwZSIsIlB1cnNlU2hhcGUiLCJSYXRpb1NoYXBlIiwiaXNDb3B5QmFnVmFsdWUiLCJpc0NvcHlTZXRWYWx1ZSIsImlzTmF0VmFsdWUiLCJpc1NldFZhbHVlIiwibWFrZUlzc3VlckludGVyZmFjZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBCcmFuZFNoYXBlPU0ucmVtb3RhYmxlKCdCcmFuZCcpOyRozY9fb25jZS5CcmFuZFNoYXBlKEJyYW5kU2hhcGUpO1xuY29uc3QgICAgICAgIElzc3VlclNoYXBlPU0ucmVtb3RhYmxlKCdJc3N1ZXInKTskaM2PX29uY2UuSXNzdWVyU2hhcGUoSXNzdWVyU2hhcGUpO1xuY29uc3QgICAgICAgIFBheW1lbnRTaGFwZT1NLnJlbW90YWJsZSgnUGF5bWVudCcpOyRozY9fb25jZS5QYXltZW50U2hhcGUoUGF5bWVudFNoYXBlKTtcbmNvbnN0ICAgICAgICBQdXJzZVNoYXBlPU0ucmVtb3RhYmxlKCdQdXJzZScpOyRozY9fb25jZS5QdXJzZVNoYXBlKFB1cnNlU2hhcGUpO1xuY29uc3QgICAgICAgIERlcG9zaXRGYWNldFNoYXBlPU0ucmVtb3RhYmxlKCdEZXBvc2l0RmFjZXQnKTskaM2PX29uY2UuRGVwb3NpdEZhY2V0U2hhcGUoRGVwb3NpdEZhY2V0U2hhcGUpO1xuY29uc3QgICAgICAgIE5vdGlmaWVyU2hhcGU9TS5yZW1vdGFibGUoJ05vdGlmaWVyJyk7JGjNj19vbmNlLk5vdGlmaWVyU2hhcGUoTm90aWZpZXJTaGFwZSk7XG5jb25zdCAgICAgICAgTWludFNoYXBlPU0ucmVtb3RhYmxlKCdNaW50Jyk7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5NaW50U2hhcGUoTWludFNoYXBlKTtcbmNvbnN0IE5hdFZhbHVlU2hhcGU9TS5uYXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IENvcHlTZXRWYWx1ZVNoYXBlPU0uc2V0KCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBTZXRWYWx1ZVNoYXBlPU0uYXJyYXlPZihNLmtleSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weUJhZ1ZhbHVlU2hhcGU9TS5iYWcoKTtcblxuY29uc3QgQW1vdW50VmFsdWVTaGFwZT1NLm9yKFxuTmF0VmFsdWVTaGFwZSxcbkNvcHlTZXRWYWx1ZVNoYXBlLFxuU2V0VmFsdWVTaGFwZSxcbkNvcHlCYWdWYWx1ZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgQW1vdW50U2hhcGU9e2JyYW5kOkJyYW5kU2hhcGUsdmFsdWU6QW1vdW50VmFsdWVTaGFwZX07JGjNj19vbmNlLkFtb3VudFNoYXBlKEFtb3VudFNoYXBlKTtcbmhhcmRlbihBbW91bnRTaGFwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBBbW91bnRQYXR0ZXJuU2hhcGU9TS5wYXR0ZXJuKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuQW1vdW50UGF0dGVyblNoYXBlKEFtb3VudFBhdHRlcm5TaGFwZSk7XG5jb25zdCAgICAgICAgUmF0aW9TaGFwZT17bnVtZXJhdG9yOkFtb3VudFNoYXBlLGRlbm9taW5hdG9yOkFtb3VudFNoYXBlfTskaM2PX29uY2UuUmF0aW9TaGFwZShSYXRpb1NoYXBlKTtcbmhhcmRlbihSYXRpb1NoYXBlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNOYXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLE5hdFZhbHVlU2hhcGUpOyRozY9fb25jZS5pc05hdFZhbHVlKGlzTmF0VmFsdWUpO1xuaGFyZGVuKGlzTmF0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLENvcHlTZXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNDb3B5U2V0VmFsdWUoaXNDb3B5U2V0VmFsdWUpO1xuaGFyZGVuKGlzQ29weVNldFZhbHVlKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTZXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLFNldFZhbHVlU2hhcGUpOyRozY9fb25jZS5pc1NldFZhbHVlKGlzU2V0VmFsdWUpO1xuaGFyZGVuKGlzU2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlCYWdWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLENvcHlCYWdWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNDb3B5QmFnVmFsdWUoaXNDb3B5QmFnVmFsdWUpO1xuaGFyZGVuKGlzQ29weUJhZ1ZhbHVlKTtcblxuLy9cbmNvbnN0ICAgICAgICBNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVM9MTAwOyRozY9fb25jZS5NQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMoTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKTtcblxuY29uc3QgICAgICAgIEFzc2V0S2luZFNoYXBlPU0ub3IoJ25hdCcsJ3NldCcsJ2NvcHlTZXQnLCdjb3B5QmFnJyk7JGjNj19vbmNlLkFzc2V0S2luZFNoYXBlKEFzc2V0S2luZFNoYXBlKTtcblxuY29uc3QgICAgICAgIERpc3BsYXlJbmZvU2hhcGU9TS5zcGxpdFJlY29yZChcbnt9LFxue1xuZGVjaW1hbFBsYWNlczpNLmFuZChcbk0uZ3RlKC1NQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpLFxuTS5sdGUoTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKSksXG5cbmFzc2V0S2luZDpBc3NldEtpbmRTaGFwZX0sXG5cbntcbi8vXG4vL1xufSk7JGjNj19vbmNlLkRpc3BsYXlJbmZvU2hhcGUoRGlzcGxheUluZm9TaGFwZSk7XG5cblxuY29uc3QgICAgICAgIElzc3VlcktpdFNoYXBlPXtcbmJyYW5kOkJyYW5kU2hhcGUsXG5taW50Ok1pbnRTaGFwZSxcbm1pbnRSZWNvdmVyeVB1cnNlOlB1cnNlU2hhcGUsXG5pc3N1ZXI6SXNzdWVyU2hhcGUsXG5kaXNwbGF5SW5mbzpEaXNwbGF5SW5mb1NoYXBlfTskaM2PX29uY2UuSXNzdWVyS2l0U2hhcGUoSXNzdWVyS2l0U2hhcGUpO1xuXG5oYXJkZW4oSXNzdWVyS2l0U2hhcGUpO1xuXG4vL1xuXG5jb25zdCAgICAgICAgQnJhbmRJPU0uaW50ZXJmYWNlKCdCcmFuZCcse1xuaXNNeUlzc3VlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSXNzdWVyU2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxuZ2V0QW1vdW50U2hhcGU6TS5jYWxsKCkucmV0dXJucyhNLnBhdHRlcm4oKSl9KTtcblxuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLkJyYW5kSShCcmFuZEkpO1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJJbnRlcmZhY2VzPShcbmJyYW5kU2hhcGU9QnJhbmRTaGFwZSxcbmFzc2V0S2luZFNoYXBlPUFzc2V0S2luZFNoYXBlLFxuYW1vdW50U2hhcGU9QW1vdW50U2hhcGUpPT5cbntcbmNvbnN0IElzc3Vlckk9TS5pbnRlcmZhY2UoJ0lzc3Vlcicse1xuZ2V0QnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXRBc3NldEtpbmQ6TS5jYWxsKCkucmV0dXJucyhhc3NldEtpbmRTaGFwZSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxubWFrZUVtcHR5UHVyc2U6TS5jYWxsKCkucmV0dXJucyhQdXJzZVNoYXBlKSxcblxuaXNMaXZlOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFtb3VudE9mOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmJ1cm46TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgTWludEk9TS5pbnRlcmZhY2UoJ01pbnQnLHtcbmdldElzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcbm1pbnRQYXltZW50Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpfSk7XG5cblxuY29uc3QgUGF5bWVudEk9TS5pbnRlcmZhY2UoJ1BheW1lbnQnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpfSk7XG5cblxuY29uc3QgUHVyc2VJPU0uaW50ZXJmYWNlKCdQdXJzZScse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Ok0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyOk0uY2FsbCgpLnJldHVybnMoTm90aWZpZXJTaGFwZSksXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZGVwb3NpdDpNLmNhbGwoUGF5bWVudFNoYXBlKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldERlcG9zaXRGYWNldDpNLmNhbGwoKS5yZXR1cm5zKERlcG9zaXRGYWNldFNoYXBlKSxcbndpdGhkcmF3Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpLFxuZ2V0UmVjb3ZlcnlTZXQ6TS5jYWxsKCkucmV0dXJucyhNLnNldE9mKFBheW1lbnRTaGFwZSkpLFxucmVjb3ZlckFsbDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IERlcG9zaXRGYWNldEk9TS5pbnRlcmZhY2UoJ0RlcG9zaXRGYWNldCcse1xucmVjZWl2ZTpnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoUHVyc2VJKS5tZXRob2RHdWFyZHMuZGVwb3NpdH0pO1xuXG5cbmNvbnN0IFB1cnNlSUtpdD17XG5wdXJzZTpQdXJzZUksXG5kZXBvc2l0RmFjZXQ6RGVwb3NpdEZhY2V0SX07XG5cbmhhcmRlbihQdXJzZUlLaXQpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbklzc3VlckksXG5NaW50SSxcblBheW1lbnRJLFxuUHVyc2VJS2l0fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSXNzdWVySW50ZXJmYWNlcyhtYWtlSXNzdWVySW50ZXJmYWNlcyk7XG5oYXJkZW4obWFrZUlzc3VlckludGVyZmFjZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJhbmRTaGFwZSI6WyJCcmFuZFNoYXBlIl0sIklzc3VlclNoYXBlIjpbIklzc3VlclNoYXBlIl0sIlBheW1lbnRTaGFwZSI6WyJQYXltZW50U2hhcGUiXSwiUHVyc2VTaGFwZSI6WyJQdXJzZVNoYXBlIl0sIkRlcG9zaXRGYWNldFNoYXBlIjpbIkRlcG9zaXRGYWNldFNoYXBlIl0sIk5vdGlmaWVyU2hhcGUiOlsiTm90aWZpZXJTaGFwZSJdLCJNaW50U2hhcGUiOlsiTWludFNoYXBlIl0sIkFtb3VudFNoYXBlIjpbIkFtb3VudFNoYXBlIl0sIkFtb3VudFBhdHRlcm5TaGFwZSI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiXSwiUmF0aW9TaGFwZSI6WyJSYXRpb1NoYXBlIl0sImlzTmF0VmFsdWUiOlsiaXNOYXRWYWx1ZSJdLCJpc0NvcHlTZXRWYWx1ZSI6WyJpc0NvcHlTZXRWYWx1ZSJdLCJpc1NldFZhbHVlIjpbImlzU2V0VmFsdWUiXSwiaXNDb3B5QmFnVmFsdWUiOlsiaXNDb3B5QmFnVmFsdWUiXSwiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIjpbIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyJdLCJBc3NldEtpbmRTaGFwZSI6WyJBc3NldEtpbmRTaGFwZSJdLCJEaXNwbGF5SW5mb1NoYXBlIjpbIkRpc3BsYXlJbmZvU2hhcGUiXSwiSXNzdWVyS2l0U2hhcGUiOlsiSXNzdWVyS2l0U2hhcGUiXSwiQnJhbmRJIjpbIkJyYW5kSSJdLCJtYWtlSXNzdWVySW50ZXJmYWNlcyI6WyJtYWtlSXNzdWVySW50ZXJmYWNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABW0VcR6RkAAOkZAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NhbGxiYWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhbGxFIiwiY2FsbFN5bmMiLCJpc0NhbGxiYWNrIiwibWFrZUZ1bmN0aW9uQ2FsbGJhY2siLCJtYWtlTWV0aG9kQ2FsbGJhY2siLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIiwicHJlcGFyZUF0dGVudWF0b3IiLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlRXJyb3IscSxFLGlzT2JqZWN0LGlzUGFzc2FibGVTeW1ib2wsZ2V0SW50ZXJmYWNlTWV0aG9kS2V5czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1Bhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGlzUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5c1wiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VNZXRob2RLZXlzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0e293bktleXM6cmF3T3duS2V5c309UmVmbGVjdDtcbmNvbnN0IG93bktleXM9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmF3T3duS2V5cztcblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNQcm9wZXJ0eUtleT0oa2V5KT0+e1xuc3dpdGNoKHR5cGVvZiBrZXkpe1xuY2FzZSdzdHJpbmcnOlxuY2FzZSdudW1iZXInOlxuY2FzZSdzeW1ib2wnOlxucmV0dXJuIHRydWU7XG5kZWZhdWx0OlxucmV0dXJuIGZhbHNlO31cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsU3luYz0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHRhcmdldCguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjNj19vbmNlLmNhbGxTeW5jKGNhbGxTeW5jKTtcbmhhcmRlbihjYWxsU3luYyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsRT0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIEUodGFyZ2V0KSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gRSh0YXJnZXQpW21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjNj19vbmNlLmNhbGxFKGNhbGxFKTtcbmhhcmRlbihjYWxsRSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG50eXBlb2YgdGFyZ2V0PT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBzeW5jIGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb246ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHByZXNlbmNlOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmR9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZUZ1bmN0aW9uQ2FsbGJhY2sobWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBzeW5jIG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZVN5bmNNZXRob2RDYWxsYmFjayhtYWtlU3luY01ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY01ldGhvZENhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxGYWlsIGBtZXRob2QgY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0OiAke3RhcmdldH1gO1xudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpfHxcbkZhaWwgYG1ldGhvZCBuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgcGFzc2FibGUgc3ltYm9sOiAke21ldGhvZE5hbWV9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaM2PX29uY2UubWFrZU1ldGhvZENhbGxiYWNrKG1ha2VNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZU1ldGhvZENhbGxiYWNrKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NhbGxiYWNrPShjYWxsYmFjayk9PntcbmlmKCFpc09iamVjdChjYWxsYmFjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbnJldHVybihcbmlzT2JqZWN0KHRhcmdldCkmJihcbm1ldGhvZE5hbWU9PT11bmRlZmluZWR8fFxudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpKSYmXG5BcnJheS5pc0FycmF5KGJvdW5kKSk7XG5cbiB9OyRozY9fb25jZS5pc0NhbGxiYWNrKGlzQ2FsbGJhY2spO1xuaGFyZGVuKGlzQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUF0dGVudWF0b3I9KFxuem9uZSxcbm1ldGhvZE5hbWVzLFxue2ludGVyZmFjZUd1YXJkLHRhZz0nQXR0ZW51YXRvcid9PXt9KT0+XG57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtZXRob2RzPS8qICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxubWV0aG9kTmFtZXMubWFwKChrZXkpPT57XG4vL1xuaWYoIWlzUHJvcGVydHlLZXkoa2V5KSl7XG50aHJvdyBGYWlsIGBrZXkgJHtxKGtleSl9IGlzIG5vdCBhIFByb3BlcnR5S2V5YDtcbiB9XG5cbmNvbnN0IG09LyogICAgICAgICAgICAgICAgICAqL3tcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICovXG5ba2V5XSguLi5hcmdzKXtcbi8vXG5jb25zdCBjYj10aGlzLnN0YXRlLmNic1trZXldO1xuaWYoIWNiKXtcbmNvbnN0IGVycj1tYWtlRXJyb3IoIGB1bmltcGxlbWVudGVkICR7cSh0YWcpfSBtZXRob2QgJHtxKGtleSl9YCk7XG5pZih0aGlzLnN0YXRlLmlzU3luYyl7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gfVxuaWYoY2IuaXNTeW5jKXtcbnJldHVybiBjYWxsU3luYyhjYiwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gY2FsbEUoY2IsLi4uYXJncyk7XG4gfX1bXG5rZXldO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAqL1trZXksbV0pO1xuIH0pKTtcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXpvbmUuZXhvQ2xhc3MoXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbi8qXG5cblxuXG5cbiAgICAgKi9cbih7XG50YXJnZXQ9bnVsbCxcbmlzU3luYz1mYWxzZSxcbm92ZXJyaWRlcz0vKiAgICAgICAgICAgICAgICAgICAgKi97fX0pPT5cbntcbmNvbnN0IGNicz0vKiAgICAgICAgICAgICAgICAgICAgKi97fTtcblxuY29uc3QgcmVtYWluaW5nPW5ldyBTZXQobWV0aG9kTmFtZXMpO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG92ZXJyaWRlcykpe1xucmVtYWluaW5nLmhhcyhrZXkpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBub3QgYWxsb3dlZCBieSBtZXRob2ROYW1lc2A7XG5cbnJlbWFpbmluZy5kZWxldGUoa2V5KTtcbmNvbnN0IGNiPW92ZXJyaWRlc1trZXldO1xuY2I9PW51bGx8fFxuaXNDYWxsYmFjayhjYil8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIGlzIG5vdCBhIGNhbGxiYWNrOyBnb3QgJHtjYn1gO1xuY2JzW2tleV09Y2I7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiByZW1haW5pbmcpe1xuaWYoaXNTeW5jKXtcbmNic1trZXldPW1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfWVsc2V7XG5jYnNba2V5XT1tYWtlTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2Nicyxpc1N5bmN9KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAqL21ldGhvZHMpO1xuXG5yZXR1cm4gbWFrZUF0dGVudWF0b3I7XG4gfTskaM2PX29uY2UucHJlcGFyZUF0dGVudWF0b3IocHJlcGFyZUF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVBdHRlbnVhdG9yKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yPSh6b25lLGludGVyZmFjZUd1YXJkLG9wdHM9e30pPT57XG5jb25zdCBtZXRob2ROYW1lcz1nZXRJbnRlcmZhY2VNZXRob2RLZXlzKGludGVyZmFjZUd1YXJkKTtcbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXByZXBhcmVBdHRlbnVhdG9yKHpvbmUsbWV0aG9kTmFtZXMse1xuLi4ub3B0cyxcbmludGVyZmFjZUd1YXJkfSk7XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL21ha2VBdHRlbnVhdG9yKTtcbiB9OyRozY9fb25jZS5wcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IocHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY2FsbFN5bmMiOlsiY2FsbFN5bmMiXSwiY2FsbEUiOlsiY2FsbEUiXSwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlRnVuY3Rpb25DYWxsYmFjayI6WyJtYWtlRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIjpbIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siXSwibWFrZU1ldGhvZENhbGxiYWNrIjpbIm1ha2VNZXRob2RDYWxsYmFjayJdLCJpc0NhbGxiYWNrIjpbImlzQ2FsbGJhY2siXSwicHJlcGFyZUF0dGVudWF0b3IiOlsicHJlcGFyZUF0dGVudWF0b3IiXSwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIjpbInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyA/0ZzQUAAM0FAAAlAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NvbmZpZy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnJpZGdlSWQiLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCIsIlZCYW5rQWNjb3VudCIsIldhbGxldE5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBCcmlkZ2VJZD0vKiAgICAgICAgICAgICAgICAqL3tcbkJBTks6J2JhbmsnLFxuQ09SRTonY29yZScsXG5ESUJDOidkaWJjJyxcblNUT1JBR0U6J3N0b3JhZ2UnLFxuUFJPVklTSU9OOidwcm92aXNpb24nLFxuUFJPVklTSU9OX1NNQVJUX1dBTExFVDoncHJvdmlzaW9uV2FsbGV0JyxcblZMT0NBTENIQUlOOid2bG9jYWxjaGFpbicsXG5WVFJBTlNGRVI6J3Z0cmFuc2ZlcicsXG5XQUxMRVQ6J3dhbGxldCd9OyRozY9fb25jZS5CcmlkZ2VJZChCcmlkZ2VJZCk7XG5cbmhhcmRlbihCcmlkZ2VJZCk7XG5cbmNvbnN0ICAgICAgICBDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZD17XG52YmFua1BvcnQ6QnJpZGdlSWQuQkFOSyxcbnZpYmNQb3J0OkJyaWRnZUlkLkRJQkN9OyRozY9fb25jZS5Db3Ntb3NJbml0S2V5VG9CcmlkZ2VJZChDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCk7XG5cblxuY29uc3QgICAgICAgIFdhbGxldE5hbWU9LyogICAgICAgICAgICAgICAgKi97XG5kZXBvc2l0RmFjZXQ6J2RlcG9zaXRGYWNldCd9OyRozY9fb25jZS5XYWxsZXROYW1lKFdhbGxldE5hbWUpO1xuXG5oYXJkZW4oV2FsbGV0TmFtZSk7XG5cbi8vXG5jb25zdCAgICAgICAgVkJhbmtBY2NvdW50PS8qICAgICAgICAgICAgICAgICove1xucmVzZXJ2ZTp7XG5tb2R1bGU6J3ZiYW5rL3Jlc2VydmUnLFxuYWRkcmVzczonYWdvcmljMWFlMGxtdHpsZ3JjbmxhOXhqa3BhYXJxNWQ1ZGZlejYzaDNudWNsJ30sXG5cbnByb3Zpc2lvbjp7XG5tb2R1bGU6J3ZiYW5rL3Byb3Zpc2lvbicsXG5hZGRyZXNzOidhZ29yaWMxbWVnenl0ZzY1Y3lyZ3pzNmZ2enhncmNxdnd3bDd1Z3B0NjIzNDYnfX07JGjNj19vbmNlLlZCYW5rQWNjb3VudChWQmFua0FjY291bnQpO1xuXG5cbmhhcmRlbihWQmFua0FjY291bnQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJpZGdlSWQiOlsiQnJpZGdlSWQiXSwiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiOlsiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiXSwiV2FsbGV0TmFtZSI6WyJXYWxsZXROYW1lIl0sIlZCYW5rQWNjb3VudCI6WyJWQmFua0FjY291bnQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnKi0l0gEAABIBAAAJAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAALV4MKOAgAAjgIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgTm9uTnVsbGlzaD0odmFsLG9wdERldGFpbHM9IGB1bmV4cGVjdGVkICR7cSh2YWwpfWApPT57XG5pZih2YWwhPW51bGwpe1xuLy9cbnJldHVybiB2YWw7XG4gfVxuYXNzZXJ0LmZhaWwob3B0RGV0YWlscyk7XG4gfTskaM2PX29uY2UuTm9uTnVsbGlzaChOb25OdWxsaXNoKTtcbmhhcmRlbihOb25OdWxsaXNoKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Ik5vbk51bGxpc2giOlsiTm9uTnVsbGlzaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADn8owUcwUAAHMFAAAkAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9qcy11dGlscy5qcyIsIi4vbWFyc2hhbC5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi9zZXMtdXRpbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2NvbmZpZy5qcyIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vanMtdXRpbHMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vc2VzLXV0aWxzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2NvbmZpZy5qc1wiLCBbXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbXV0sW1wiLi9lcnJvcnMuanNcIiwgW11dLFtcIi4vanMtdXRpbHMuanNcIiwgW11dLFtcIi4vbWFyc2hhbC5qc1wiLCBbXV0sW1wiLi9tZXRob2QtdG9vbHMuanNcIiwgW11dLFtcIi4vc2VzLXV0aWxzLmpzXCIsIFtdXSxbXCIuL3R5cGVDaGVjay5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL21hcnNoYWwuanMiOltbInB1cmVEYXRhTWFyc2hhbGxlciIsInB1cmVEYXRhTWFyc2hhbGxlciJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADML6bVHwcAAB8HAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2pzLXV0aWxzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWVwQ29weUpzb25hYmxlIiwiZGVlcE1hcE9iamVjdCIsIm1ha2VNZWFzdXJlU2Vjb25kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwQ29weUpzb25hYmxlPSh2YWx1ZSk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcENvcHlKc29uYWJsZShkZWVwQ29weUpzb25hYmxlKTtcbmNvbnN0IGRlZXBNYXBPYmplY3RJbnRlcm5hbD0odmFsdWUsbmFtZSxjb250YWluZXIsbWFwcGVyKT0+e1xuaWYoY29udGFpbmVyJiZ0eXBlb2YgbmFtZT09PSdzdHJpbmcnKXtcbmNvbnN0IG1hcHBlZD1tYXBwZXIodmFsdWUsbmFtZSxjb250YWluZXIpO1xuaWYobWFwcGVkIT09dmFsdWUpe1xucmV0dXJuIG1hcHBlZDtcbiB9XG4gfVxuXG5pZih0eXBlb2YgdmFsdWUhPT0nb2JqZWN0J3x8IXZhbHVlKXtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbmxldCB3YXNNYXBwZWQ9ZmFsc2U7XG5jb25zdCBtYXBwZWRFbnRyaWVzPU9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtpbm5lck5hbWUsaW5uZXJWYWx1ZV0pPT57XG5jb25zdCBtYXBwZWRJbm5lclZhbHVlPWRlZXBNYXBPYmplY3RJbnRlcm5hbChcbmlubmVyVmFsdWUsXG5pbm5lck5hbWUsXG52YWx1ZSxcbm1hcHBlcik7XG5cbndhc01hcHBlZHx8PW1hcHBlZElubmVyVmFsdWUhPT1pbm5lclZhbHVlO1xucmV0dXJuW2lubmVyTmFtZSxtYXBwZWRJbm5lclZhbHVlXTtcbiB9KTtcblxucmV0dXJuIHdhc01hcHBlZD9PYmplY3QuZnJvbUVudHJpZXMobWFwcGVkRW50cmllcyk6dmFsdWU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0ICAgICAgICBtYWtlTWVhc3VyZVNlY29uZHM9KGN1cnJlbnRUaW1lTWlsbGlzZWMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07JGjNj19vbmNlLm1ha2VNZWFzdXJlU2Vjb25kcyhtYWtlTWVhc3VyZVNlY29uZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcENvcHlKc29uYWJsZSI6WyJkZWVwQ29weUpzb25hYmxlIl0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJtYWtlTWVhc3VyZVNlY29uZHMiOlsibWFrZU1lYXN1cmVTZWNvbmRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZtFKvTFQAA0xUAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiLCIuL2NhbGxiYWNrLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q2FwRGF0YSIsImFzc2VydFBhdGhTZWdtZW50IiwiaXNTdHJlYW1DZWxsIiwibWFrZUNoYWluU3RvcmFnZVJvb3QiLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIiwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUsRmFyLE0sbWFrZUhlYXBab25lLGNiOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanNcIiwgW1tcIm1ha2VIZWFwWm9uZVwiLCBbJGjNj19hID0+IChtYWtlSGVhcFpvbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2NhbGxiYWNrLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKGNiID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZUNoYWluU3RvcmFnZVJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VDaGFpblN0b3JhZ2VSb290XCJ9KTskaM2PX29uY2UubWFrZUNoYWluU3RvcmFnZVJvb3QobWFrZUNoYWluU3RvcmFnZVJvb3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlU3RvcmFnZU5vZGVDaGlsZCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVN0b3JhZ2VOb2RlQ2hpbGRcIn0pOyRozY9fb25jZS5tYWtlU3RvcmFnZU5vZGVDaGlsZChtYWtlU3RvcmFnZU5vZGVDaGlsZCk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgQ2hhaW5TdG9yYWdlTm9kZUk9TS5pbnRlcmZhY2UoJ1N0b3JhZ2VOb2RlJyx7XG5zZXRWYWx1ZTpNLmNhbGxXaGVuKE0uc3RyaW5nKCkpLnJldHVybnMoKSxcbmdldFBhdGg6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldFN0b3JlS2V5Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxubWFrZUNoaWxkTm9kZTpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnNwbGl0UmVjb3JkKHt9LHtzZXF1ZW5jZTpNLmJvb2xlYW4oKX0se30pKS5cbnJldHVybnMoTS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJykpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU3RyZWFtQ2VsbD0oY2VsbCk9PlxuY2VsbCYmXG50eXBlb2YgY2VsbD09PSdvYmplY3QnJiZcbkFycmF5LmlzQXJyYXkoY2VsbC52YWx1ZXMpJiZcbnR5cGVvZiBjZWxsLmJsb2NrSGVpZ2h0PT09J3N0cmluZycmJlxuL14wJHxeWzEtOV1bMC05XSokLy50ZXN0KGNlbGwuYmxvY2tIZWlnaHQpOyRozY9fb25jZS5pc1N0cmVhbUNlbGwoaXNTdHJlYW1DZWxsKTtcbmhhcmRlbihpc1N0cmVhbUNlbGwpO1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07JGjNj19vbmNlLmFzc2VydENhcERhdGEoYXNzZXJ0Q2FwRGF0YSk7XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwYXRoU2VnbWVudFBhdHRlcm49L15bYS16QS1aMC05Xy1dezEsMTAwfSQvO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGF0aFNlZ21lbnQ9KG5hbWUpPT57XG5wYXRoU2VnbWVudFBhdHRlcm4udGVzdChuYW1lKXx8XG5GYWlsIGBQYXRoIHNlZ21lbnQgbmFtZXMgbXVzdCBjb25zaXN0IG9mIDEgdG8gMTAwIGNoYXJhY3RlcnMgbGltaXRlZCB0byBBU0NJSSBhbHBoYW51bWVyaWNzLCB1bmRlcnNjb3JlcywgYW5kL29yIGRhc2hlczogJHtuYW1lfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UGF0aFNlZ21lbnQoYXNzZXJ0UGF0aFNlZ21lbnQpO1xuaGFyZGVuKGFzc2VydFBhdGhTZWdtZW50KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUNoYWluU3RvcmFnZU5vZGU9KHpvbmUpPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQ2hhaW5TdG9yYWdlTm9kZT16b25lLmV4b0NsYXNzKFxuJ0NoYWluU3RvcmFnZU5vZGUnLFxuQ2hhaW5TdG9yYWdlTm9kZUksXG4vKlxuXG5cblxuXG5cblxuICAgICAqL1xuKG1lc3NlbmdlcixwYXRoLHtzZXF1ZW5jZT1mYWxzZX09e30pPT57XG5hc3NlcnQudHlwZW9mKHBhdGgsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihzZXF1ZW5jZSwnYm9vbGVhbicpO1xucmV0dXJuIGhhcmRlbih7cGF0aCxtZXNzZW5nZXIsc2VxdWVuY2V9KTtcbiB9LFxue1xuZ2V0UGF0aCgpe1xucmV0dXJuIHRoaXMuc3RhdGUucGF0aDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JlS2V5KCl7XG5jb25zdHtwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbnJldHVybiBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOidnZXRTdG9yZUtleScsXG5hcmdzOltwYXRoXX0pO1xuXG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xubWFrZUNoaWxkTm9kZShuYW1lLGNoaWxkTm9kZU9wdGlvbnM9e30pe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnRQYXRoU2VnbWVudChuYW1lKTtcbmNvbnN0IG1lcmdlZE9wdGlvbnM9e3NlcXVlbmNlLC4uLmNoaWxkTm9kZU9wdGlvbnN9O1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlKFxubWVzc2VuZ2VyLFxuIGAke3BhdGh9LiR7bmFtZX1gLFxubWVyZ2VkT3B0aW9ucyk7XG5cbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHNldFZhbHVlKHZhbHVlKXtcbmNvbnN0e3NlcXVlbmNlLHBhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbnRyeTtcbmlmKCFzZXF1ZW5jZSYmIXZhbHVlKXtcbmVudHJ5PVtwYXRoXTtcbiB9ZWxzZXtcbmVudHJ5PVtwYXRoLHZhbHVlXTtcbiB9XG5hd2FpdCBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOnNlcXVlbmNlPydhcHBlbmQnOidzZXQnLFxuYXJnczpbZW50cnldfSk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xufSk7XG5cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlTm9kZTtcbiB9OyRozY9fb25jZS5wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSk7XG5cbmNvbnN0IG1ha2VIZWFwQ2hhaW5TdG9yYWdlTm9kZT1wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShtYWtlSGVhcFpvbmUoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZUNoYWluU3RvcmFnZVJvb3QoXG5oYW5kbGVTdG9yYWdlTWVzc2FnZSxcbnJvb3RQYXRoLFxucm9vdE9wdGlvbnM9e30pXG57XG5jb25zdCBtZXNzZW5nZXI9Y2IubWFrZUZ1bmN0aW9uQ2FsbGJhY2soaGFuZGxlU3RvcmFnZU1lc3NhZ2UpO1xuXG4vL1xuY29uc3Qgcm9vdE5vZGU9bWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlKG1lc3Nlbmdlcixyb290UGF0aCxyb290T3B0aW9ucyk7XG5yZXR1cm4gcm9vdE5vZGU7XG4gfVxuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZU51bGxTdG9yYWdlTm9kZT0oKT0+e1xuLy9cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbkZhcignTnVsbE1lc3NlbmdlcicsKCk9Pm51bGwpLFxuJ251bGwnKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIG1ha2VTdG9yYWdlTm9kZUNoaWxkKHN0b3JhZ2VOb2RlUmVmLGNoaWxkTmFtZSl7XG5jb25zdCBleGlzdGluZ1N0b3JhZ2VOb2RlPWF3YWl0IHN0b3JhZ2VOb2RlUmVmO1xuY29uc3Qgc3RvcmFnZU5vZGU9ZXhpc3RpbmdTdG9yYWdlTm9kZXx8bWFrZU51bGxTdG9yYWdlTm9kZSgpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGROYW1lKTtcbiB9XG5oYXJkZW4obWFrZVN0b3JhZ2VOb2RlQ2hpbGQpO1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXJpYWxpemVUb1N0b3JhZ2U9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5yZXR1cm4gYXN5bmModmFsdWUpPT57XG5jb25zdCBtYXJzaGFsbGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkobWFyc2hhbGxlZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG4gfTtcbiB9OyRozY9fb25jZS5tYWtlU2VyaWFsaXplVG9TdG9yYWdlKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNTdHJlYW1DZWxsIjpbImlzU3RyZWFtQ2VsbCJdLCJhc3NlcnRDYXBEYXRhIjpbImFzc2VydENhcERhdGEiXSwiYXNzZXJ0UGF0aFNlZ21lbnQiOlsiYXNzZXJ0UGF0aFNlZ21lbnQiXSwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiOlsicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwibWFrZUNoYWluU3RvcmFnZVJvb3QiOlsibWFrZUNoYWluU3RvcmFnZVJvb3QiXSwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiOlsibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiXSwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSI6WyJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANVVuNYREAAAERAAACYAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiLi9saWItY2hhaW5TdG9yYWdlLmpzIl0sImV4cG9ydHMiOlsiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiLCJtYWtlQm9hcmRSZW1vdGUiLCJtYWtlSGlzdG9yeVJldml2ZXIiLCJwdXJlRGF0YU1hcnNoYWxsZXIiLCJzbG90VG9Cb2FyZFJlbW90ZSIsInVubWFyc2hhbEZyb21Wc3RvcmFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixtYWtlTWFyc2hhbCxpc1N0cmVhbUNlbGw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiLi9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJpc1N0cmVhbUNlbGxcIiwgWyRozY9fYSA9PiAoaXNTdHJlYW1DZWxsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQm9hcmRSZW1vdGU9KHtib2FyZElkLGlmYWNlfSk9PntcbmNvbnN0IG5vbmFsbGVnZWQ9aWZhY2U/aWZhY2UucmVwbGFjZSgvXkFsbGVnZWQ6IC8sJycpOicnO1xucmV0dXJuIEZhciggYEJvYXJkUmVtb3RlJHtub25hbGxlZ2VkfWAse2dldEJvYXJkSWQ6KCk9PmJvYXJkSWR9KTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlQm9hcmRSZW1vdGUobWFrZUJvYXJkUmVtb3RlKTtcbmNvbnN0ICAgICAgICBzbG90VG9Cb2FyZFJlbW90ZT0oYm9hcmRJZCxpZmFjZSk9PlxubWFrZUJvYXJkUmVtb3RlKHtib2FyZElkLGlmYWNlfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2Uuc2xvdFRvQm9hcmRSZW1vdGUoc2xvdFRvQm9hcmRSZW1vdGUpO1xuY29uc3QgYm9hcmRWYWxUb1Nsb3Q9KHZhbCk9PntcbmlmKCdnZXRCb2FyZElkJ2luIHZhbCl7XG5yZXR1cm4gdmFsLmdldEJvYXJkSWQoKTtcbiB9XG50aHJvdyBGYWlsIGB1bmtub3duIG9iaiBpbiBib2FyZFNsb3R0aW5nTWFyc2hhbGxlci52YWxUb1Nsb3QgJHt2YWx9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYm9hcmRTbG90dGluZ01hcnNoYWxsZXI9KHNsb3RUb1ZhbD11bmRlZmluZWQpPT57XG5yZXR1cm4gbWFrZU1hcnNoYWwoYm9hcmRWYWxUb1Nsb3Qsc2xvdFRvVmFsLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuIH07XG5cbi8vXG4vL1xuLypcblxuXG4gKi8kaM2PX29uY2UuYm9hcmRTbG90dGluZ01hcnNoYWxsZXIoYm9hcmRTbG90dGluZ01hcnNoYWxsZXIpO1xuY29uc3QgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVubWFyc2hhbEZyb21Wc3RvcmFnZT0oZGF0YSxrZXksZnJvbUNhcERhdGEsaW5kZXgpPT57XG5jb25zdCBzZXJpYWxpemVkPWRhdGEuZ2V0KGtleSl8fEZhaWwgYG5vIGRhdGEgZm9yICR7a2V5fWA7XG5hc3NlcnQudHlwZW9mKHNlcmlhbGl6ZWQsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5cbmNvbnN0IHN0cmVhbUNlbGw9SlNPTi5wYXJzZShzZXJpYWxpemVkKTtcbmlmKCFpc1N0cmVhbUNlbGwoc3RyZWFtQ2VsbCkpe1xudGhyb3cgRmFpbCBgbm90IGEgU3RyZWFtQ2VsbDogJHtzdHJlYW1DZWxsfWA7XG4gfVxuXG5jb25zdHt2YWx1ZXN9PXN0cmVhbUNlbGw7XG52YWx1ZXMubGVuZ3RoPjB8fEZhaWwgYG5vIFN0cmVhbUNlbGwgdmFsdWVzOiAke3N0cmVhbUNlbGx9YDtcblxuY29uc3QgbWFyc2hhbGxlZD12YWx1ZXMuYXQoaW5kZXgpO1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsbGVkLCdzdHJpbmcnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYXBEYXRhPWhhcmRlbihKU09OLnBhcnNlKG1hcnNoYWxsZWQpKTtcbmFzc2VydENhcERhdGEoY2FwRGF0YSk7XG5cbmNvbnN0IHVubWFyc2hhbGxlZD1mcm9tQ2FwRGF0YShjYXBEYXRhKTtcbnJldHVybiB1bm1hcnNoYWxsZWQ7XG4gfTskaM2PX29uY2UudW5tYXJzaGFsRnJvbVZzdG9yYWdlKHVubWFyc2hhbEZyb21Wc3RvcmFnZSk7XG5oYXJkZW4odW5tYXJzaGFsRnJvbVZzdG9yYWdlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUhpc3RvcnlSZXZpdmVyPShlbnRyaWVzLHNsb3RUb1ZhbD11bmRlZmluZWQpPT57XG5jb25zdCBib2FyZD1ib2FyZFNsb3R0aW5nTWFyc2hhbGxlcihzbG90VG9WYWwpO1xuY29uc3QgdnNNYXA9bmV3IE1hcChlbnRyaWVzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZnJvbUNhcERhdGE9KC4uLmFyZ3MpPT5cblJlZmxlY3QuYXBwbHkoYm9hcmQuZnJvbUNhcERhdGEsYm9hcmQsYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRJdGVtPShrZXkpPT51bm1hcnNoYWxGcm9tVnN0b3JhZ2UodnNNYXAsa2V5LGZyb21DYXBEYXRhLC0xKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoaWxkcmVuPShwcmVmaXgpPT57XG5wcmVmaXguZW5kc1dpdGgoJy4nKXx8RmFpbCBgcHJlZml4IG11c3QgZW5kIHdpdGggJy4nYDtcbnJldHVybiBoYXJkZW4oW1xuLi4ubmV3IFNldChcbmVudHJpZXMuXG5tYXAoKFtrLF9dKT0+aykuXG5maWx0ZXIoKGspPT5rLnN0YXJ0c1dpdGgocHJlZml4KSkuXG5tYXAoKGspPT5rLnNsaWNlKHByZWZpeC5sZW5ndGgpLnNwbGl0KCcuJylbMF0pKV0pO1xuXG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGhhcz0oayk9PnZzTWFwLmdldChrKSE9PXVuZGVmaW5lZDtcblxucmV0dXJuIGhhcmRlbih7Z2V0SXRlbSxjaGlsZHJlbixoYXN9KTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UubWFrZUhpc3RvcnlSZXZpdmVyKG1ha2VIaXN0b3J5UmV2aXZlcik7XG5jb25zdCByZWplY3RPQ2FwPShjYXApPT5GYWlsIGAke2NhcH0gaXMgbm90IHB1cmUgZGF0YWA7XG5jb25zdCAgICAgICAgcHVyZURhdGFNYXJzaGFsbGVyPW1ha2VNYXJzaGFsKHJlamVjdE9DYXAscmVqZWN0T0NhcCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7JGjNj19vbmNlLnB1cmVEYXRhTWFyc2hhbGxlcihwdXJlRGF0YU1hcnNoYWxsZXIpO1xuXG5oYXJkZW4ocHVyZURhdGFNYXJzaGFsbGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VCb2FyZFJlbW90ZSI6WyJtYWtlQm9hcmRSZW1vdGUiXSwic2xvdFRvQm9hcmRSZW1vdGUiOlsic2xvdFRvQm9hcmRSZW1vdGUiXSwiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiOlsiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiXSwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIjpbInVubWFyc2hhbEZyb21Wc3RvcmFnZSJdLCJtYWtlSGlzdG9yeVJldml2ZXIiOlsibWFrZUhpc3RvcnlSZXZpdmVyIl0sInB1cmVEYXRhTWFyc2hhbGxlciI6WyJwdXJlRGF0YU1hcnNoYWxsZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtr0hXmsIAABrCAAAKwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tZXRob2QtdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCJdLCJleHBvcnRzIjpbImJpbmRBbGxNZXRob2RzIiwiZ2V0TWV0aG9kTmFtZXMiLCJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc09iamVjdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixjcmVhdGUsZnJvbUVudHJpZXMsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzLGFwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuY29uc3Qgb3duTmFtZXM9LyogICAgICAgICAgICAgICovb3duS2V5cyhkZXNjcyk7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25OYW1lcyl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtcbmhhcmRlbihnZXRNZXRob2ROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0U3RyaW5nTWV0aG9kTmFtZXM9KHZhbCk9PlxuLyogICAgICAgICAgICAgICAgICAgKi9cbmdldE1ldGhvZE5hbWVzKHZhbCkuZmlsdGVyKChuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5nZXRTdHJpbmdNZXRob2ROYW1lcyhnZXRTdHJpbmdNZXRob2ROYW1lcyk7XG5jb25zdCAgICAgICAgYmluZEFsbE1ldGhvZHM9KG9iaik9PlxuaGFyZGVuKFxuY3JlYXRlKFxub2JqLFxuZnJvbUVudHJpZXMoXG5nZXRNZXRob2ROYW1lcyhvYmopLm1hcCgobmFtZSk9Pltcbm5hbWUsXG57XG52YWx1ZTooLyogICAgICAgICAgICAgICAgICAgICovLi4uYXJncyk9PlxuYXBwbHkob2JqW25hbWVdLG9iaixhcmdzKSxcbmVudW1lcmFibGU6dHJ1ZX1dKSkpKTskaM2PX29uY2UuYmluZEFsbE1ldGhvZHMoYmluZEFsbE1ldGhvZHMpO1xuXG5cblxuXG5cbmhhcmRlbihiaW5kQWxsTWV0aG9kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJnZXRTdHJpbmdNZXRob2ROYW1lcyI6WyJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJiaW5kQWxsTWV0aG9kcyI6WyJiaW5kQWxsTWV0aG9kcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACaBR+vhh0AAIYdAAAoAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Nlcy11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9zdHJlYW0iLCJqZXNzaWUuanMiXSwiZXhwb3J0cyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiLCJhZ2dyZWdhdGVUcnlGaW5hbGx5IiwiYWxsVmFsdWVzIiwiYXNzZXJ0QWxsRGVmaW5lZCIsImRlZXBseUZ1bGZpbGxlZE9iamVjdCIsImZvcmV2ZXIiLCJzeW5jaHJvbml6ZWRUZWUiLCJ1bnRpbFRydWUiLCJ3aGlsZVRydWUiLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIiwiemlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixYLGRlZXBseUZ1bGZpbGxlZCxpc09iamVjdCxtYWtlUHJvbWlzZUtpdCxtYWtlUXVldWUsYXN5bmNHZW5lcmF0ZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRcIiwgWyRozY9fYSA9PiAoZGVlcGx5RnVsZmlsbGVkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vc3RyZWFtXCIsIFtbXCJtYWtlUXVldWVcIiwgWyRozY9fYSA9PiAobWFrZVF1ZXVlID0gJGjNj19hKV1dXV0sW1wiamVzc2llLmpzXCIsIFtbXCJhc3luY0dlbmVyYXRlXCIsIFskaM2PX2EgPT4gKGFzeW5jR2VuZXJhdGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7ZnJvbUVudHJpZXMsa2V5cyx2YWx1ZXN9PU9iamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZE9iamVjdD1hc3luYyhvYmopPT57XG5pc09iamVjdChvYmopfHxGYWlsIGBwYXJhbSBtdXN0IGJlIGFuIG9iamVjdGA7XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKG9iaik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5kZWVwbHlGdWxmaWxsZWRPYmplY3QoZGVlcGx5RnVsZmlsbGVkT2JqZWN0KTtcbmNvbnN0IG1ha2VBZ2dyZWdhdGVFcnJvcj1cbnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj09PSdmdW5jdGlvbic/XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PkFnZ3JlZ2F0ZUVycm9yKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpOlxuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT57XG5yZXR1cm4gbWFrZUVycm9yKG1lc3NhZ2U/PydtdWx0aXBsZSBlcnJvcnMnLHVuZGVmaW5lZCx7XG4uLi5vcHRpb25zLFxuZXJyb3JzfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZUFsbE9yRXJyb3JzPWFzeW5jKGl0ZW1zKT0+e1xucmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpdGVtcykudGhlbigocmVzdWx0cyk9PntcbmNvbnN0IGVycm9ycz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmVzdWx0cy5maWx0ZXIoKHtzdGF0dXN9KT0+c3RhdHVzPT09J3JlamVjdGVkJykuXG5tYXAoKHJlc3VsdCk9PnJlc3VsdC5yZWFzb24pO1xuaWYoIWVycm9ycy5sZW5ndGgpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHRzLm1hcChcbihyZXN1bHQpPT5yZXN1bHQudmFsdWUpKTtcblxuIH1lbHNlIGlmKGVycm9ycy5sZW5ndGg9PT0xKXtcbnRocm93IGVycm9yc1swXTtcbiB9ZWxzZXtcbnRocm93IG1ha2VBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuIH1cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuUHJvbWlzZUFsbE9yRXJyb3JzKFByb21pc2VBbGxPckVycm9ycyk7XG5jb25zdCAgICAgICAgYWdncmVnYXRlVHJ5RmluYWxseT1hc3luYyh0cmllcixmaW5hbGl6ZXIpPT5cbnRyaWVyKCkudGhlbihcbmFzeW5jKHJlc3VsdCk9PmZpbmFsaXplcigpLnRoZW4oKCk9PnJlc3VsdCksXG5hc3luYyh0cnlFcnJvcik9PlxuZmluYWxpemVyKHRyeUVycm9yKS5cbnRoZW4oXG4oKT0+dHJ5RXJyb3IsXG4oZmluYWxpemVFcnJvcik9Pm1ha2VBZ2dyZWdhdGVFcnJvcihbdHJ5RXJyb3IsZmluYWxpemVFcnJvcl0pKS5cblxudGhlbigoZXJyb3IpPT5Qcm9taXNlLnJlamVjdChlcnJvcikpKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuYWdncmVnYXRlVHJ5RmluYWxseShhZ2dyZWdhdGVUcnlGaW5hbGx5KTtcbmNvbnN0ICAgICAgICB3aXRoRGVmZXJyZWRDbGVhbnVwPWFzeW5jKGZuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjbGVhbnVwc0xJRk89W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZENsZWFudXA9KGNsZWFudXApPT57XG5jbGVhbnVwc0xJRk8udW5zaGlmdChjbGVhbnVwKTtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGZpbmFsaXplcj1hc3luYyhlcnIpPT57XG4vL1xuY29uc3QgY2xlYW51cFJlc3VsdHM9Y2xlYW51cHNMSUZPLm1hcChhc3luYyhjbGVhbnVwKT0+e1xuYXdhaXQgbnVsbDtcbnJldHVybiBjbGVhbnVwKGVycik7XG4gfSk7XG5hd2FpdCBQcm9taXNlQWxsT3JFcnJvcnMoY2xlYW51cFJlc3VsdHMpO1xuIH07XG5yZXR1cm4gYWdncmVnYXRlVHJ5RmluYWxseSgoKT0+Zm4oYWRkQ2xlYW51cCksZmluYWxpemVyKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uud2l0aERlZmVycmVkQ2xlYW51cCh3aXRoRGVmZXJyZWRDbGVhbnVwKTtcbmNvbnN0ICAgICAgICBhc3NlcnRBbGxEZWZpbmVkPShvYmopPT57XG5jb25zdCBtaXNzaW5nPVtdO1xuZm9yKGNvbnN0W2tleSx2YWxdb2YgT2JqZWN0LmVudHJpZXMob2JqKSl7XG5pZih2YWw9PT11bmRlZmluZWQpe1xubWlzc2luZy5wdXNoKGtleSk7XG4gfVxuIH1cbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xuRmFpbCBgbWlzc2luZyAke3EobWlzc2luZyl9YDtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYXNzZXJ0QWxsRGVmaW5lZChhc3NlcnRBbGxEZWZpbmVkKTtcbmNvbnN0IG5vdERvbmU9aGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFsd2F5c0RvbmU9aGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbmNvbnN0ICAgICAgICBmb3JldmVyPWFzeW5jR2VuZXJhdGUoKCk9Pm5vdERvbmUpO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5mb3JldmVyKGZvcmV2ZXIpO1xuY29uc3QgICAgICAgIHdoaWxlVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZighdmFsdWUpe1xucmV0dXJuIGFsd2F5c0RvbmU7XG4gfVxucmV0dXJuIGhhcmRlbih7XG5kb25lOmZhbHNlLFxudmFsdWV9KTtcblxuIH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS53aGlsZVRydWUod2hpbGVUcnVlKTtcbmNvbnN0ICAgICAgICB1bnRpbFRydWU9KHByb2R1Y2UpPT5cbmFzeW5jR2VuZXJhdGUoYXN5bmMoKT0+e1xuY29uc3QgdmFsdWU9YXdhaXQgcHJvZHVjZSgpO1xuaWYodmFsdWUpe1xucmV0dXJuIGhhcmRlbih7XG5kb25lOnRydWUsXG52YWx1ZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbih7XG5kb25lOmZhbHNlLFxudmFsdWV9KTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UudW50aWxUcnVlKHVudGlsVHJ1ZSk7XG5jb25zdCAgICAgICAgemlwPSh4cyx5cyk9PmhhcmRlbih4cy5tYXAoKHgsaSk9Plt4LHlzWytpXV0pKTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS56aXAoemlwKTtcbmNvbnN0ICAgICAgICBhbGxWYWx1ZXM9YXN5bmMob2JqKT0+e1xuY29uc3QgcmVzb2x2ZWQ9YXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzKG9iaikpO1xuLy9cbnJldHVybiBoYXJkZW4oZnJvbUVudHJpZXMoemlwKGtleXMob2JqKSxyZXNvbHZlZCkpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuYWxsVmFsdWVzKGFsbFZhbHVlcyk7XG5jb25zdCAgICAgICAgc3luY2hyb25pemVkVGVlPShzb3VyY2VTdHJlYW0scmVhZGVyQ291bnQpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmVSZXN1bHQ7XG5cbi8qXG5cblxuXG4gICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWVzPVtdO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWxsTmV4dD1hc3luYygpPT57XG5jb25zdCByZXF1ZXN0cz1hd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocXVldWVzLm1hcCgocXVldWUpPT5xdWV1ZS5nZXQoKSkpO1xuY29uc3QgcmVqZWN0aW9ucz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZXJzPVtdO1xubGV0IGRvbmU9ZmFsc2U7XG5mb3IoY29uc3Qgc2V0dGxlZFJlc3VsdCBvZiByZXF1ZXN0cyl7XG5pZihzZXR0bGVkUmVzdWx0LnN0YXR1cz09PSdyZWplY3RlZCcpe1xucmVqZWN0aW9ucy5wdXNoKHNldHRsZWRSZXN1bHQucmVhc29uKTtcbiB9ZWxzZXtcbmRvbmV8fD0hIXNldHRsZWRSZXN1bHQudmFsdWUuZG9uZTtcbnJlc29sdmVycy5wdXNoKHNldHRsZWRSZXN1bHQudmFsdWUudmFsdWUpO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGRvbmVSZXN1bHQpe1xucmVzdWx0PVByb21pc2UucmVzb2x2ZShkb25lUmVzdWx0KTtcbiB9ZWxzZSBpZihyZWplY3Rpb25zLmxlbmd0aCl7XG5jb25zdCBlcnJvcj1tYWtlRXJyb3IoWCBgVGVlZCBzdHJlYW0gdGhyZXdgKTtcbmFubm90YXRlRXJyb3IoZXJyb3IsWCBgVGVlZCByZWplY3Rpb25zOiAke3JlamVjdGlvbnN9YCk7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0udGhyb3c/LihlcnJvcil8fFxuUHJvbWlzZS5yZXNvbHZlKHNvdXJjZVN0cmVhbS5yZXR1cm4/LigpKS50aGVuKCgpPT5cblByb21pc2UucmVqZWN0KGVycm9yKSk7XG5cbiB9ZWxzZSBpZihkb25lKXtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS5yZXR1cm4/LigpfHxcblByb21pc2UucmVzb2x2ZSh7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1lbHNle1xucmVzdWx0PXNvdXJjZVN0cmVhbS5uZXh0KCk7XG4gfVxucmVzdWx0LnRoZW4oXG4ocik9PntcbmlmKHIuZG9uZSl7XG5kb25lUmVzdWx0PXI7XG4gfVxuIH0sXG4oKT0+e1xuZG9uZVJlc3VsdD17ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH07XG4gfSk7XG5cbmZvcihjb25zdCByZXNvbHZlIG9mIHJlc29sdmVycyl7XG5yZXNvbHZlKHJlc3VsdCk7XG4gfVxucmV0dXJuIHB1bGxOZXh0KCk7XG4gfTtcblxuY29uc3QgcmVhZGVycz1BcnJheS5mcm9tKHtsZW5ndGg6cmVhZGVyQ291bnR9KS5tYXAoKCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZT1tYWtlUXVldWUoKTtcbnF1ZXVlcy5wdXNoKHF1ZXVlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlYWRlcj1oYXJkZW4oe1xuICAgICAgYXN5bmMgbmV4dCgpe1xuLypcblxuXG5cbiAgICAgICAgICovXG5jb25zdHtwcm9taXNlLHJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5xdWV1ZS5wdXQoe3ZhbHVlOnJlc29sdmUsZG9uZTpmYWxzZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHJldHVybigpe1xuLypcblxuXG5cbiAgICAgICAgICovXG5jb25zdHtwcm9taXNlLHJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5xdWV1ZS5wdXQoe3ZhbHVlOnJlc29sdmUsZG9uZTp0cnVlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgdGhyb3cocmVhc29uKXtcbmNvbnN0IHJlamVjdGlvbj1Qcm9taXNlLnJlamVjdChyZWFzb24pO1xucXVldWUucHV0KHJlamVjdGlvbik7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH0sXG4vL1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHJlYWRlcjtcbiB9LFxuLy9cbiAgICAgIGFzeW5jW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCl7XG5hd2FpdCByZWFkZXIucmV0dXJuKCk7XG4gfX0pO1xuXG5yZXR1cm4gcmVhZGVyO1xuIH0pO1xuXG52b2lkIHB1bGxOZXh0KCk7XG5yZXR1cm4gcmVhZGVycztcbiB9OyRozY9fb25jZS5zeW5jaHJvbml6ZWRUZWUoc3luY2hyb25pemVkVGVlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZE9iamVjdCI6WyJkZWVwbHlGdWxmaWxsZWRPYmplY3QiXSwiUHJvbWlzZUFsbE9yRXJyb3JzIjpbIlByb21pc2VBbGxPckVycm9ycyJdLCJhZ2dyZWdhdGVUcnlGaW5hbGx5IjpbImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiXSwid2l0aERlZmVycmVkQ2xlYW51cCI6WyJ3aXRoRGVmZXJyZWRDbGVhbnVwIl0sImFzc2VydEFsbERlZmluZWQiOlsiYXNzZXJ0QWxsRGVmaW5lZCJdLCJmb3JldmVyIjpbImZvcmV2ZXIiXSwid2hpbGVUcnVlIjpbIndoaWxlVHJ1ZSJdLCJ1bnRpbFRydWUiOlsidW50aWxUcnVlIl0sInppcCI6WyJ6aXAiXSwiYWxsVmFsdWVzIjpbImFsbFZhbHVlcyJdLCJzeW5jaHJvbml6ZWRUZWUiOlsic3luY2hyb25pemVkVGVlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeqWiD9AgAA/QIAACgAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUNoZWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FzdCIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0eXBlbGVzc011c3RNYXRjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtdXN0TWF0Y2g9dHlwZWxlc3NNdXN0TWF0Y2g7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTtcbmNvbnN0ICAgICAgICBjYXN0PShzcGVjaW1lbixwYXR0KT0+e1xuLy9cbi8vXG4vL1xubXVzdE1hdGNoKHNwZWNpbWVuLHBhdHQpO1xucmV0dXJuIHNwZWNpbWVuO1xuIH07JGjNj19vbmNlLmNhc3QoY2FzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl0sImNhc3QiOlsiY2FzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACilQEQTgMAAE4DAAApAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJTdG9yYWdlTm9kZVNoYXBlIiwiVW5ndWFyZGVkSGVscGVySSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgU3RvcmFnZU5vZGVTaGFwZT1NLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlN0b3JhZ2VOb2RlU2hhcGUoU3RvcmFnZU5vZGVTaGFwZSk7XG5jb25zdCAgICAgICAgVW5ndWFyZGVkSGVscGVyST1NLmludGVyZmFjZShcbidoZWxwZXInLFxue30sXG4vL1xue3Nsb3BweTp0cnVlfSk7JGjNj19vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJuHQWoSBwAAEgcAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXBncmFkZS1hcGkuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIiwiaXNBYmFuZG9uZWRFcnJvciIsImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iLCJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtpc0Zyb3plbn09T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZT1oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2U6TS5zdHJpbmcoKSxcbmluY2FybmF0aW9uTnVtYmVyOk0ubnVtYmVyKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUoVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uPSh1cGdyYWRlTWVzc2FnZSx0b0luY2FybmF0aW9uTnVtYmVyKT0+XG5oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2UsXG5pbmNhcm5hdGlvbk51bWJlcjp0b0luY2FybmF0aW9uTnVtYmVyfSk7JGjNj19vbmNlLm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbihtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG5oYXJkZW4obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNVcGdyYWRlRGlzY29ubmVjdGlvbj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUpOyRozY9fb25jZS5pc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuaGFyZGVuKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQWJhbmRvbmVkRXJyb3I9KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixNLmVycm9yKCkpJiZcbi8vXG4vL1xucmVhc29uLm1lc3NhZ2U9PT0ndmF0IHRlcm1pbmF0ZWQnOyRozY9fb25jZS5pc0FiYW5kb25lZEVycm9yKGlzQWJhbmRvbmVkRXJyb3IpO1xuaGFyZGVuKGlzQWJhbmRvbmVkRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIl0sIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzQWJhbmRvbmVkRXJyb3IiOlsiaXNBYmFuZG9uZWRFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACu+GMDBwgAAAcIAAAzAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiLCJvYnNlcnZlSXRlcmF0aW9uIiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZU5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsc3Vic2NyaWJlTGF0ZXN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXI9c3Vic2NyaWJlTGF0ZXN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlSXRlcmF0b3I9KGFzeW5jSXRlcmF0b3JQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xucmV0dXJuIG5ldyBQcm9taXNlKChhY2ssb2JzZXJ2ZXJFcnJvcik9PntcbmNvbnN0IHJlY3VyPSgpPT57XG5FLndoZW4oXG5FKGFzeW5jSXRlcmF0b3JQKS5uZXh0KCksXG4oe3ZhbHVlLGRvbmV9KT0+e1xuaWYoZG9uZSl7XG5pdGVyYXRpb25PYnNlcnZlci5maW5pc2gmJml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCh2YWx1ZSk7XG5hY2sodW5kZWZpbmVkKTtcbiB9ZWxzZXtcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlJiZcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlKHZhbHVlKTtcbnJlY3VyKCk7XG4gfVxuIH0sXG4ocmVhc29uKT0+e1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbChyZWFzb24pO1xuYWNrKHVuZGVmaW5lZCk7XG4gfSkuXG5jYXRjaChvYnNlcnZlckVycm9yKTtcbiB9O1xucmVjdXIoKTtcbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm9ic2VydmVJdGVyYXRvcihvYnNlcnZlSXRlcmF0b3IpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRpb249KGFzeW5jSXRlcmFibGVQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xucmV0dXJuIG9ic2VydmVJdGVyYXRvcihpdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uub2JzZXJ2ZUl0ZXJhdGlvbihvYnNlcnZlSXRlcmF0aW9uKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlTm90aWZpZXI9KG5vdGlmaWVyUCxpdGVyYXRpb25PYnNlcnZlcik9Plxub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpYmVMYXRlc3Qobm90aWZpZXJQKSxpdGVyYXRpb25PYnNlcnZlcik7JGjNj19vbmNlLm9ic2VydmVOb3RpZmllcihvYnNlcnZlTm90aWZpZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXSwib2JzZXJ2ZUl0ZXJhdG9yIjpbIm9ic2VydmVJdGVyYXRvciJdLCJvYnNlcnZlSXRlcmF0aW9uIjpbIm9ic2VydmVJdGVyYXRpb24iXSwib2JzZXJ2ZU5vdGlmaWVyIjpbIm9ic2VydmVOb3RpZmllciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC1FtKQ3QcAAN0HAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyIsIi4vbm90aWZpZXIuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3RvcGljLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6WyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCIsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbXV0sW1wiLi9ub3RpZmllci5qc1wiLCBbXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtdXSxbXCIuL3RvcGljLmpzXCIsIFtdXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtdXSxbXCIuL3N0b3Jlc3ViLmpzXCIsIFtdXSxbXCIuL3N0b3JlZC1ub3RpZmllci5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vcHVibGlzaC1raXQuanMiOltbIm1ha2VQdWJsaXNoS2l0IiwibWFrZVB1Ymxpc2hLaXQiXSxbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLFsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSIsIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSxbIkl0ZXJhYmxlRWFjaFRvcGljSSIsIkl0ZXJhYmxlRWFjaFRvcGljSSJdLFsiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLFsiU3Vic2NyaWJlclNoYXBlIiwiU3Vic2NyaWJlclNoYXBlIl1dLCIuL3N1YnNjcmliZS5qcyI6W1sic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUVhY2giXSxbInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCJdXSwiLi9ub3RpZmllci5qcyI6W1sibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyIl0sWyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiXSxbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXSxbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiXV0sIi4vc3Vic2NyaWJlci5qcyI6W1sibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb24iXSxbIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il1dLCIuL3RvcGljLmpzIjpbWyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIiwibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdXSwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6W1sib2JzZXJ2ZU5vdGlmaWVyIiwib2JzZXJ2ZU5vdGlmaWVyIl0sWyJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiXSxbIm9ic2VydmVJdGVyYXRpb24iLCJvYnNlcnZlSXRlcmF0aW9uIl0sWyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciIsIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADZW6LCcRAAAHEQAAAnAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL25vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEUsRmFyLG1ha2VQdWJsaXNoS2l0LHN1YnNjcmliZUxhdGVzdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChtYWtlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVMYXRlc3RcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcj0oc2hhcmFibGVJbnRlcm5hbHNQKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLnN1YnNjcmliZUxhdGVzdChzaGFyYWJsZUludGVybmFsc1ApLFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQpPT5cbkUoc2hhcmFibGVJbnRlcm5hbHNQKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlTm90aWZpZXJJbnRlcm5hbHM6YXN5bmMoKT0+c2hhcmFibGVJbnRlcm5hbHNQLFxuLypcblxuXG5cbiAgICAgKi9cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe25vdGlmaWVyfSl9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU5vdGlmaWVyKG1ha2VOb3RpZmllcik7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXI9KHN1YnNjcmliZXIpPT57XG4vKlxuXG4gICAqL1xuY29uc3QgYmFzZU5vdGlmaWVyPWhhcmRlbih7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQ9dW5kZWZpbmVkKT0+XG5FKHN1YnNjcmliZXIpLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuaGFyZGVuKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcktpdD0oLi4uaW5pdGlhbFN0YXRlQXJyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbmNvbnN0IG5vdGlmaWVyPW1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuXG5jb25zdCB1cGRhdGVyPUZhcigndXBkYXRlcicse1xudXBkYXRlU3RhdGU6KHN0YXRlKT0+cHVibGlzaGVyLnB1Ymxpc2goc3RhdGUpLFxuZmluaXNoOihjb21wbGV0aW9uKT0+cHVibGlzaGVyLmZpbmlzaChjb21wbGV0aW9uKSxcbmZhaWw6KHJlYXNvbik9PnB1Ymxpc2hlci5mYWlsKHJlYXNvbil9KTtcblxuXG5hc3NlcnQoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aDw9MSwndG9vIG1hbnkgYXJndW1lbnRzJyk7XG5pZihpbml0aWFsU3RhdGVBcnIubGVuZ3RoPT09MSl7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZUFyclswXSk7XG4gfVxuXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe25vdGlmaWVyLHVwZGF0ZXJ9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU5vdGlmaWVyS2l0KG1ha2VOb3RpZmllcktpdCk7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGU9KGFzeW5jSXRlcmFibGVQKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgb3B0TmV4dFByb21pc2U7XG5sZXQgY3VycmVudFVwZGF0ZUNvdW50PTBuO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGN1cnJlbnRSZXNwb25zZTtcbmxldCBmaW5hbD1mYWxzZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1GYXIoJ2Jhc2VOb3RpZmllcicse1xuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQ9LTFuKXtcbmlmKHVwZGF0ZUNvdW50PGN1cnJlbnRVcGRhdGVDb3VudCl7XG5pZihjdXJyZW50UmVzcG9uc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbiB9ZWxzZSBpZih1cGRhdGVDb3VudCE9PWN1cnJlbnRVcGRhdGVDb3VudCl7XG50aHJvdyBFcnJvcihcbidnZXRVcGRhdGVTaW5jZSBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgdXBkYXRlQ291bnQuJyk7XG5cbiB9XG5cbi8vXG5pZihmaW5hbCl7XG5hc3NlcnQoY3VycmVudFJlc3BvbnNlIT09dW5kZWZpbmVkKTtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG5pZighb3B0TmV4dFByb21pc2Upe1xuY29uc3QgbmV4dEl0ZXJSZXN1bHRQPUUoaXRlcmF0b3JQKS5uZXh0KCk7XG5vcHROZXh0UHJvbWlzZT1FLndoZW4oXG5uZXh0SXRlclJlc3VsdFAsXG4oe2RvbmUsdmFsdWV9KT0+e1xuYXNzZXJ0KCFmaW5hbCk7XG5pZihkb25lKXtcbmZpbmFsPXRydWU7XG4gfVxuY3VycmVudFVwZGF0ZUNvdW50Kz0xbjtcbmN1cnJlbnRSZXNwb25zZT1oYXJkZW4oe1xudmFsdWUsXG51cGRhdGVDb3VudDpkb25lP3VuZGVmaW5lZDpjdXJyZW50VXBkYXRlQ291bnR9KTtcblxub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9LFxuKF9yZWFzb24pPT57XG5maW5hbD10cnVlO1xuY3VycmVudFJlc3BvbnNlPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5uZXh0SXRlclJlc3VsdFA7XG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0pO1xuXG4gfVxucmV0dXJuIG9wdE5leHRQcm9taXNlO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLy9cbi8vXG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUobWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUpO1xuaGFyZGVuKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VOb3RpZmllciI6WyJtYWtlTm90aWZpZXIiXSwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiOlsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiXSwibWFrZU5vdGlmaWVyS2l0IjpbIm1ha2VOb3RpZmllcktpdCJdLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSI6WyJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB0ejOhLSsAAC0rAAAqAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3B1Ymxpc2gta2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vcGF0dGVybnMiLCJAYWdvcmljL3ZhdC1kYXRhIl0sImV4cG9ydHMiOlsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSIsIkl0ZXJhYmxlRWFjaFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIiwiUHVibGlzaGVySSIsIlN1YnNjcmliZXJJIiwiU3Vic2NyaWJlclNoYXBlIiwiVXBkYXRlQ291bnRTaGFwZSIsIm1ha2VQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHVibGlzaEtpdElLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEUsRmFyLG1ha2VQcm9taXNlS2l0LE0sZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGNhbkJlRHVyYWJsZSxwcmVwYXJlRXhvQ2xhc3NLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaM2PX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuY29uc3QgbWFrZVF1aWV0UmVqZWN0aW9uPShyZWFzb24pPT57XG5jb25zdCByZWplY3Rpb249aGFyZGVuKFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xudm9pZCBFLndoZW4ocmVqZWN0aW9uLHNpbmssc2luayk7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH07XG5jb25zdCB0b29GYXJSZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKFxuaGFyZGVuKEVycm9yKCdDYW5ub3QgcmVhZCBwYXN0IGVuZCBvZiBpdGVyYXRpb24uJykpKTtcblxuXG5jb25zdCAgICAgICAgUHVibGlzaGVyST1NLmludGVyZmFjZSgnUHVibGlzaGVyJyx7XG5wdWJsaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5maW5pc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKX0pO1xuXG5cbi8vXG4kaM2PX29uY2UuUHVibGlzaGVySShQdWJsaXNoZXJJKTtjb25zdCBVcGRhdGVDb3VudFNoYXBlPU0ub3IoTS5iaWdpbnQoKSxNLm51bWJlcigpKTskaM2PX29uY2UuVXBkYXRlQ291bnRTaGFwZShVcGRhdGVDb3VudFNoYXBlKTtcbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyST1NLmludGVyZmFjZSgnU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6TS5jYWxsKCkub3B0aW9uYWwoTS5iaWdpbnQoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRVcGRhdGVTaW5jZTpNLmNhbGwoKS5vcHRpb25hbChVcGRhdGVDb3VudFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5TdWJzY3JpYmVySShTdWJzY3JpYmVySSk7XG5cbmNvbnN0ICAgICAgICBwdWJsaXNoS2l0SUtpdD1oYXJkZW4oe1xucHVibGlzaGVyOlB1Ymxpc2hlckksXG5zdWJzY3JpYmVyOlN1YnNjcmliZXJJfSk7JGjNj19vbmNlLnB1Ymxpc2hLaXRJS2l0KHB1Ymxpc2hLaXRJS2l0KTtcblxuXG5jb25zdCAgICAgICAgRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZT1NLmludGVyZmFjZShcbidGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicsXG57XG5mb3JrOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksLy9cbm5leHQ6TS5jYWxsV2hlbigpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZShGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUVhY2hUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlRWFjaFRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLnN1YnNjcmliZUFmdGVyLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7JGjNj19vbmNlLkl0ZXJhYmxlRWFjaFRvcGljSShJdGVyYWJsZUVhY2hUb3BpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlTGF0ZXN0VG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUxhdGVzdFRvcGljJyx7XG5nZXRVcGRhdGVTaW5jZTpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLmdldFVwZGF0ZVNpbmNlLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7XG5cblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuSXRlcmFibGVMYXRlc3RUb3BpY0koSXRlcmFibGVMYXRlc3RUb3BpY0kpO1xuY29uc3Qgd2Vha01lbW9pemVVbmFyeT0oZm4pPT57XG5jb25zdCBjYWNoZT1uZXcgV2Vha01hcCgpO1xucmV0dXJuKGFyZyk9Pntcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb2FyZz1hcmc7XG5pZihjYWNoZS5oYXMob2FyZykpe1xucmV0dXJuIGNhY2hlLmdldChvYXJnKTtcbiB9XG5jb25zdCByZXN1bHQ9Zm4oYXJnKTtcbmNhY2hlLnNldChvYXJnLHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZD0ocmVjb3JkKT0+e1xuY29uc3R7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudH09XG5yZWNvcmQ7XG5pZihkb25lKXtcbi8vXG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDpwdWJsaXNoQ291bnR9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVB1Ymxpc2hLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFA7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUjtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcblxubGV0IGN1cnJlbnRQdWJsaXNoQ291bnQ9MG47XG5sZXQgY3VycmVudFA9dGFpbFA7XG5jb25zdCBhZHZhbmNlQ3VycmVudD0oZG9uZSx2YWx1ZSxyZWplY3Rpb24pPT57XG5pZih0YWlsUj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHVwZGF0ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGlvbi4nKTtcbiB9XG5cbmN1cnJlbnRQdWJsaXNoQ291bnQrPTFuO1xuY3VycmVudFA9dGFpbFA7XG5jb25zdCByZXNvbHZlQ3VycmVudD10YWlsUjtcblxuaWYoZG9uZSl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG4gfVxuXG5pZihyZWplY3Rpb24pe1xucmVzb2x2ZUN1cnJlbnQocmVqZWN0aW9uKTtcbiB9ZWxzZXtcbnJlc29sdmVDdXJyZW50KFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnQsXG50YWlsOnRhaWxQfSkpO1xuXG5cbiB9XG4gfTtcblxuY29uc3QgbWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkPXdlYWtNZW1vaXplVW5hcnkoXG5tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBzdWJzY3JpYmVyPUZhcignU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudD0tMW4pPT57XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5pZihwdWJsaXNoQ291bnQ9PT1jdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiB0YWlsUDtcbiB9ZWxzZSBpZihwdWJsaXNoQ291bnQ8Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT57XG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLnRoZW4obWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkKTtcbiB9XG51cGRhdGVDb3VudD1CaWdJbnQodXBkYXRlQ291bnQpO1xucmV0dXJuKFxuc3Vic2NyaWJlclxuLy9cbi8vXG4vL1xuLnN1YnNjcmliZUFmdGVyKHVwZGF0ZUNvdW50KVxuLy9cbi8vXG4udGhlbigoKT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSgpKSk7XG5cbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWJsaXNoZXI9RmFyKCdQdWJsaXNoZXInLHtcbnB1Ymxpc2g6KHZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQoZmFsc2UsdmFsdWUpO1xuIH0sXG5maW5pc2g6KGZpbmFsVmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLGZpbmFsVmFsdWUpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLHVuZGVmaW5lZCxtYWtlUXVpZXRSZWplY3Rpb24ocmVhc29uKSk7XG4gfX0pO1xuXG5yZXR1cm4gaGFyZGVuKHtwdWJsaXNoZXIsc3Vic2NyaWJlcn0pO1xuIH07JGjNj19vbmNlLm1ha2VQdWJsaXNoS2l0KG1ha2VQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlUHVibGlzaEtpdCk7XG5cbmNvbnN0IER1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZT1oYXJkZW4oe1xudmFsdWVEdXJhYmlsaXR5Ok0uYW55KCksXG5wdWJsaXNoQ291bnQ6TS5hbnkoKSxcbnN0YXR1czpNLmFueSgpLFxuaGFzVmFsdWU6TS5hbnkoKSxcbnZhbHVlOk0uYW55KCl9KTtcblxuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eT0nbWFuZGF0b3J5J309b3B0aW9ucztcbmFzc2VydC5lcXVhbCh2YWx1ZUR1cmFiaWxpdHksJ21hbmRhdG9yeScpO1xucmV0dXJue1xuLy9cbnZhbHVlRHVyYWJpbGl0eSxcblxuLy9cbnB1Ymxpc2hDb3VudDowbixcbnN0YXR1czonbGl2ZScsLy9cblxuLy9cbi8vXG4vL1xuaGFzVmFsdWU6ZmFsc2UsXG52YWx1ZTp1bmRlZmluZWR9O1xuXG4gfTtcblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qXG5cblxuICovXG5jb25zdCBnZXRFcGhlbWVyYWxLZXk9KGZhY2V0cyk9PmZhY2V0cy5wdWJsaXNoZXI7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlQ3VycmVudFA9KHN0YXRlLGZhY2V0cyx0YWlsKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmNvbnN0IGN1cnJlbnRQPWZvdW5kRGF0YSYmZm91bmREYXRhLmN1cnJlbnRQO1xuaWYoY3VycmVudFApe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1cblxuY29uc3R7cHVibGlzaENvdW50LHN0YXR1cyxoYXNWYWx1ZSx2YWx1ZX09c3RhdGU7XG5pZighaGFzVmFsdWUpe1xuYXNzZXJ0KHN0YXR1cz09PSdsaXZlJyk7XG5yZXR1cm4gdGFpbDtcbiB9XG5pZihzdGF0dXM9PT0nbGl2ZSd8fHN0YXR1cz09PSdmaW5pc2hlZCcpe1xuY29uc3QgY2VsbD1oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZTpzdGF0dXMhPT0nbGl2ZSd9LFxucHVibGlzaENvdW50LFxudGFpbH0pO1xuXG5yZXR1cm4gRS5yZXNvbHZlKGNlbGwpO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmYWlsZWQnKXtcbnJldHVybiBtYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9KHN0YXRlLGZhY2V0cyk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5pZihmb3VuZERhdGEpe1xucmV0dXJuIGZvdW5kRGF0YTtcbiB9XG5cbmNvbnN0e3N0YXR1c309c3RhdGU7XG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihzdGF0dXM9PT0nbGl2ZScpe1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmluaXNoZWQnfHxzdGF0dXM9PT0nZmFpbGVkJyl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbi8vXG5jb25zdCBvYmo9aGFyZGVuKHtjdXJyZW50UDp1bmRlZmluZWQsdGFpbFAsdGFpbFJ9KTtcbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoZXBoZW1lcmFsS2V5LG9iaik7XG5yZXR1cm4gb2JqO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQ9KGNvbnRleHQsdmFsdWUsdGFyZ2V0U3RhdHVzPSdsaXZlJyk9PntcbmNvbnN0e3N0YXRlLGZhY2V0c309Y29udGV4dDtcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eSxzdGF0dXN9PXN0YXRlO1xuaWYoc3RhdHVzIT09J2xpdmUnKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cbmNvbnN0IGRvbmU9dGFyZ2V0U3RhdHVzIT09J2xpdmUnO1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5PT09J21hbmRhdG9yeScpe1xuY2FuQmVEdXJhYmxlKHZhbHVlKXx8RmFpbCBgQ2Fubm90IGFjY2VwdCBub24tZHVyYWJsZSB2YWx1ZTogJHt2YWx1ZX1gO1xuIH1cbmNvbnN0e3RhaWxQOm9sZFRhaWxQLHRhaWxSOnJlc29sdmVPbGRUYWlsfT1cbnByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoc3RhdGUsZmFjZXRzKTtcbmFzc2VydC50eXBlb2YocmVzb2x2ZU9sZFRhaWwsJ2Z1bmN0aW9uJyk7XG5cbmNvbnN0IHB1Ymxpc2hDb3VudD1zdGF0ZS5wdWJsaXNoQ291bnQrMW47XG5zdGF0ZS5wdWJsaXNoQ291bnQ9cHVibGlzaENvdW50O1xuXG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihkb25lKXtcbnN0YXRlLnN0YXR1cz10YXJnZXRTdGF0dXM7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1cblxubGV0IGN1cnJlbnRQO1xuaWYodGFyZ2V0U3RhdHVzPT09J2ZhaWxlZCcpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuY29uc3QgcmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG5yZXNvbHZlT2xkVGFpbChyZWplY3Rpb24pO1xuIH1lbHNle1xuLy9cbi8vXG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHkhPT0naWdub3JlZCcmJmNhbkJlRHVyYWJsZSh2YWx1ZSkpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuIH1lbHNle1xuc3RhdGUuaGFzVmFsdWU9ZmFsc2U7XG5zdGF0ZS52YWx1ZT11bmRlZmluZWQ7XG4vL1xuY3VycmVudFA9b2xkVGFpbFA7XG4gfVxuXG5yZXNvbHZlT2xkVGFpbChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cblxuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChcbmdldEVwaGVtZXJhbEtleShmYWNldHMpLFxuaGFyZGVuKHtjdXJyZW50UCx0YWlsUCx0YWlsUn0pKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0PShiYWdnYWdlLGtpbmROYW1lKT0+e1xuLy9cbi8vXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9bWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZDtcblxuLypcblxuICAgKi9cbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxua2luZE5hbWUsXG5wdWJsaXNoS2l0SUtpdCxcbmluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlLFxue1xuLy9cbi8vXG5wdWJsaXNoZXI6e1xucHVibGlzaCh2YWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyx2YWx1ZSk7XG4gfSxcbmZpbmlzaChmaW5hbFZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLGZpbmFsVmFsdWUsJ2ZpbmlzaGVkJyk7XG4gfSxcbmZhaWwocmVhc29uKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHJlYXNvbiwnZmFpbGVkJyk7XG4gfX0sXG5cblxuLy9cbi8vXG5zdWJzY3JpYmVyOntcbnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudD0tMW4pe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuY29uc3R7cHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnR9PXN0YXRlO1xuY29uc3R7Y3VycmVudFAsdGFpbFB9PXByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoXG5zdGF0ZSxcbmZhY2V0cyk7XG5cbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UHx8cHJvdmlkZUN1cnJlbnRQKHN0YXRlLGZhY2V0cyx0YWlsUCk7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl7XG5jb25zdHtcbmZhY2V0czp7c3Vic2NyaWJlcn19PVxudGhpcztcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOkR1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZX0pO1xuXG5cbiB9OyRozY9fb25jZS5wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcbmhhcmRlbihwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCAgICAgICAgU3Vic2NyaWJlclNoYXBlPU0ucmVtb3RhYmxlKCdTdWJzY3JpYmVyJyk7JGjNj19vbmNlLlN1YnNjcmliZXJTaGFwZShTdWJzY3JpYmVyU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHVibGlzaGVySSI6WyJQdWJsaXNoZXJJIl0sIlVwZGF0ZUNvdW50U2hhcGUiOlsiVXBkYXRlQ291bnRTaGFwZSJdLCJTdWJzY3JpYmVySSI6WyJTdWJzY3JpYmVySSJdLCJwdWJsaXNoS2l0SUtpdCI6WyJwdWJsaXNoS2l0SUtpdCJdLCJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSwiSXRlcmFibGVFYWNoVG9waWNJIjpbIkl0ZXJhYmxlRWFjaFRvcGljSSJdLCJJdGVyYWJsZUxhdGVzdFRvcGljSSI6WyJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLCJtYWtlUHVibGlzaEtpdCI6WyJtYWtlUHVibGlzaEtpdCJdLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiOlsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sIlN1YnNjcmliZXJTaGFwZSI6WyJTdWJzY3JpYmVyU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqJ0YXBEIAAARCAAALgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLCJAZW5kby9mYXIiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxFLEZhcixvYnNlcnZlTm90aWZpZXI7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaM2PX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZE5vdGlmaWVyPShub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuYXNzZXJ0QWxsRGVmaW5lZCh7bm90aWZpZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcn0pO1xuXG5jb25zdCBtYXJzaGFsbFRvU3RvcmFnZT1tYWtlU2VyaWFsaXplVG9TdG9yYWdlKHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpO1xuXG5vYnNlcnZlTm90aWZpZXIobm90aWZpZXIse1xudXBkYXRlU3RhdGUodmFsdWUpe1xubWFyc2hhbGxUb1N0b3JhZ2UodmFsdWUpLmNhdGNoKChyZWFzb24pPT5cbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZE5vdGlmaWVyIGZhaWxlZCB0byB1cGRhdGVTdGF0ZScscmVhc29uKSk7XG5cbiB9LFxuZmFpbChyZWFzb24pe1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIGl0ZXJhdGUnLHJlYXNvbik7XG4gfX0pLlxuY2F0Y2goKHJlYXNvbik9PntcbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZE5vdGlmaWVyIGhhbHRlZCBpdGVyYXRpb24nLHJlYXNvbik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVkTm90aWZpZXI9RmFyKCdTdG9yZWROb3RpZmllcicse1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+RShub3RpZmllcikuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuZ2V0UGF0aDooKT0+RShzdG9yYWdlTm9kZSkuZ2V0UGF0aCgpLFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXJ9KTtcblxucmV0dXJuIHN0b3JlZE5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VTdG9yZWROb3RpZmllcihtYWtlU3RvcmVkTm90aWZpZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVN0b3JlZE5vdGlmaWVyIjpbIm1ha2VTdG9yZWROb3RpZmllciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACnEwIz7RUAAO0VAAAnAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3Jlc3ViLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiLCJtYWtlU3RvcmVkUHVibGlzaEtpdCIsIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiLCJtYWtlU3RvcmVkU3Vic2NyaWJlciIsIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsbWFrZU1hcnNoYWwsYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLG9ic2VydmVJdGVyYXRpb24sbWFrZVB1Ymxpc2hLaXQsbWFrZVN1YnNjcmlwdGlvbktpdCxzdWJzY3JpYmVFYWNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiYXNzZXJ0QWxsRGVmaW5lZFwiLCBbJGjNj19hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlU2VyaWFsaXplVG9TdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjNj19hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW1tcIm1ha2VTdWJzY3JpcHRpb25LaXRcIiwgWyRozY9fYSA9PiAobWFrZVN1YnNjcmlwdGlvbktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZvckVhY2hQdWJsaWNhdGlvblJlY29yZD1hc3luYyhzdWJzY3JpYmVyLGNvbnN1bWVWYWx1ZSk9Pntcbi8vXG4vL1xuY29uc3QgaXRlcmF0b3I9c3Vic2NyaWJlRWFjaChzdWJzY3JpYmVyKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxubGV0IGZpbmlzaGVkPWZhbHNlO1xuYXdhaXQgbnVsbDtcbndoaWxlKCFmaW5pc2hlZCl7XG5jb25zdHt2YWx1ZSxkb25lfT1hd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5hd2FpdCBjb25zdW1lVmFsdWUodmFsdWUpO1xuZmluaXNoZWQ9ISFkb25lO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKGZvckVhY2hQdWJsaWNhdGlvblJlY29yZCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmliZXI9KHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe3N1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcn0pO1xuXG5jb25zdCBtYXJzaGFsbFRvU3RvcmFnZT1tYWtlU2VyaWFsaXplVG9TdG9yYWdlKHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpO1xuXG4vL1xuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKHN1YnNjcmliZXIsbWFyc2hhbGxUb1N0b3JhZ2UpLmNhdGNoKChlcnIpPT57XG4vL1xuLy9cbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZFN1YnNjcmliZXIgZmFpbGVkIHRvIGl0ZXJhdGUnLGVycik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZXN1Yj1GYXIoJ1N0b3JlZFN1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFN0b3JlS2V5OigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRTdG9yZUtleSgpLFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXJ9KTtcblxucmV0dXJuIHN0b3Jlc3ViO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTdG9yZWRTdWJzY3JpYmVyKG1ha2VTdG9yZWRTdWJzY3JpYmVyKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaXB0aW9uPShcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsdW5kZWZpbmVkLHtcbm1hcnNoYWxTYXZlRXJyb3I6KCk9PnsgfSxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSk9PlxuXG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLy9cbmxldCBwdWJsaXNoRmFpbGVkPWZhbHNlO1xubGV0IHB1Ymxpc2hFeGNlcHRpb247XG5cbmNvbnN0IGZhaWw9KGVycik9PntcbnB1Ymxpc2hGYWlsZWQ9dHJ1ZTtcbnB1Ymxpc2hFeGNlcHRpb249ZXJyO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgcHVibGlzaFZhbHVlPShvYmopPT57XG5hc3NlcnQoc3RvcmFnZU5vZGUpO1xuaWYocHVibGlzaEZhaWxlZCl7XG4vL1xudGhyb3cgcHVibGlzaEV4Y2VwdGlvbjtcbiB9XG5cbi8vXG5FKG1hcnNoYWxsZXIpLlxudG9DYXBEYXRhKG9iaikuXG50aGVuKChzZXJpYWxpemVkKT0+e1xuY29uc3QgZW5jb2RlZD1KU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShlbmNvZGVkKTtcbiB9KS5cbmNhdGNoKGZhaWwpO1xuIH07XG5cbmlmKHN0b3JhZ2VOb2RlKXtcbi8vXG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmlwdGlvbix7XG51cGRhdGVTdGF0ZTpwdWJsaXNoVmFsdWUsXG5maW5pc2g6cHVibGlzaFZhbHVlfSkuXG5jYXRjaChmYWlsKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpcHRpb24nLHtcbi8vXG5nZXRTdG9yZUtleTphc3luYygpPT57XG5pZighc3RvcmFnZU5vZGUpe1xucmV0dXJuIGhhcmRlbih7c3Vic2NyaXB0aW9ufSk7XG4gfVxuY29uc3Qgc3RvcmVLZXk9YXdhaXQgRShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKTtcbnJldHVybiBoYXJkZW4oey4uLnN0b3JlS2V5LHN1YnNjcmlwdGlvbn0pO1xuIH0sXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcixcbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOigpPT5cbnN1YnNjcmlwdGlvbi5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFscygpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c3Vic2NyaXB0aW9uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmlwdGlvbi5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9OyRozY9fb25jZS5tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKG1ha2VTdG9yZWRTdWJzY3JpcHRpb24pO1xuaGFyZGVuKG1ha2VTdG9yZWRTdWJzY3JpcHRpb24pO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkUHVibGlzaGVyS2l0PShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyLGNoaWxkUGF0aCk9PntcbmNvbnN0e3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn09bWFrZVN1YnNjcmlwdGlvbktpdCgpO1xuXG5pZihzdG9yYWdlTm9kZSYmY2hpbGRQYXRoKXtcbnN0b3JhZ2VOb2RlPUUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGRQYXRoKTtcbiB9XG5cbi8vXG5jb25zdCBzdWJzY3JpYmVyPW1ha2VTdG9yZWRTdWJzY3JpcHRpb24oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXIpO1xuXG5cbnJldHVybntcbnB1Ymxpc2hlcjpwdWJsaWNhdGlvbixcbnN1YnNjcmliZXJ9O1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU3RvcmVkUHVibGlzaGVyS2l0KG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoS2l0PShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbnJldHVybntcbnB1Ymxpc2hlcixcbi8vXG5zdWJzY3JpYmVyOm1ha2VTdG9yZWRTdWJzY3JpYmVyKHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcil9O1xuXG4gfTskaM2PX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hLaXQobWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiXSwibWFrZVN0b3JlZFN1YnNjcmliZXIiOlsibWFrZVN0b3JlZFN1YnNjcmliZXIiXSwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiI6WyJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIl0sIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCJdLCJtYWtlU3RvcmVkUHVibGlzaEtpdCI6WyJtYWtlU3RvcmVkUHVibGlzaEtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAVB17zIRIAACESAAAoAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiXSwiZXhwb3J0cyI6WyJzdWJzY3JpYmUiLCJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlTGF0ZXN0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsRmFpbCxhbm5vdGF0ZUVycm9yLEUsRmFyLGlzT2JqZWN0LGlzVXBncmFkZURpc2Nvbm5lY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanNcIiwgW1tcImlzVXBncmFkZURpc2Nvbm5lY3Rpb25cIiwgWyRozY9fYSA9PiAoaXNVcGdyYWRlRGlzY29ubmVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCByZWNvbm5lY3RBc05lZWRlZD1hc3luYyhnZXR0ZXIsc2VlZD1bXSk9PntcbmxldCBkaXNjb25uZWN0aW9uO1xubGV0IGxhc3RWZXJzaW9uPS1JbmZpbml0eTtcbi8vXG5hd2FpdCBudWxsO1xuZm9yKGxldCBpPTA7O2krPTEpe1xudHJ5e1xuY29uc3QgcmVzdWx0UD1pPHNlZWQubGVuZ3RoP3NlZWRbaV06Z2V0dGVyKCk7XG5jb25zdCByZXN1bHQ9YXdhaXQgcmVzdWx0UDtcbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKGVycil7XG5pZihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGVycikpe1xuaWYoIWRpc2Nvbm5lY3Rpb24pe1xuZGlzY29ubmVjdGlvbj1lcnI7XG4gfVxuY29uc3R7aW5jYXJuYXRpb25OdW1iZXI6dmVyc2lvbn09ZXJyO1xuaWYodmVyc2lvbj5sYXN0VmVyc2lvbil7XG4vL1xuLy9cbi8vXG5sYXN0VmVyc2lvbj12ZXJzaW9uO1xuY29udGludWU7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbmlmKGlzT2JqZWN0KGVycikmJmRpc2Nvbm5lY3Rpb24mJmRpc2Nvbm5lY3Rpb24hPT1lcnIpe1xudHJ5e1xuYW5ub3RhdGVFcnJvcihcbmVycixcblggYEF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGRpc2Nvbm5lY3Rpb246ICR7ZGlzY29ubmVjdGlvbn1gKTtcblxuIH1jYXRjaChfZXJyKXtcbi8vXG4gfVxuIH1cbnRocm93IGVycjtcbiB9XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZT0oaXRQKT0+XG5GYXIoJ0FzeW5jSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGl0PUUoaXRQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbmNvbnN0IHNlbGY9RmFyKCdBc3luY0l0ZXJhYmxlSXRlcmF0b3InLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9PkUoaXQpLm5leHQoKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zdWJzY3JpYmUoc3Vic2NyaWJlKTtcbmNvbnN0IG1ha2VFYWNoSXRlcmF0b3I9KHRvcGljLG5leHRDZWxsUCk9Pntcbi8vXG4vL1xuY29uc3Qgc2VsZj1GYXIoJ0VhY2hJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6KCk9PntcbmNvbnN0e1xuaGVhZDpyZXN1bHRQLFxucHVibGlzaENvdW50OnB1Ymxpc2hDb3VudFAsXG50YWlsOnRhaWxQfT1cbkUuZ2V0KG5leHRDZWxsUCk7XG5cbi8vXG4vL1xuY29uc3QgZ2V0U3VjY2Vzc29yPWFzeW5jKCk9PntcbmNvbnN0IHB1Ymxpc2hDb3VudD1hd2FpdCBwdWJsaXNoQ291bnRQO1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuY29uc3Qgc3VjY2Vzc29yPWF3YWl0IEUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG5jb25zdCBuZXdQdWJsaXNoQ291bnQ9c3VjY2Vzc29yLnB1Ymxpc2hDb3VudDtcbmlmKG5ld1B1Ymxpc2hDb3VudCE9PXB1Ymxpc2hDb3VudCsxbil7XG5GYWlsIGBlYWNoSXRlcmF0b3IgYnJva2VuIGJ5IGdhcCBmcm9tIHB1Ymxpc2hDb3VudCAke3B1Ymxpc2hDb3VudH0gdG8gJHtuZXdQdWJsaXNoQ291bnR9YDtcbiB9XG5yZXR1cm4gc3VjY2Vzc29yO1xuIH07XG5cbi8vXG4vL1xubmV4dENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKGdldFN1Y2Nlc3NvcixbdGFpbFBdKTtcblxuLy9cbi8vXG4vL1xuLy9cbnZvaWQgRS53aGVuKHB1Ymxpc2hDb3VudFAsc2luayxzaW5rKTtcbnZvaWQgRS53aGVuKG5leHRDZWxsUCxzaW5rLHNpbmspO1xucmV0dXJuIHJlc3VsdFA7XG4gfSxcbmZvcms6KCk9Pm1ha2VFYWNoSXRlcmF0b3IodG9waWMsbmV4dENlbGxQKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUVhY2g9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdFYWNoSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGZpcnN0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoKCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKCkpO1xucmV0dXJuIG1ha2VFYWNoSXRlcmF0b3IodG9waWMsZmlyc3RDZWxsUCk7XG4gfX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlRWFjaChzdWJzY3JpYmVFYWNoKTtcbmhhcmRlbihzdWJzY3JpYmVFYWNoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNsb25lTGF0ZXN0SXRlcmF0b3I9KHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpPT57XG5sZXQgbXV0ZXg9UHJvbWlzZS5yZXNvbHZlKCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlcXVlc3ROZXh0UmVzdWx0PWFzeW5jKCk9PntcbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG5jb25zdHt2YWx1ZSx1cGRhdGVDb3VudH09YXdhaXQgcmVjb25uZWN0QXNOZWVkZWQoKCk9PlxuRSh0b3BpYykuZ2V0VXBkYXRlU2luY2UobG9jYWxVcGRhdGVDb3VudCkpO1xuXG4vL1xubG9jYWxVcGRhdGVDb3VudD11cGRhdGVDb3VudDtcblxuLy9cbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnRlcm1pbmFsUmVzdWx0PWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH07XG5cbmNvbnN0IHNlbGY9RmFyKCdMYXRlc3RJdGVyYXRvcicse1xuZm9yazooKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbmV4dFJlc3VsdD1tdXRleC50aGVuKG1heWJlUmVxdWVzdE5leHRSZXN1bHQpO1xubXV0ZXg9bmV4dFJlc3VsdC50aGVuKHNpbmssc2luayk7XG4vL1xuXG5yZXR1cm4gbmV4dFJlc3VsdDtcbiB9fSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VMYXRlc3RJdGVyYXRvcj0odG9waWMpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVMYXRlc3Q9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdMYXRlc3RJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+bWFrZUxhdGVzdEl0ZXJhdG9yKHRvcGljKX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlTGF0ZXN0KHN1YnNjcmliZUxhdGVzdCk7XG5oYXJkZW4oc3Vic2NyaWJlTGF0ZXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN1YnNjcmliZSI6WyJzdWJzY3JpYmUiXSwic3Vic2NyaWJlRWFjaCI6WyJzdWJzY3JpYmVFYWNoIl0sInN1YnNjcmliZUxhdGVzdCI6WyJzdWJzY3JpYmVMYXRlc3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh2h7X9EHAADRBwAAKQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vdG9waWMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixzdWJzY3JpYmVFYWNoLG1ha2VQdWJsaXNoS2l0LG1ha2VQaW5uZWRIaXN0b3J5VG9waWM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUVhY2hcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlRWFjaCA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi90b3BpYy5qc1wiLCBbW1wibWFrZVBpbm5lZEhpc3RvcnlUb3BpY1wiLCBbJGjNj19hID0+IChtYWtlUGlubmVkSGlzdG9yeVRvcGljID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uPSh0b3BpYyk9PntcbmNvbnN0IHN1YnNjcmlwdGlvbj1GYXIoJ1N1YnNjcmlwdGlvbicse1xuLi4uc3Vic2NyaWJlRWFjaCh0b3BpYyksXG5zdWJzY3JpYmVBZnRlcjphc3luYyhwdWJsaXNoQ291bnQpPT5FKHRvcGljKS5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFsczphc3luYygpPT50b3BpYyxcblxuZ2V0U3RvcmVLZXk6KCk9PmhhcmRlbih7c3Vic2NyaXB0aW9ufSl9KTtcblxucmV0dXJuIHN1YnNjcmlwdGlvbjtcbiB9OyRozY9fb25jZS5tYWtlU3Vic2NyaXB0aW9uKG1ha2VTdWJzY3JpcHRpb24pO1xuaGFyZGVuKG1ha2VTdWJzY3JpcHRpb24pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVN1YnNjcmlwdGlvbktpdD0oKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbi8vXG4vL1xuXG5jb25zdCBwaW5uZWRIaXN0b3J5VG9waWM9bWFrZVBpbm5lZEhpc3RvcnlUb3BpYyhzdWJzY3JpYmVyKTtcbmNvbnN0IHN1YnNjcmlwdGlvbj1tYWtlU3Vic2NyaXB0aW9uKHBpbm5lZEhpc3RvcnlUb3BpYyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWJsaWNhdGlvbj1GYXIoJ3B1YmxpY2F0aW9uJyx7XG51cGRhdGVTdGF0ZToobm9uRmluYWxWYWx1ZSk9PnB1Ymxpc2hlci5wdWJsaXNoKG5vbkZpbmFsVmFsdWUpLFxuZmluaXNoOihjb21wbGV0aW9uKT0+cHVibGlzaGVyLmZpbmlzaChjb21wbGV0aW9uKSxcbmZhaWw6KHJlYXNvbik9PnB1Ymxpc2hlci5mYWlsKHJlYXNvbil9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259KTtcbiB9OyRozY9fb25jZS5tYWtlU3Vic2NyaXB0aW9uS2l0KG1ha2VTdWJzY3JpcHRpb25LaXQpO1xuaGFyZGVuKG1ha2VTdWJzY3JpcHRpb25LaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVN1YnNjcmlwdGlvbiI6WyJtYWtlU3Vic2NyaXB0aW9uIl0sIm1ha2VTdWJzY3JpcHRpb25LaXQiOlsibWFrZVN1YnNjcmlwdGlvbktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABHWhra7QMAAO0DAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGlubmVkSGlzdG9yeVRvcGljPSh0b3BpYyk9Pntcbi8vXG5cbi8vXG5jb25zdCBwaW5uZWRQdWJMaXN0PXRvcGljLnN1YnNjcmliZUFmdGVyKCk7XG5cbnJldHVybiBGYXIoJ1Bpbm5lZEhpc3RvcnlUb3BpYycse1xuc3Vic2NyaWJlQWZ0ZXI6YXN5bmMocHVibGlzaENvdW50PS0xbik9PntcbmlmKHB1Ymxpc2hDb3VudD09PS0xbil7XG5yZXR1cm4gcGlubmVkUHViTGlzdDtcbiB9XG5yZXR1cm4gdG9waWMuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbiB9LFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQ9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybiB0b3BpYy5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCk7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVBpbm5lZEhpc3RvcnlUb3BpYyhtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbmhhcmRlbihtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQaW5uZWRIaXN0b3J5VG9waWMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAqAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADIQNAGlA0AAJQNAAAhAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIiwiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwiQGVuZG8vZXhvIiwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIiwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsIi4vdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIiwibXVzdE1hdGNoIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanNcIiwgW11dLFtcIkBlbmRvL2V4b1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5TWFwLmpzXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzXCIsIFtdXSxbXCIuL3R5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDskaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPAiq641BQAANQUAACwAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lNYXA9KHRhZz0na2V5Jyk9PntcbmNvbnN0IG09bmV3IE1hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbm0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIG0uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbnJldHVybiBtLmdldChrZXkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uZGVsZXRlKGtleSk7XG4gfSxcbmtleXM6KCk9Pm0ua2V5cygpLFxudmFsdWVzOigpPT5tLnZhbHVlcygpLFxuZW50cmllczooKT0+bS5lbnRyaWVzKCksXG5nZXRTaXplOigpPT5tLnNpemUsXG5jbGVhcjooKT0+bS5jbGVhcigpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5TWFwKG1ha2VMZWdhY3lNYXApO1xuaGFyZGVuKG1ha2VMZWdhY3lNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeU1hcCI6WyJtYWtlTGVnYWN5TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALrETe33BAAA9wQAADAAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lXZWFrTWFwPSh0YWc9J2tleScpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3bT1uZXcgV2Vha01hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiF3bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG53bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gd20uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovd20uZ2V0KGtleSkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5kZWxldGUoa2V5KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5V2Vha01hcChtYWtlTGVnYWN5V2Vha01hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeVdlYWtNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeVdlYWtNYXAiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAO148gpwQAACcEAAAMQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyIsIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZS11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImZpbHRlckl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHNcIiwgWyRozY9fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRozY9fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1hcFN0b3JlTWV0aG9kcyhtYWtlTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyBNYXAoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnbWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ21hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJNYXBTdG9yZShtYWtlU2NhbGFyTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhck1hcFN0b3JlIjpbIm1ha2VTY2FsYXJNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYLN8lzQsAAM0LAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhcixmaWx0ZXJJdGVyYWJsZSxjb21wYXJlUmFuayxhc3NlcnRTY2FsYXJLZXksbWFrZUNvcHlTZXQsbWF0Y2hlcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyxtYWtlQ3VycmVudEtleXNLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZmlsdGVySXRlcmFibGVcIiwgWyRozY9fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXV1dLFtcIi4vc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtbXCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kc1wiLCBbJGjNj19hID0+IChtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjNj19hID0+IChtYWtlQ3VycmVudEtleXNLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9Pmpzc2V0LmtleXMoKSxcbihrKT0+anNzZXQuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbmtleU5hbWUpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkP1xuaXRlcmFibGVLZXlzOlxuZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLChrKT0+bWF0Y2hlcyhrLGtleVBhdHQpKTtcblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhcbmpzc2V0LFxuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbmtleU5hbWUpLFxuXG5cbmtleXMsXG5cbnZhbHVlczprZXlzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQpPT5tYWtlQ29weVNldChrZXlzKGtleVBhdHQpKSxcblxuZ2V0U2l6ZTooa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/anNzZXQuc2l6ZTpbLi4ua2V5cyhrZXlQYXR0KV0ubGVuZ3RoLFxuXG5jbGVhcjooa2V5UGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkKXtcbmpzc2V0LmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQpKXtcbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU2V0U3RvcmVNZXRob2RzKG1ha2VTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTZXRTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNzZXQ9bmV3IFNldCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFNldFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVNldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyU2V0U3RvcmUobWFrZVNjYWxhclNldFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVNldFN0b3JlTWV0aG9kcyI6WyJtYWtlU2V0U3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJTZXRTdG9yZSI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6Q453LANAACwDQAANQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLGFzc2VydFBhc3NhYmxlLHBhc3NTdHlsZU9mLGdldENvcHlNYXBFbnRyaWVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weU1hcEVudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGlzQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyhsb25nTGl2ZWQ/V2Vha01hcDpNYXApKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ3dlYWtNYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrTWFwU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha01hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgV2Vha01hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhcldlYWtNYXBTdG9yZShtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUfScVcwoAAHMKAAA1AAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoaXNDb3B5U2V0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNzZXQuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzc2V0LmhhcyhrZXkpO1xuIH0sXG5cbmFkZDooa2V5KT0+e1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGtleXMpPT57XG5pZih0eXBlb2Yga2V5c1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oa2V5cykmJmlzQ29weVNldChrZXlzKSl7XG4vL1xua2V5cz1nZXRDb3B5U2V0S2V5cyhrZXlzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtrZXlzfWA7XG4gfVxuIH1cbmZvcihjb25zdCBrZXkgb2YvKiAgICAgICAgICAgICAgICAgICAgICAqL2tleXMpe1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUobWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAedsLh6sOAACrDgAALgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSIsImlzQ29weU1hcCIsImlzQ29weVNldCIsIm1ha2VBdG9taWNQcm92aWRlciIsIm1ha2VDdXJyZW50S2V5c0tpdCIsInByb3ZpZGVMYXp5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxGYXIsTSxtYXRjaGVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5tYXRjaGVzKHMsTS5zZXQoKSk7XG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmNvbnN0ICAgICAgICBpc0NvcHlNYXA9KG0pPT5tYXRjaGVzKG0sTS5tYXAoKSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmNvbnN0ICAgICAgICBtYWtlQ3VycmVudEtleXNLaXQ9KFxuZ2V0UmF3S2V5cyxcbmNoZWNrSGFzLFxuY29tcGFyZSxcbmFzc2VydE9rVG9BZGQsXG5hc3NlcnRPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmxldCB1cGRhdGVDb3VudD0wO1xubGV0IHNvcnRlZEtleXNNZW1vO1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkFkZD0oayx2PXVuZGVmaW5lZCk9PntcbmFzc2VydE9rVG9BZGQoayx2KTtcbnVwZGF0ZUNvdW50Kz0xO1xuc29ydGVkS2V5c01lbW89dW5kZWZpbmVkO1xuIH07XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uRGVsZXRlPShrKT0+YXNzZXJ0T2tUb0RlbGV0ZSYmYXNzZXJ0T2tUb0RlbGV0ZShrKTtcblxuY29uc3QgZ2V0U29ydGVkS2V5cz0oKT0+e1xuaWYoc29ydGVkS2V5c01lbW89PT11bmRlZmluZWQpe1xuc29ydGVkS2V5c01lbW89aGFyZGVuKFsuLi5nZXRSYXdLZXlzKCldLnNvcnQoY29tcGFyZSkpO1xuIH1cbnJldHVybiBzb3J0ZWRLZXlzTWVtbztcbiB9O1xuXG5jb25zdCBpdGVyYWJsZUtleXM9RmFyKCdJdGVyYWJsZSBvZiBrZXlzJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgZ2VuZXJhdGlvbj11cGRhdGVDb3VudDtcbmdldFNvcnRlZEtleXMoKTtcbmNvbnN0IGxlbj1zb3J0ZWRLZXlzTWVtby5sZW5ndGg7XG5sZXQgaT0wO1xucmV0dXJuIEZhcignSXRlcmF0b3Igb2Yga2V5cycse1xubmV4dDooKT0+e1xuZ2VuZXJhdGlvbj09PXVwZGF0ZUNvdW50fHxGYWlsIGBTdG9yZSAke3Eoa2V5TmFtZSl9IGN1cnNvciBzdGFsZWA7XG4vL1xuLy9cbmZvcig7Oyl7XG5pZihpPGxlbil7XG5jb25zdCB2YWx1ZT1zb3J0ZWRLZXlzTWVtb1tpXTtcbmkrPTE7XG5pZihjaGVja0hhcyh2YWx1ZSkpe1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG4gfVxuIH19KTtcblxuIH19KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmFzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG5pdGVyYWJsZUtleXN9KTtcblxuIH07JGjNj19vbmNlLm1ha2VDdXJyZW50S2V5c0tpdChtYWtlQ3VycmVudEtleXNLaXQpO1xuaGFyZGVuKG1ha2VDdXJyZW50S2V5c0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByb3ZpZGVMYXp5PShtYXBTdG9yZSxrZXksbWFrZVZhbHVlKT0+e1xuaWYoIW1hcFN0b3JlLmhhcyhrZXkpKXtcbm1hcFN0b3JlLmluaXQoa2V5LG1ha2VWYWx1ZShrZXkpKTtcbiB9XG5yZXR1cm4gbWFwU3RvcmUuZ2V0KGtleSk7XG4gfTskaM2PX29uY2UucHJvdmlkZUxhenkocHJvdmlkZUxhenkpO1xuaGFyZGVuKHByb3ZpZGVMYXp5KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUF0b21pY1Byb3ZpZGVyPShzdG9yZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGVuZGluZz1uZXcgTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVBc3luYz0oa2V5LG1ha2VWYWx1ZSxmaW5pc2hWYWx1ZSk9PntcbmlmKHN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoc3RvcmUuZ2V0KGtleSkpO1xuIH1cbmlmKCFwZW5kaW5nLmhhcyhrZXkpKXtcbmNvbnN0IHZhbFA9bWFrZVZhbHVlKGtleSkuXG50aGVuKCh2KT0+e1xuc3RvcmUuaW5pdChrZXksdik7XG5yZXR1cm4gdjtcbiB9KS5cbnRoZW4oKHYpPT57XG5pZihmaW5pc2hWYWx1ZSl7XG5yZXR1cm4gZmluaXNoVmFsdWUoa2V5LHYpLnRoZW4oKCk9PnYpO1xuIH1cbnJldHVybiB2O1xuIH0pLlxuZmluYWxseSgoKT0+e1xucGVuZGluZy5kZWxldGUoa2V5KTtcbiB9KTtcbnBlbmRpbmcuc2V0KGtleSx2YWxQKTtcbiB9XG5jb25zdCB2YWxQPXBlbmRpbmcuZ2V0KGtleSk7XG5hc3NlcnQodmFsUCk7XG5yZXR1cm4gdmFsUDtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtwcm92aWRlQXN5bmN9KTtcbiB9OyRozY9fb25jZS5tYWtlQXRvbWljUHJvdmlkZXIobWFrZUF0b21pY1Byb3ZpZGVyKTtcbmhhcmRlbihtYWtlQXRvbWljUHJvdmlkZXIpO1xuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGVuZFRvU3RvcmVkQXJyYXk9KG1hcFN0b3JlLGtleSxpdGVtKT0+e1xuaWYobWFwU3RvcmUuaGFzKGtleSkpe1xuY29uc3QgZXh0YW50PW1hcFN0b3JlLmdldChrZXkpO1xubWFwU3RvcmUuc2V0KGtleSxoYXJkZW4oWy4uLmV4dGFudCxpdGVtXSkpO1xuIH1lbHNle1xubWFwU3RvcmUuaW5pdChrZXksaGFyZGVuKFtpdGVtXSkpO1xuIH1cbiB9OyRozY9fb25jZS5hcHBlbmRUb1N0b3JlZEFycmF5KGFwcGVuZFRvU3RvcmVkQXJyYXkpO1xuaGFyZGVuKGFwcGVuZFRvU3RvcmVkQXJyYXkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNDb3B5U2V0IjpbImlzQ29weVNldCJdLCJpc0NvcHlNYXAiOlsiaXNDb3B5TWFwIl0sIm1ha2VDdXJyZW50S2V5c0tpdCI6WyJtYWtlQ3VycmVudEtleXNLaXQiXSwicHJvdmlkZUxhenkiOlsicHJvdmlkZUxhenkiXSwibWFrZUF0b21pY1Byb3ZpZGVyIjpbIm1ha2VBdG9taWNQcm92aWRlciJdLCJhcHBlbmRUb1N0b3JlZEFycmF5IjpbImFwcGVuZFRvU3RvcmVkQXJyYXkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA33gQZiICAAAiAgAAHAAAAEBhZ29yaWMvdGltZS12MC4zLjIvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvdGltZU1hdGguanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy90aW1lTWF0aC5qcyIsIi4vc3JjL3R5cGVHdWFyZHMuanMiLCIuL3NyYy90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvdGltZU1hdGguanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADGdYs5xEwAAcRMAACMAAABAYWdvcmljL3RpbWUtdjAuMy4yL3NyYy90aW1lTWF0aC5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiVGltZU1hdGgiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LEZhaWwscSxtdXN0TWF0Y2gsUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUsVGltZXN0YW1wUmVjb3JkU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJUaW1lc3RhbXBSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChUaW1lc3RhbXBSZWNvcmRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYWdyZWVkVGltZXJCcmFuZD0obGVmdEJyYW5kLHJpZ2h0QnJhbmQpPT57XG5pZihsZWZ0QnJhbmQ9PT11bmRlZmluZWQpe1xuaWYocmlnaHRCcmFuZD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1lbHNle1xucmV0dXJuIHJpZ2h0QnJhbmQ7XG4gfVxuIH1lbHNlIGlmKHJpZ2h0QnJhbmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGxlZnRCcmFuZDtcbiB9ZWxzZXtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgVGltZXJCcmFuZHMgbXVzdCBtYXRjaDogJHtxKGxlZnRCcmFuZCl9IHZzICR7cShyaWdodEJyYW5kKX1gO1xucmV0dXJuIGxlZnRCcmFuZDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2hhcmVkVGltZXJCcmFuZD0obGVmdCxyaWdodCk9PntcbmNvbnN0IGxlZnRCcmFuZD10eXBlb2YgbGVmdD09PSdiaWdpbnQnP3VuZGVmaW5lZDpsZWZ0LnRpbWVyQnJhbmQ7XG5jb25zdCByaWdodEJyYW5kPXR5cGVvZiByaWdodD09PSdiaWdpbnQnP3VuZGVmaW5lZDpyaWdodC50aW1lckJyYW5kO1xucmV0dXJuIGFncmVlZFRpbWVyQnJhbmQobGVmdEJyYW5kLHJpZ2h0QnJhbmQpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBhYnNMaWtlPShsZWZ0LHJpZ2h0LGFic1ZhbHVlKT0+e1xuTmF0KGFic1ZhbHVlKTtcbmNvbnN0IHRpbWVyQnJhbmQ9c2hhcmVkVGltZXJCcmFuZChsZWZ0LHJpZ2h0KTtcbmlmKHRpbWVyQnJhbmQpe1xucmV0dXJuIGhhcmRlbih7XG50aW1lckJyYW5kLFxuYWJzVmFsdWV9KTtcblxuIH1lbHNle1xucmV0dXJuIGFic1ZhbHVlO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmVsTGlrZT0obGVmdCxyaWdodCxyZWxWYWx1ZSk9Pntcbk5hdChyZWxWYWx1ZSk7XG5jb25zdCB0aW1lckJyYW5kPXNoYXJlZFRpbWVyQnJhbmQobGVmdCxyaWdodCk7XG5pZih0aW1lckJyYW5kKXtcbnJldHVybiBoYXJkZW4oe1xudGltZXJCcmFuZCxcbnJlbFZhbHVlfSk7XG5cbiB9ZWxzZXtcbnJldHVybiByZWxWYWx1ZTtcbiB9XG4gfTtcblxuLy9cbi8vXG4vL1xuXG5jb25zdCBhYnNWYWx1ZT0oYWJzKT0+e1xuaWYodHlwZW9mIGFicz09PSdiaWdpbnQnKXtcbnJldHVybiBOYXQoYWJzKTtcbiB9XG5tdXN0TWF0Y2goYWJzLFRpbWVzdGFtcFJlY29yZFNoYXBlLCd0aW1lc3RhbXAnKTtcbnJldHVybiBOYXQoYWJzLmFic1ZhbHVlKTtcbiB9O1xuXG5jb25zdCByZWxWYWx1ZT0ocmVsKT0+e1xuaWYodHlwZW9mIHJlbD09PSdiaWdpbnQnKXtcbnJldHVybiBOYXQocmVsKTtcbiB9XG5tdXN0TWF0Y2gocmVsLFJlbGF0aXZlVGltZVJlY29yZFNoYXBlLCdyZWxhdGl2ZScpO1xucmV0dXJuIE5hdChyZWwucmVsVmFsdWUpO1xuIH07XG5cbmNvbnN0IG1ha2VUaW1lc3RhbXBSZWNvcmQ9KGFicyx0aW1lckJyYW5kKT0+XG5oYXJkZW4oe2Fic1ZhbHVlOmFicyx0aW1lckJyYW5kfSk7XG5jb25zdCBtYWtlUmVsYXRpdmVUaW1lUmVjb3JkPShyZWwsdGltZXJCcmFuZCk9PlxuaGFyZGVuKHtyZWxWYWx1ZTpyZWwsdGltZXJCcmFuZH0pO1xuXG5jb25zdCBjb2VyY2VUaW1lc3RhbXBSZWNvcmQ9KHRzLGJyYW5kKT0+e1xuYnJhbmR8fEZhaWwgYG11c3QgaGF2ZSBhIGJyYW5kYDtcbmlmKHR5cGVvZiB0cz09PSdudW1iZXInKXtcbnRzPU5hdCh0cyk7XG4gfVxuaWYodHlwZW9mIHRzPT09J2JpZ2ludCcpe1xucmV0dXJuIG1ha2VUaW1lc3RhbXBSZWNvcmQodHMsYnJhbmQpO1xuIH1lbHNle1xuY29uc3R7dGltZXJCcmFuZH09dHM7XG5tdXN0TWF0Y2godHMsVGltZXN0YW1wUmVjb3JkU2hhcGUsJ3RpbWVzdGFtcCcpO1xuYWdyZWVkVGltZXJCcmFuZCh0aW1lckJyYW5kLGJyYW5kKTtcbnJldHVybiB0cztcbiB9XG4gfTtcblxuY29uc3QgY29lcmNlUmVsYXRpdmVUaW1lUmVjb3JkPShydCxicmFuZCk9PntcbmJyYW5kfHxGYWlsIGBtdXN0IGhhdmUgYSBicmFuZGA7XG5pZih0eXBlb2YgcnQ9PT0nbnVtYmVyJyl7XG5ydD1OYXQocnQpO1xuIH1cbmlmKHR5cGVvZiBydD09PSdiaWdpbnQnKXtcbnJldHVybiBtYWtlUmVsYXRpdmVUaW1lUmVjb3JkKHJ0LGJyYW5kKTtcbiB9ZWxzZXtcbmNvbnN0e3RpbWVyQnJhbmR9PXJ0O1xubXVzdE1hdGNoKHJ0LFJlbGF0aXZlVGltZVJlY29yZFNoYXBlLCdyZWxhdGl2ZVRpbWUnKTtcbmFncmVlZFRpbWVyQnJhbmQodGltZXJCcmFuZCxicmFuZCk7XG5yZXR1cm4gcnQ7XG4gfVxuIH07XG5cbmNvbnN0IGFkZEFic1JlbD0oYWJzLHJlbCk9PlxuYWJzTGlrZShhYnMscmVsLGFic1ZhbHVlKGFicykrcmVsVmFsdWUocmVsKSk7XG5cbmNvbnN0IGFkZFJlbFJlbD0ocmVsMSxyZWwyKT0+XG5yZWxMaWtlKHJlbDEscmVsMixyZWxWYWx1ZShyZWwxKStyZWxWYWx1ZShyZWwyKSk7XG5cbmNvbnN0IHN1YnRyYWN0QWJzQWJzPShhYnMxLGFiczIpPT5cbnJlbExpa2UoYWJzMSxhYnMyLGFic1ZhbHVlKGFiczEpLWFic1ZhbHVlKGFiczIpKTtcblxuY29uc3QgY2xhbXBlZFN1YnRyYWN0QWJzQWJzPShhYnMxLGFiczIpPT57XG5jb25zdCB2YWwxPWFic1ZhbHVlKGFiczEpO1xuY29uc3QgdmFsMj1hYnNWYWx1ZShhYnMyKTtcbnJldHVybiByZWxMaWtlKGFiczEsYWJzMix2YWwxPnZhbDI/dmFsMS12YWwyOjBuKTtcbiB9O1xuXG5jb25zdCBzdWJ0cmFjdEFic1JlbD0oYWJzLHJlbCk9PlxuYWJzTGlrZShhYnMscmVsLGFic1ZhbHVlKGFicyktcmVsVmFsdWUocmVsKSk7XG5cbmNvbnN0IHN1YnRyYWN0UmVsUmVsPShyZWwxLHJlbDIpPT5cbnJlbExpa2UocmVsMSxyZWwyLHJlbFZhbHVlKHJlbDEpLXJlbFZhbHVlKHJlbDIpKTtcblxuY29uc3QgaXNSZWxaZXJvPShyZWwpPT5yZWxWYWx1ZShyZWwpPT09MG47XG5cbmNvbnN0IG11bHRpcGx5UmVsTmF0PShyZWwsbmF0KT0+cmVsTGlrZShyZWwsbmF0LHJlbFZhbHVlKHJlbCkqbmF0KTtcblxuY29uc3QgZGl2aWRlUmVsTmF0PShyZWwsbmF0KT0+cmVsTGlrZShyZWwsbmF0LHJlbFZhbHVlKHJlbCkvbmF0KTtcblxuY29uc3QgZGl2aWRlUmVsUmVsPShyZWwxLHJlbDIpPT57XG5zaGFyZWRUaW1lckJyYW5kKHJlbDEscmVsMik7Ly9cbnJldHVybiByZWxWYWx1ZShyZWwxKS9yZWxWYWx1ZShyZWwyKTtcbiB9O1xuXG5jb25zdCBtb2RBYnNSZWw9KGFicyxzdGVwKT0+XG5yZWxMaWtlKGFicyxzdGVwLGFic1ZhbHVlKGFicyklcmVsVmFsdWUoc3RlcCkpO1xuXG5jb25zdCBtb2RSZWxSZWw9KHJlbCxzdGVwKT0+XG5yZWxMaWtlKHJlbCxzdGVwLHJlbFZhbHVlKHJlbCklcmVsVmFsdWUoc3RlcCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVZhbHVlcz0obGVmdCxyaWdodCx2MSx2Mik9PntcbnNoYXJlZFRpbWVyQnJhbmQobGVmdCxyaWdodCk7XG5pZih2MTx2Mil7XG5yZXR1cm4tMTtcbiB9ZWxzZSBpZih2MT09PXYyKXtcbnJldHVybiAwO1xuIH1lbHNle1xuYXNzZXJ0KHYxPnYyKTtcbnJldHVybiAxO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRpbWVNYXRoPWhhcmRlbih7XG5hYnNWYWx1ZSxcbnJlbFZhbHVlLFxuY29lcmNlVGltZXN0YW1wUmVjb3JkLFxuY29lcmNlUmVsYXRpdmVUaW1lUmVjb3JkLFxuLy9cbmFkZEFic1JlbCxcbi8vXG5hZGRSZWxSZWwsXG5zdWJ0cmFjdEFic0FicyxcbmNsYW1wZWRTdWJ0cmFjdEFic0FicyxcbnN1YnRyYWN0QWJzUmVsLFxuc3VidHJhY3RSZWxSZWwsXG5pc1JlbFplcm8sXG5tdWx0aXBseVJlbE5hdCxcbmRpdmlkZVJlbE5hdCxcbmRpdmlkZVJlbFJlbCxcbm1vZEFic1JlbCxcbm1vZFJlbFJlbCxcbmNvbXBhcmVBYnM6KGFiczEsYWJzMik9PlxuY29tcGFyZVZhbHVlcyhhYnMxLGFiczIsYWJzVmFsdWUoYWJzMSksYWJzVmFsdWUoYWJzMikpLFxuY29tcGFyZVJlbDoocmVsMSxyZWwyKT0+XG5jb21wYXJlVmFsdWVzKHJlbDEscmVsMixyZWxWYWx1ZShyZWwxKSxyZWxWYWx1ZShyZWwyKSl9KTskaM2PX29uY2UuVGltZU1hdGgoVGltZU1hdGgpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGltZU1hdGgiOlsiVGltZU1hdGgiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGgbhCQsJAAALCQAAJQAAAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJSZWxhdGl2ZVRpbWVSZWNvcmRTaGFwZSIsIlJlbGF0aXZlVGltZVNoYXBlIiwiUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSIsIlRpbWVyQnJhbmRTaGFwZSIsIlRpbWVyU2VydmljZVNoYXBlIiwiVGltZXN0YW1wUmVjb3JkU2hhcGUiLCJUaW1lc3RhbXBTaGFwZSIsIlRpbWVzdGFtcFZhbHVlU2hhcGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgVGltZXJCcmFuZFNoYXBlPU0ucmVtb3RhYmxlKCdUaW1lckJyYW5kJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlRpbWVyQnJhbmRTaGFwZShUaW1lckJyYW5kU2hhcGUpO1xuY29uc3QgICAgICAgIFRpbWVzdGFtcFZhbHVlU2hhcGU9TS5uYXQoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuVGltZXN0YW1wVmFsdWVTaGFwZShUaW1lc3RhbXBWYWx1ZVNoYXBlKTtcbmNvbnN0ICAgICAgICBSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlPU0ubmF0KCk7Ly9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuUmVsYXRpdmVUaW1lVmFsdWVTaGFwZShSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlKTtcbmNvbnN0ICAgICAgICBUaW1lc3RhbXBSZWNvcmRTaGFwZT17XG50aW1lckJyYW5kOlRpbWVyQnJhbmRTaGFwZSxcbmFic1ZhbHVlOlRpbWVzdGFtcFZhbHVlU2hhcGV9OyRozY9fb25jZS5UaW1lc3RhbXBSZWNvcmRTaGFwZShUaW1lc3RhbXBSZWNvcmRTaGFwZSk7XG5cbmhhcmRlbihUaW1lc3RhbXBSZWNvcmRTaGFwZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGU9e1xudGltZXJCcmFuZDpUaW1lckJyYW5kU2hhcGUsXG5yZWxWYWx1ZTpSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlfTskaM2PX29uY2UuUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUoUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUpO1xuXG5oYXJkZW4oUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgVGltZXN0YW1wU2hhcGU9TS5vcihUaW1lc3RhbXBSZWNvcmRTaGFwZSxUaW1lc3RhbXBWYWx1ZVNoYXBlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5UaW1lc3RhbXBTaGFwZShUaW1lc3RhbXBTaGFwZSk7XG5jb25zdCAgICAgICAgUmVsYXRpdmVUaW1lU2hhcGU9TS5vcihcblJlbGF0aXZlVGltZVJlY29yZFNoYXBlLFxuUmVsYXRpdmVUaW1lVmFsdWVTaGFwZSk7JGjNj19vbmNlLlJlbGF0aXZlVGltZVNoYXBlKFJlbGF0aXZlVGltZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgVGltZXJTZXJ2aWNlU2hhcGU9TS5yZW1vdGFibGUoJ1RpbWVyU2VydmljZScpOyRozY9fb25jZS5UaW1lclNlcnZpY2VTaGFwZShUaW1lclNlcnZpY2VTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUaW1lckJyYW5kU2hhcGUiOlsiVGltZXJCcmFuZFNoYXBlIl0sIlRpbWVzdGFtcFZhbHVlU2hhcGUiOlsiVGltZXN0YW1wVmFsdWVTaGFwZSJdLCJSZWxhdGl2ZVRpbWVWYWx1ZVNoYXBlIjpbIlJlbGF0aXZlVGltZVZhbHVlU2hhcGUiXSwiVGltZXN0YW1wUmVjb3JkU2hhcGUiOlsiVGltZXN0YW1wUmVjb3JkU2hhcGUiXSwiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUiOlsiUmVsYXRpdmVUaW1lUmVjb3JkU2hhcGUiXSwiVGltZXN0YW1wU2hhcGUiOlsiVGltZXN0YW1wU2hhcGUiXSwiUmVsYXRpdmVUaW1lU2hhcGUiOlsiUmVsYXRpdmVUaW1lU2hhcGUiXSwiVGltZXJTZXJ2aWNlU2hhcGUiOlsiVGltZXJTZXJ2aWNlU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAJgAAAEBhZ29yaWMvdGltZS12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAF/+bAoBYAAKAWAAAoAAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2V4by11dGlscy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCIsImRlZmluZVZpcnR1YWxFeG9DbGFzcyIsImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCIsImlnbm9yZUNvbnRleHQiLCJtYWtlRXhvVXRpbHMiLCJwcmVwYXJlRXhvIiwicHJlcGFyZUV4b0NsYXNzIiwicHJlcGFyZUV4b0NsYXNzS2l0IiwicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZE11bHRpIiwicHJlcGFyZVNpbmdsZXRvbiIsInByb3ZpZGVLaW5kSGFuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGluaXRFbXB0eSxwcm92aWRlLGdsb2JhbFZhdERhdGE7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dXV0sW1wiLi92YXQtZGF0YS1iaW5kaW5ncy5qc1wiLCBbW1wicHJvdmlkZVwiLCBbJGjNj19hID0+IChwcm92aWRlID0gJGjNj19hKV1dLFtcIlZhdERhdGFcIiwgWyRozY9fYSA9PiAoZ2xvYmFsVmF0RGF0YSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLypcblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWdub3JlQ29udGV4dD1cbihmbik9PlxuKF9jb250ZXh0LC4uLmFyZ3MpPT5cbmZuKC4uLmFyZ3MpOyRozY9fb25jZS5pZ25vcmVDb250ZXh0KGlnbm9yZUNvbnRleHQpO1xuaGFyZGVuKGlnbm9yZUNvbnRleHQpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvVXRpbHM9KFZhdERhdGEpPT57XG5jb25zdHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGksXG5tYWtlS2luZEhhbmRsZX09XG5WYXREYXRhO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUtpbmRIYW5kbGU9KGJhZ2dhZ2Usa2luZE5hbWUpPT5cbnByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X2tpbmRIYW5kbGVgLCgpPT5tYWtlS2luZEhhbmRsZShraW5kTmFtZSkpO1xuaGFyZGVuKHByb3ZpZGVLaW5kSGFuZGxlKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmQ9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUtpbmQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUtpbmQpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlS2luZE11bHRpPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kTXVsdGkoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUtpbmRNdWx0aSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzPSh0YWcsaW50ZXJmYWNlR3VhcmQsaW5pdCxtZXRob2RzLG9wdGlvbnMpPT5cbi8vXG5kZWZpbmVLaW5kKHRhZyxpbml0LG1ldGhvZHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lS2luZE11bHRpKHRhZyxpbml0LGZhY2V0cyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0fSk7XG5cbmhhcmRlbihkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzcz0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUR1cmFibGVLaW5kKGtpbmRIYW5kbGUsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0PShcbmtpbmRIYW5kbGUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKGtpbmRIYW5kbGUsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzcz0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUV4b0NsYXNzS2l0PShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdChcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUV4bz0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZCxcbm1ldGhvZHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9Plxue1xuY29uc3QgbWFrZVNpbmdsZXRvbj1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXRFbXB0eSxcbm1ldGhvZHMsXG5vcHRpb25zKTtcblxuXG5yZXR1cm4gcHJvdmlkZShiYWdnYWdlLCBgJHtraW5kTmFtZX1fc2luZ2xldG9uYCwoKT0+bWFrZVNpbmdsZXRvbigpKTtcbiB9O1xuaGFyZGVuKHByZXBhcmVFeG8pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZVNpbmdsZXRvbj0oYmFnZ2FnZSxraW5kTmFtZSxtZXRob2RzLG9wdGlvbnM9dW5kZWZpbmVkKT0+XG5wcmVwYXJlRXhvKGJhZ2dhZ2Usa2luZE5hbWUsdW5kZWZpbmVkLG1ldGhvZHMsb3B0aW9ucyk7XG5oYXJkZW4ocHJlcGFyZVNpbmdsZXRvbik7XG5cbnJldHVybiBoYXJkZW4oe1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcblxucHJlcGFyZVNpbmdsZXRvbixcbnByb3ZpZGVLaW5kSGFuZGxlLFxucHJlcGFyZUtpbmQsXG5wcmVwYXJlS2luZE11bHRpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRXhvVXRpbHMobWFrZUV4b1V0aWxzKTtcblxuY29uc3QgZ2xvYmFsRXhvVXRpbHM9bWFrZUV4b1V0aWxzKGdsb2JhbFZhdERhdGEpO1xuXG5jb25zdCAgICAgICB7XG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MsXG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvQ2xhc3MsXG5wcmVwYXJlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvLFxucHJlcGFyZVNpbmdsZXRvbn09XG5nbG9iYWxFeG9VdGlscztcblxuLypcblxuICovJGjNj19vbmNlLmRlZmluZVZpcnR1YWxFeG9DbGFzcyhkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQoZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUV4b0NsYXNzKGRlZmluZUR1cmFibGVFeG9DbGFzcyk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdChkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvQ2xhc3MocHJlcGFyZUV4b0NsYXNzKTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzS2l0KHByZXBhcmVFeG9DbGFzc0tpdCk7JGjNj19vbmNlLnByZXBhcmVFeG8ocHJlcGFyZUV4byk7JGjNj19vbmNlLnByZXBhcmVTaW5nbGV0b24ocHJlcGFyZVNpbmdsZXRvbik7XG5jb25zdCAgICAgICB7cHJvdmlkZUtpbmRIYW5kbGUscHJlcGFyZUtpbmQscHJlcGFyZUtpbmRNdWx0aX09XG5nbG9iYWxFeG9VdGlsczskaM2PX29uY2UucHJvdmlkZUtpbmRIYW5kbGUocHJvdmlkZUtpbmRIYW5kbGUpOyRozY9fb25jZS5wcmVwYXJlS2luZChwcmVwYXJlS2luZCk7JGjNj19vbmNlLnByZXBhcmVLaW5kTXVsdGkocHJlcGFyZUtpbmRNdWx0aSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpZ25vcmVDb250ZXh0IjpbImlnbm9yZUNvbnRleHQiXSwibWFrZUV4b1V0aWxzIjpbIm1ha2VFeG9VdGlscyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCI6WyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIjpbImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sInByZXBhcmVFeG9DbGFzcyI6WyJwcmVwYXJlRXhvQ2xhc3MiXSwicHJlcGFyZUV4b0NsYXNzS2l0IjpbInByZXBhcmVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvIjpbInByZXBhcmVFeG8iXSwicHJlcGFyZVNpbmdsZXRvbiI6WyJwcmVwYXJlU2luZ2xldG9uIl0sInByb3ZpZGVLaW5kSGFuZGxlIjpbInByb3ZpZGVLaW5kSGFuZGxlIl0sInByZXBhcmVLaW5kIjpbInByZXBhcmVLaW5kIl0sInByZXBhcmVLaW5kTXVsdGkiOlsicHJlcGFyZUtpbmRNdWx0aSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC49RYwqAgAAKgIAAAkAAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwiLi9leG8tdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAwRcumsFgAArBYAADAAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbIlZhdERhdGEiLCJjYW5CZUR1cmFibGUiLCJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZE11bHRpIiwibWFrZUtpbmRIYW5kbGUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSIsIm1ha2VTdG9yZVV0aWxzIiwicGFydGlhbEFzc2lnbiIsInBpY2tGYWNldCIsInByb3ZpZGUiLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxwcm92aWRlTGF6eTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wicHJvdmlkZUxhenlcIiwgWyRozY9fYSA9PiAocHJvdmlkZUxhenkgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IFZhdERhdGFHbG9iYWw7XG5pZignVmF0RGF0YSdpbiBnbG9iYWxUaGlzKXtcbmdsb2JhbFRoaXMuVmF0RGF0YXx8RmFpbCBgVmF0RGF0YSBkZWZpbmVkIGluIGdsb2JhbCBhcyBudWxsIG9yIHVuZGVmaW5lZGA7XG4vL1xuVmF0RGF0YUdsb2JhbD0vKiAgICAgICAgICAgICAgKi9nbG9iYWxUaGlzLlZhdERhdGE7XG4gfWVsc2V7XG4vL1xuLy9cbi8vXG5jb25zdCB1bmF2YWlsYWJsZT0oKT0+RmFpbCBgVmF0RGF0YSB1bmF2YWlsYWJsZWA7XG5WYXREYXRhR2xvYmFsPXtcbmRlZmluZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZDp1bmF2YWlsYWJsZSxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5tYWtlS2luZEhhbmRsZTp1bmF2YWlsYWJsZSxcbnByb3ZpZGVQcm9taXNlV2F0Y2hlcjp1bmF2YWlsYWJsZSxcbndhdGNoUHJvbWlzZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlOnVuYXZhaWxhYmxlLFxuY2FuQmVEdXJhYmxlOnVuYXZhaWxhYmxlfTtcblxuIH1cblxuY29uc3QgVmF0RGF0YUV4cG9ydD1WYXREYXRhR2xvYmFsOyRozY9fb25jZS5WYXREYXRhRXhwb3J0KFZhdERhdGFFeHBvcnQpO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAge1xuZGVmaW5lS2luZCxcbmRlZmluZUtpbmRNdWx0aSxcbmRlZmluZUR1cmFibGVLaW5kLFxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aX09XG5WYXREYXRhR2xvYmFsOyRozY9fb25jZS5kZWZpbmVLaW5kKGRlZmluZUtpbmQpOyRozY9fb25jZS5kZWZpbmVLaW5kTXVsdGkoZGVmaW5lS2luZE11bHRpKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUtpbmQoZGVmaW5lRHVyYWJsZUtpbmQpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlS2luZE11bHRpKGRlZmluZUR1cmFibGVLaW5kTXVsdGkpO1xuXG5jb25zdCAgICAgICB7XG5tYWtlS2luZEhhbmRsZSxcbnByb3ZpZGVQcm9taXNlV2F0Y2hlcixcbndhdGNoUHJvbWlzZSxcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlLFxuY2FuQmVEdXJhYmxlfT1cblZhdERhdGFHbG9iYWw7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlS2luZEhhbmRsZShtYWtlS2luZEhhbmRsZSk7JGjNj19vbmNlLnByb3ZpZGVQcm9taXNlV2F0Y2hlcihwcm92aWRlUHJvbWlzZVdhdGNoZXIpOyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ01hcFN0b3JlKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdTZXRTdG9yZShtYWtlU2NhbGFyQmlnU2V0U3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUpOyRozY9fb25jZS5jYW5CZUR1cmFibGUoY2FuQmVEdXJhYmxlKTtcbmNvbnN0ICAgICAgICBwaWNrRmFjZXQ9XG4obWFrZXIsZmFjZXROYW1lKT0+XG4oLi4uYXJncyk9PlxubWFrZXIoLi4uYXJncylbZmFjZXROYW1lXTskaM2PX29uY2UucGlja0ZhY2V0KHBpY2tGYWNldCk7XG5oYXJkZW4ocGlja0ZhY2V0KTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnRpYWxBc3NpZ249KHRhcmdldCxzb3VyY2UpPT57XG5PYmplY3QuYXNzaWduKHRhcmdldCxzb3VyY2UpO1xuIH07JGjNj19vbmNlLnBhcnRpYWxBc3NpZ24ocGFydGlhbEFzc2lnbik7XG5oYXJkZW4ocGFydGlhbEFzc2lnbik7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgcHJvdmlkZT1cbi8vXG4vKlxuXG5cblxuXG5cbiAgICovcHJvdmlkZUxhenk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnByb3ZpZGUocHJvdmlkZSk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlVXRpbHM9KFZhdERhdGEpPT57XG5jb25zdHtcbi8vXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZX09XG5WYXREYXRhO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdTZXRTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKTtcblxucmV0dXJuIGhhcmRlbih7XG5wcm92aWRlRHVyYWJsZU1hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVNldFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmV9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTdG9yZVV0aWxzKG1ha2VTdG9yZVV0aWxzKTtcblxuY29uc3QgZ2xvYmFsU3RvcmVVdGlscz1tYWtlU3RvcmVVdGlscyhWYXREYXRhR2xvYmFsKTtcbmNvbnN0ICAgICAgIHtcbnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZX09XG5nbG9iYWxTdG9yZVV0aWxzOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZU1hcFN0b3JlKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSk7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUocHJvdmlkZUR1cmFibGVTZXRTdG9yZSk7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlZhdERhdGEiOlsiVmF0RGF0YUV4cG9ydCJdLCJkZWZpbmVLaW5kIjpbImRlZmluZUtpbmQiXSwiZGVmaW5lS2luZE11bHRpIjpbImRlZmluZUtpbmRNdWx0aSJdLCJkZWZpbmVEdXJhYmxlS2luZCI6WyJkZWZpbmVEdXJhYmxlS2luZCJdLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIjpbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiXSwibWFrZUtpbmRIYW5kbGUiOlsibWFrZUtpbmRIYW5kbGUiXSwicHJvdmlkZVByb21pc2VXYXRjaGVyIjpbInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLCJ3YXRjaFByb21pc2UiOlsid2F0Y2hQcm9taXNlIl0sIm1ha2VTY2FsYXJCaWdNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sImNhbkJlRHVyYWJsZSI6WyJjYW5CZUR1cmFibGUiXSwicGlja0ZhY2V0IjpbInBpY2tGYWNldCJdLCJwYXJ0aWFsQXNzaWduIjpbInBhcnRpYWxBc3NpZ24iXSwicHJvdmlkZSI6WyJwcm92aWRlIl0sIm1ha2VTdG9yZVV0aWxzIjpbIm1ha2VTdG9yZVV0aWxzIl0sInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmaKoxJITAACSEwAAKAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NsZWFuUHJvcG9zYWwuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9lcnRwIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbIk1BWF9LRVlXT1JEX0xFTkdUSCIsImFzc2VydEtleXdvcmROYW1lIiwiY2xlYW5LZXl3b3JkcyIsImNsZWFuUHJvcG9zYWwiLCJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkIiwiY29lcmNlQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LHEsRmFpbCxBbW91bnRNYXRoLGdldEFzc2V0S2luZCxvYmplY3RNYXAsYXNzZXJ0UmVjb3JkLGFzc2VydEtleSxhc3NlcnRQYXR0ZXJuLG11c3RNYXRjaCxpc0tleSxGdWxsUHJvcG9zYWxTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV0sW1wiZ2V0QXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKGdldEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRnVsbFByb3Bvc2FsU2hhcGVcIiwgWyRozY9fYSA9PiAoRnVsbFByb3Bvc2FsU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0ICAgICAgICBNQVhfS0VZV09SRF9MRU5HVEg9MTAwOyRozY9fb25jZS5NQVhfS0VZV09SRF9MRU5HVEgoTUFYX0tFWVdPUkRfTEVOR1RIKTtcblxuY29uc3QgZmlyc3RDYXBBU0NJST0vXltBLVpdW2EtekEtWjAtOV8kXSokLztcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGFzc2VydEtleXdvcmROYW1lPShrZXl3b3JkKT0+e1xuYXNzZXJ0LnR5cGVvZihrZXl3b3JkLCdzdHJpbmcnKTtcbmtleXdvcmQubGVuZ3RoPD1NQVhfS0VZV09SRF9MRU5HVEh8fFxuRmFpbCBga2V5d29yZCAke3Eoa2V5d29yZCl9IGV4Y2VlZGVkIG1heGltdW0gbGVuZ3RoICR7cShcbk1BWF9LRVlXT1JEX0xFTkdUSClcbiB9IGNoYXJhY3RlcnM7IGdvdCAke2tleXdvcmQubGVuZ3RofWA7XG5maXJzdENhcEFTQ0lJLnRlc3Qoa2V5d29yZCl8fFxuRmFpbCBga2V5d29yZCAke3EoXG5rZXl3b3JkKVxuIH0gbXVzdCBiZSBhbiBhc2NpaSBpZGVudGlmaWVyIHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZS5gO1xua2V5d29yZCE9PSdOYU4nJiZrZXl3b3JkIT09J0luZmluaXR5J3x8XG5GYWlsIGBrZXl3b3JkICR7cShrZXl3b3JkKX0gbXVzdCBub3QgYmUgYSBudW1iZXIncyBuYW1lYDtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRLZXl3b3JkTmFtZShhc3NlcnRLZXl3b3JkTmFtZSk7XG5jb25zdCAgICAgICAgY2xlYW5LZXl3b3Jkcz0odW5jbGVhbktleXdvcmRSZWNvcmQpPT57XG5oYXJkZW4odW5jbGVhbktleXdvcmRSZWNvcmQpO1xuYXNzZXJ0UmVjb3JkKHVuY2xlYW5LZXl3b3JkUmVjb3JkLCdrZXl3b3JkUmVjb3JkJyk7XG5jb25zdCBrZXl3b3Jkcz1vd25LZXlzKHVuY2xlYW5LZXl3b3JkUmVjb3JkKTtcblxuLy9cbi8vXG5mb3IoY29uc3Qga2V5d29yZCBvZiBrZXl3b3Jkcyl7XG5hc3NlcnRLZXl3b3JkTmFtZShrZXl3b3JkKTtcbiB9XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgKi9rZXl3b3Jkcyk7XG4gfTskaM2PX29uY2UuY2xlYW5LZXl3b3JkcyhjbGVhbktleXdvcmRzKTtcblxuY29uc3QgICAgICAgIGNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkPShcbmFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk9Plxue1xuY2xlYW5LZXl3b3JkcyhhbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCk7XG4vL1xucmV0dXJuIG9iamVjdE1hcChhbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCwoYW1vdW50KT0+e1xuLy9cbi8vXG5pZihpc0tleShhbW91bnQpKXtcbmNvbnN0IGJyYW5kQXNzZXRLaW5kPWdldEFzc2V0S2luZEJ5QnJhbmQoYW1vdW50LmJyYW5kKTtcbmNvbnN0IGFzc2V0S2luZD1nZXRBc3NldEtpbmQoYW1vdW50KTtcbi8vXG4vL1xuYXNzZXRLaW5kPT09YnJhbmRBc3NldEtpbmR8fFxuRmFpbCBgVGhlIGFtb3VudCAke2Ftb3VudH0gZGlkIG5vdCBoYXZlIHRoZSBhc3NldEtpbmQgb2YgdGhlIGJyYW5kICR7YnJhbmRBc3NldEtpbmR9YDtcbnJldHVybiBBbW91bnRNYXRoLmNvZXJjZShhbW91bnQuYnJhbmQsYW1vdW50KTtcbiB9ZWxzZXtcbmFzc2VydFBhdHRlcm4oYW1vdW50KTtcbnJldHVybiBhbW91bnQ7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZChjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCk7XG5jb25zdCAgICAgICAgY29lcmNlQW1vdW50S2V5d29yZFJlY29yZD0oXG5hbGxlZ2VkQW1vdW50S2V5d29yZFJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpPT5cbntcbmNvbnN0IHJlc3VsdD1jb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZChcbmFsbGVnZWRBbW91bnRLZXl3b3JkUmVjb3JkLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmFzc2VydEtleShyZXN1bHQpO1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29lcmNlQW1vdW50S2V5d29yZFJlY29yZChjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKTtcbmNvbnN0IGFzc2VydEV4aXQ9KGV4aXQpPT5cbm93bktleXMoZXhpdCkubGVuZ3RoPT09MXx8RmFpbCBgZXhpdCAke2V4aXR9IHNob3VsZCBvbmx5IGhhdmUgb25lIGtleWA7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0S2V5d29yZE5vdEluQm90aD0od2FudCxnaXZlKT0+e1xuY29uc3Qgd2FudEtleXdvcmRTZXQ9bmV3IFNldChvd25LZXlzKHdhbnQpKTtcbmNvbnN0IGdpdmVLZXl3b3Jkcz1vd25LZXlzKGdpdmUpO1xuXG5mb3IoY29uc3Qga2V5d29yZCBvZiBnaXZlS2V5d29yZHMpe1xuIXdhbnRLZXl3b3JkU2V0LmhhcyhrZXl3b3JkKXx8XG5GYWlsIGBhIGtleXdvcmQgY2Fubm90IGJlIGluIGJvdGggJ3dhbnQnIGFuZCAnZ2l2ZSdgO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNsZWFuUHJvcG9zYWw9KHByb3Bvc2FsLGdldEFzc2V0S2luZEJ5QnJhbmQpPT57XG5hc3NlcnRSZWNvcmQocHJvcG9zYWwsJ3Byb3Bvc2FsJyk7XG4vL1xuY29uc3R7XG53YW50PWhhcmRlbih7fSksXG5naXZlPWhhcmRlbih7fSksXG5leGl0PWhhcmRlbih7b25EZW1hbmQ6bnVsbH0pLFxuLi4ucmVzdH09XG5wcm9wb3NhbDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAke3Byb3Bvc2FsfSAtIE11c3Qgb25seSBoYXZlIHdhbnQ6LCBnaXZlOiwgZXhpdDogcHJvcGVydGllczogJHtyZXN0fWA7XG5cbmNvbnN0IGNsZWFuZWRXYW50PWNvZXJjZUFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkKFxud2FudCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5jb25zdCBjbGVhbmVkR2l2ZT1jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKGdpdmUsZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmNvbnN0IGNsZWFuZWRQcm9wb3NhbD1oYXJkZW4oe1xud2FudDpjbGVhbmVkV2FudCxcbmdpdmU6Y2xlYW5lZEdpdmUsXG5leGl0fSk7XG5cbm11c3RNYXRjaChjbGVhbmVkUHJvcG9zYWwsRnVsbFByb3Bvc2FsU2hhcGUsJ3Byb3Bvc2FsJyk7XG5hc3NlcnRFeGl0KGV4aXQpO1xuYXNzZXJ0S2V5d29yZE5vdEluQm90aChjbGVhbmVkV2FudCxjbGVhbmVkR2l2ZSk7XG5yZXR1cm4gY2xlYW5lZFByb3Bvc2FsO1xuIH07JGjNj19vbmNlLmNsZWFuUHJvcG9zYWwoY2xlYW5Qcm9wb3NhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJNQVhfS0VZV09SRF9MRU5HVEgiOlsiTUFYX0tFWVdPUkRfTEVOR1RIIl0sImFzc2VydEtleXdvcmROYW1lIjpbImFzc2VydEtleXdvcmROYW1lIl0sImNsZWFuS2V5d29yZHMiOlsiY2xlYW5LZXl3b3JkcyJdLCJjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCI6WyJjb2VyY2VBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZCJdLCJjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkIjpbImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQiXSwiY2xlYW5Qcm9wb3NhbCI6WyJjbGVhblByb3Bvc2FsIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALK5LmZ7CQAAewkAADcAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L2FsbG9jYXRpb25NYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvZXJ0cCJdLCJleHBvcnRzIjpbImFkZFRvQWxsb2NhdGlvbiIsInN1YnRyYWN0RnJvbUFsbG9jYXRpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGRvT3BlcmF0aW9uPShhbGxvY2F0aW9uLGFtb3VudEtleXdvcmRSZWNvcmQsb3BlcmF0aW9uRm4pPT57XG5jb25zdCBhbGxLZXl3b3Jkcz1PYmplY3Qua2V5cyh7Li4uYWxsb2NhdGlvbiwuLi5hbW91bnRLZXl3b3JkUmVjb3JkfSk7XG5cbmNvbnN0IGVudHJpZXM9YWxsS2V5d29yZHMuXG5tYXAoKGtleXdvcmQpPT57XG5jb25zdCByZXN1bHQ9b3BlcmF0aW9uRm4oXG5hbGxvY2F0aW9uW2tleXdvcmRdLFxuYW1vdW50S2V5d29yZFJlY29yZFtrZXl3b3JkXSxcbmtleXdvcmQpO1xuXG5yZXR1cm5ba2V5d29yZCxyZXN1bHRdO1xuIH0pLlxuZmlsdGVyKChbX2tleXdvcmQscmVzdWx0XSk9PnJlc3VsdCE9PXVuZGVmaW5lZCk7XG5cbnJldHVybiBoYXJkZW4oT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpKTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFkZD0oYW1vdW50LGFtb3VudFRvQWRkLF9rZXl3b3JkKT0+e1xuLy9cbmlmKGFtb3VudCYmYW1vdW50VG9BZGQpe1xucmV0dXJuIEFtb3VudE1hdGguYWRkKGFtb3VudCxhbW91bnRUb0FkZCk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL2Ftb3VudHx8YW1vdW50VG9BZGQpO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3VidHJhY3Q9KGFtb3VudCxhbW91bnRUb1N1YnRyYWN0LGtleXdvcmQpPT57XG4vL1xuaWYoYW1vdW50VG9TdWJ0cmFjdD09PXVuZGVmaW5lZHx8QW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudFRvU3VidHJhY3QpKXtcbi8vXG4vL1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovYW1vdW50KTtcbiB9ZWxzZXtcbmlmKGFtb3VudD09PXVuZGVmaW5lZCl7XG4vL1xuLy9cbnRocm93IEZhaWwgYFRoZSBhbW91bnQgY291bGQgbm90IGJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgYWxsb2NhdGlvbiBiZWNhdXNlIHRoZSBhbGxvY2F0aW9uIGRpZCBub3QgaGF2ZSBhbiBhbW91bnQgdW5kZXIgdGhlIGtleXdvcmQgJHtxKFxua2V5d29yZClcbiB9LmA7XG4gfVxuQW1vdW50TWF0aC5pc0dURShhbW91bnQsYW1vdW50VG9TdWJ0cmFjdCl8fFxuRmFpbCBgVGhlIGFtb3VudCB0byBiZSBzdWJ0cmFjdGVkICR7YW1vdW50VG9TdWJ0cmFjdH0gd2FzIGdyZWF0ZXIgdGhhbiB0aGUgYWxsb2NhdGlvbidzIGFtb3VudCAke2Ftb3VudH0gZm9yIHRoZSBrZXl3b3JkICR7cShcbmtleXdvcmQpXG4gfWA7XG5yZXR1cm4gQW1vdW50TWF0aC5zdWJ0cmFjdChhbW91bnQsYW1vdW50VG9TdWJ0cmFjdCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhZGRUb0FsbG9jYXRpb249KGFsbG9jYXRpb24sYW1vdW50S2V5d29yZFJlY29yZCk9PntcbnJldHVybiBkb09wZXJhdGlvbihhbGxvY2F0aW9uLGFtb3VudEtleXdvcmRSZWNvcmQsYWRkKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFkZFRvQWxsb2NhdGlvbihhZGRUb0FsbG9jYXRpb24pO1xuY29uc3QgICAgICAgIHN1YnRyYWN0RnJvbUFsbG9jYXRpb249KGFsbG9jYXRpb24sYW1vdW50S2V5d29yZFJlY29yZCk9PntcbnJldHVybiBkb09wZXJhdGlvbihhbGxvY2F0aW9uLGFtb3VudEtleXdvcmRSZWNvcmQsc3VidHJhY3QpO1xuIH07JGjNj19vbmNlLnN1YnRyYWN0RnJvbUFsbG9jYXRpb24oc3VidHJhY3RGcm9tQWxsb2NhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhZGRUb0FsbG9jYXRpb24iOlsiYWRkVG9BbGxvY2F0aW9uIl0sInN1YnRyYWN0RnJvbUFsbG9jYXRpb24iOlsic3VidHJhY3RGcm9tQWxsb2NhdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC+f87F5gQAAOYEAAA5AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9ldmFsQ29udHJhY3RDb2RlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ltcG9ydC1idW5kbGUiLCIuLi9oYW5kbGVXYXJuaW5nLmpzIl0sImV4cG9ydHMiOlsiZXZhbENvbnRyYWN0QnVuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGltcG9ydEJ1bmRsZSxoYW5kbGVQV2FybmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ltcG9ydC1idW5kbGVcIiwgW1tcImltcG9ydEJ1bmRsZVwiLCBbJGjNj19hID0+IChpbXBvcnRCdW5kbGUgPSAkaM2PX2EpXV1dXSxbXCIuLi9oYW5kbGVXYXJuaW5nLmpzXCIsIFtbXCJoYW5kbGVQV2FybmluZ1wiLCBbJGjNj19hID0+IChoYW5kbGVQV2FybmluZyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbmNvbnN0IGV2YWxDb250cmFjdEJ1bmRsZT0oYnVuZGxlLGFkZGl0aW9uYWxFbmRvd21lbnRzPXt9KT0+e1xuLy9cbmNvbnN0IGxvdWRlckNvbnNvbGU9e1xuLi4uY29uc29sZSxcbmxvZzpjb25zb2xlLmluZm99O1xuXG5cbmNvbnN0IGRlZmF1bHRFbmRvd21lbnRzPXtcbmNvbnNvbGU6bG91ZGVyQ29uc29sZSxcbi8vXG5hc3NlcnQ6Z2xvYmFsVGhpcy5hc3NlcnQsXG5WYXREYXRhOmdsb2JhbFRoaXMuVmF0RGF0YX07XG5cblxuY29uc3QgZnVsbEVuZG93bWVudHM9T2JqZWN0LmNyZWF0ZShudWxsLHtcbi4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGRlZmF1bHRFbmRvd21lbnRzKSxcbi4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGFkZGl0aW9uYWxFbmRvd21lbnRzKX0pO1xuXG5cbi8vXG4vL1xuXG5jb25zdCBpbnN0YWxsYXRpb249aW1wb3J0QnVuZGxlKGJ1bmRsZSx7XG5lbmRvd21lbnRzOmZ1bGxFbmRvd21lbnRzfSk7XG5cbmhhbmRsZVBXYXJuaW5nKGluc3RhbGxhdGlvbik7XG5yZXR1cm4gaW5zdGFsbGF0aW9uO1xuIH07JGjNj19vbmNlLmV2YWxDb250cmFjdEJ1bmRsZShldmFsQ29udHJhY3RCdW5kbGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZXZhbENvbnRyYWN0QnVuZGxlIjpbImV2YWxDb250cmFjdEJ1bmRsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABsCYbwFg0AABYNAAAtAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9leGl0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdGltZSIsIi4uL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFrZUV4aXRlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRSxwcmVwYXJlRXhvQ2xhc3MscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxNLGluaXRFbXB0eSxUaW1lc3RhbXBTaGFwZSxpc09uRGVtYW5kRXhpdFJ1bGUsaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUsaXNXYWl2ZWRFeGl0UnVsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVTZXRTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVNldFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImluaXRFbXB0eVwiLCBbJGjNj19hID0+IChpbml0RW1wdHkgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3RpbWVcIiwgW1tcIlRpbWVzdGFtcFNoYXBlXCIsIFskaM2PX2EgPT4gKFRpbWVzdGFtcFNoYXBlID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiaXNPbkRlbWFuZEV4aXRSdWxlXCIsIFskaM2PX2EgPT4gKGlzT25EZW1hbmRFeGl0UnVsZSA9ICRozY9fYSldXSxbXCJpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZVwiLCBbJGjNj19hID0+IChpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZSA9ICRozY9fYSldXSxbXCJpc1dhaXZlZEV4aXRSdWxlXCIsIFskaM2PX2EgPT4gKGlzV2FpdmVkRXhpdFJ1bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0IEV4aXRPYmplY3RJPU0uaW50ZXJmYWNlKCdFeGl0T2JqZWN0Jyx7ZXhpdDpNLmNhbGwoKS5yZXR1cm5zKCl9KTtcbmNvbnN0IFdha2VyST1NLmludGVyZmFjZSgnV2FrZXInLHtcbndha2U6TS5jYWxsKFRpbWVzdGFtcFNoYXBlKS5yZXR1cm5zKCksXG5zY2hlZHVsZTpNLmNhbGwoKS5yZXR1cm5zKCl9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBtYWtlTWFrZUV4aXRlcj0oYmFnZ2FnZSk9PntcbmNvbnN0IGFjdGl2ZVdha2Vycz1wcm92aWRlRHVyYWJsZVNldFN0b3JlKGJhZ2dhZ2UsJ2FjdGl2ZVdha2VycycpO1xuXG5jb25zdCBtYWtlRXhpdGFibGU9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidFeGl0T2JqZWN0JyxcbkV4aXRPYmplY3RJLFxuKHpjZlNlYXQpPT4oe3pjZlNlYXR9KSxcbntcbmV4aXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuc3RhdGUuemNmU2VhdC5leGl0KCk7XG5zdGF0ZS56Y2ZTZWF0PXVuZGVmaW5lZDtcbiB9fSxcblxue1xuc3RhdGVTaGFwZTpoYXJkZW4oe1xuemNmU2VhdDpNLmFueSgpfSl9KTtcblxuXG5cbmNvbnN0IG1ha2VXYWl2ZWQ9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidFeGl0V2FpdmVkJyxcbkV4aXRPYmplY3RJLFxuaW5pdEVtcHR5LFxue1xuZXhpdCgpe1xuLy9cbnRocm93IEVycm9yKFxuIGBPbmx5IHNlYXRzIHdpdGggdGhlIGV4aXQgcnVsZSBcIm9uRGVtYW5kXCIgY2FuIGV4aXQgYXQgd2lsbGApO1xuXG4gfX0pO1xuXG5cbmNvbnN0IG1ha2VXYWtlcj1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxuJ1dha2VyJyxcbldha2VySSxcbih6Y2ZTZWF0LGFmdGVyRGVhZGxpbmUpPT4oe3pjZlNlYXQsYWZ0ZXJEZWFkbGluZX0pLFxue1xud2FrZShfd2hlbil7XG5jb25zdHtzdGF0ZSxzZWxmfT10aGlzO1xuXG5hY3RpdmVXYWtlcnMuZGVsZXRlKHNlbGYpO1xuLy9cbi8vXG5pZighc3RhdGUuemNmU2VhdC5oYXNFeGl0ZWQoKSl7XG5zdGF0ZS56Y2ZTZWF0LmV4aXQoKTtcbiB9XG4gfSxcbnNjaGVkdWxlKCl7XG5jb25zdHtzdGF0ZSxzZWxmfT10aGlzO1xuXG5FKHN0YXRlLmFmdGVyRGVhZGxpbmUudGltZXIpLlxuc2V0V2FrZXVwKHN0YXRlLmFmdGVyRGVhZGxpbmUuZGVhZGxpbmUsc2VsZikuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcihcbiBgVGhlIHNlYXQgY291bGQgbm90IGJlIG1hZGUgd2l0aCB0aGUgcHJvdmlkZWQgdGltZXIgJHtzdGF0ZS5hZnRlckRlYWRsaW5lLnRpbWVyfSBhbmQgZGVhZGxpbmUgJHtzdGF0ZS5hZnRlckRlYWRsaW5lLmRlYWRsaW5lfWApO1xuXG5jb25zb2xlLmVycm9yKHJlYXNvbik7XG5zdGF0ZS56Y2ZTZWF0LmZhaWwocmVhc29uKTtcbnRocm93IHJlYXNvbjtcbiB9KTtcbiB9fSk7XG5cblxuXG4vL1xuZm9yKGNvbnN0IHdha2VyIG9mIGFjdGl2ZVdha2Vycy52YWx1ZXMoKSl7XG53YWtlci5zY2hlZHVsZSgpO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbnJldHVybihwcm9wb3NhbCx6Y2ZTZWF0KT0+e1xuY29uc3R7ZXhpdH09cHJvcG9zYWw7XG5cbmlmKGlzT25EZW1hbmRFeGl0UnVsZShleGl0KSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBtYWtlRXhpdGFibGUoemNmU2VhdCk7XG4gfVxuXG5pZihpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZShleGl0KSl7XG5jb25zdCB3YWtlcj1tYWtlV2FrZXIoemNmU2VhdCxleGl0LmFmdGVyRGVhZGxpbmUpO1xuYWN0aXZlV2FrZXJzLmFkZCh3YWtlcik7XG4vL1xud2FrZXIuc2NoZWR1bGUoKTtcbiB9XG5cbmlmKGlzV2FpdmVkRXhpdFJ1bGUoZXhpdCl8fGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlKGV4aXQpKXtcbnJldHVybiBtYWtlV2FpdmVkKCk7XG4gfVxuXG50aHJvdyBGYWlsIGBleGl0IGtpbmQgd2FzIG5vdCByZWNvZ25pemVkOiAke3EoZXhpdCl9YDtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VNYWtlRXhpdGVyKG1ha2VNYWtlRXhpdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYWtlRXhpdGVyIjpbIm1ha2VNYWtlRXhpdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAASKblpyAQAAcgEAADcAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASAKBWasKAACrCgAAPAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvb2ZmZXJIYW5kbGVyU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuLi9tYWtlSGFuZGxlLmpzIl0sImV4cG9ydHMiOlsibWFrZU9mZmVySGFuZGxlclN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxUb0ZhckZ1bmN0aW9uLGNhbkJlRHVyYWJsZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxkZWZpbmVEdXJhYmxlSGFuZGxlOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhcldlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiVG9GYXJGdW5jdGlvblwiLCBbJGjNj19hID0+IChUb0ZhckZ1bmN0aW9uID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaM2PX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4uL21ha2VIYW5kbGUuanNcIiwgW1tcImRlZmluZUR1cmFibGVIYW5kbGVcIiwgWyRozY9fYSA9PiAoZGVmaW5lRHVyYWJsZUhhbmRsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuICovXG5cbmNvbnN0ICAgICAgICBtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZT0oemNmQmFnZ2FnZSk9PntcbmNvbnN0IG1ha2VJbnZpdGF0aW9uSGFuZGxlPWRlZmluZUR1cmFibGVIYW5kbGUoemNmQmFnZ2FnZSwnSW52aXRhdGlvbicpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb0VwaGVtZXJhbEhhbmRsZXI9bWFrZVNjYWxhcldlYWtNYXBTdG9yZShcbidpbnZpdGF0aW9uSGFuZGxlVG9FcGhlbWVyYWxIYW5kbGVyJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb0R1cmFibGVIYW5kbGVyPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbidpbnZpdGF0aW9uSGFuZGxlVG9EdXJhYmxlSGFuZGxlcicpO1xuXG5cbmNvbnN0IHN0b3JlT2ZmZXJIYW5kbGVyPShvZmZlckhhbmRsZXIpPT57XG5pZih0eXBlb2Ygb2ZmZXJIYW5kbGVyPT09J2Z1bmN0aW9uJyl7XG5vZmZlckhhbmRsZXI9VG9GYXJGdW5jdGlvbignb2ZmZXJIYW5kbGVyJyxvZmZlckhhbmRsZXIpO1xuIH1cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb0hhbmRsZXI9Y2FuQmVEdXJhYmxlKG9mZmVySGFuZGxlcik/XG5pbnZpdGF0aW9uSGFuZGxlVG9EdXJhYmxlSGFuZGxlcjpcbmludml0YXRpb25IYW5kbGVUb0VwaGVtZXJhbEhhbmRsZXI7XG5cbmNvbnN0IGludml0YXRpb25IYW5kbGU9bWFrZUludml0YXRpb25IYW5kbGUoKTtcbmludml0YXRpb25IYW5kbGVUb0hhbmRsZXIuaW5pdChpbnZpdGF0aW9uSGFuZGxlLG9mZmVySGFuZGxlcik7XG5yZXR1cm4gaW52aXRhdGlvbkhhbmRsZTtcbiB9O1xuXG4vKlxuXG4gICAqL1xuY29uc3QgdGFrZU9mZmVySGFuZGxlcj0oXG5pbnZpdGF0aW9uSGFuZGxlLFxuZGV0YWlscz0nb2ZmZXJIYW5kbGVyIG1heSBub3QgaGF2ZSBzdXJ2aXZlZCB1cGdyYWRlJyk9Plxue1xubGV0IGludml0YXRpb25IYW5kbGVUb0hhbmRsZXI7XG5pZihpbnZpdGF0aW9uSGFuZGxlVG9EdXJhYmxlSGFuZGxlci5oYXMoaW52aXRhdGlvbkhhbmRsZSkpe1xuaW52aXRhdGlvbkhhbmRsZVRvSGFuZGxlcj1pbnZpdGF0aW9uSGFuZGxlVG9EdXJhYmxlSGFuZGxlcjtcbiB9ZWxzZXtcbmFzc2VydChpbnZpdGF0aW9uSGFuZGxlVG9FcGhlbWVyYWxIYW5kbGVyLmhhcyhpbnZpdGF0aW9uSGFuZGxlKSxkZXRhaWxzKTtcbmludml0YXRpb25IYW5kbGVUb0hhbmRsZXI9aW52aXRhdGlvbkhhbmRsZVRvRXBoZW1lcmFsSGFuZGxlcjtcbiB9XG5jb25zdCBvZmZlckhhbmRsZXI9aW52aXRhdGlvbkhhbmRsZVRvSGFuZGxlci5nZXQoaW52aXRhdGlvbkhhbmRsZSk7XG5pbnZpdGF0aW9uSGFuZGxlVG9IYW5kbGVyLmRlbGV0ZShpbnZpdGF0aW9uSGFuZGxlKTtcbnJldHVybiBvZmZlckhhbmRsZXI7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7XG5zdG9yZU9mZmVySGFuZGxlcixcbnRha2VPZmZlckhhbmRsZXJ9KTtcblxuIH07JGjNj19vbmNlLm1ha2VPZmZlckhhbmRsZXJTdG9yYWdlKG1ha2VPZmZlckhhbmRsZXJTdG9yYWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VPZmZlckhhbmRsZXJTdG9yYWdlIjpbIm1ha2VPZmZlckhhbmRsZXJTdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIullZr6BQAA+gUAADQAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L29mZmVyU2FmZXR5LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvZXJ0cCJdLCJleHBvcnRzIjpbImlzT2ZmZXJTYWZlIiwic2F0aXNmaWVzV2FudCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc09mZmVyU2FmZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNPZmZlclNhZmVcIn0pOyRozY9fb25jZS5pc09mZmVyU2FmZShpc09mZmVyU2FmZSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYXRpc2ZpZXNJbnRlcm5hbD0oZ2l2ZU9yV2FudD17fSxhbGxvY2F0aW9uKT0+e1xuY29uc3QgaXNHVEVCeUtleXdvcmQ9KFtrZXl3b3JkLHJlcXVpcmVkQW1vdW50XSk9Pntcbi8vXG4vL1xuaWYoYWxsb2NhdGlvbltrZXl3b3JkXT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gMDtcbiB9XG5jb25zdCBhbGxvY2F0aW9uQW1vdW50PWFsbG9jYXRpb25ba2V5d29yZF07XG5yZXR1cm4gQW1vdW50TWF0aC5pc0dURShhbGxvY2F0aW9uQW1vdW50LHJlcXVpcmVkQW1vdW50KT8xOjA7XG4gfTtcbnJldHVybiBPYmplY3QuZW50cmllcyhnaXZlT3JXYW50KS5ldmVyeShpc0dURUJ5S2V5d29yZCk/MTowO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhdGlzZmllc1dhbnQ9KHByb3Bvc2FsLGFsbG9jYXRpb24pPT5cbnNhdGlzZmllc0ludGVybmFsKHByb3Bvc2FsLndhbnQsYWxsb2NhdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zYXRpc2ZpZXNXYW50KHNhdGlzZmllc1dhbnQpO1xuY29uc3Qgc2F0aXNmaWVzR2l2ZT0ocHJvcG9zYWwsYWxsb2NhdGlvbik9Plxuc2F0aXNmaWVzSW50ZXJuYWwocHJvcG9zYWwuZ2l2ZSxhbGxvY2F0aW9uKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gaXNPZmZlclNhZmUocHJvcG9zYWwsYWxsb2NhdGlvbil7XG5yZXR1cm4oXG5zYXRpc2ZpZXNHaXZlKHByb3Bvc2FsLGFsbG9jYXRpb24pPjB8fFxuc2F0aXNmaWVzV2FudChwcm9wb3NhbCxhbGxvY2F0aW9uKT4wKTtcblxuIH1cblxuaGFyZGVuKGlzT2ZmZXJTYWZlKTtcbmhhcmRlbihzYXRpc2ZpZXNXYW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNhdGlzZmllc1dhbnQiOlsic2F0aXNmaWVzV2FudCJdLCJpc09mZmVyU2FmZSI6WyJpc09mZmVyU2FmZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAArPnYmEQwAABEMAAAzAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9yZWFsbG9jYXRlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuL3JpZ2h0c0NvbnNlcnZhdGlvbi5qcyIsIi4vYWxsb2NhdGlvbk1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQWxsb2NhdGlvbk1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VTY2FsYXJNYXBTdG9yZSxhc3NlcnRSaWdodHNDb25zZXJ2ZWQsYWRkVG9BbGxvY2F0aW9uLHN1YnRyYWN0RnJvbUFsbG9jYXRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL3JpZ2h0c0NvbnNlcnZhdGlvbi5qc1wiLCBbW1wiYXNzZXJ0UmlnaHRzQ29uc2VydmVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJpZ2h0c0NvbnNlcnZlZCA9ICRozY9fYSldXV1dLFtcIi4vYWxsb2NhdGlvbk1hdGguanNcIiwgW1tcImFkZFRvQWxsb2NhdGlvblwiLCBbJGjNj19hID0+IChhZGRUb0FsbG9jYXRpb24gPSAkaM2PX2EpXV0sW1wic3VidHJhY3RGcm9tQWxsb2NhdGlvblwiLCBbJGjNj19hID0+IChzdWJ0cmFjdEZyb21BbGxvY2F0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBbGxvY2F0aW9uTWFwPSh0cmFuc2ZlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWxsb2NhdGlvbnM9bWFrZVNjYWxhck1hcFN0b3JlKCk7XG5cbmNvbnN0IGdldEFsbG9jYXRpb25zPShzZWF0KT0+e1xuaWYoYWxsb2NhdGlvbnMuaGFzKHNlYXQpKXtcbnJldHVybiBhbGxvY2F0aW9ucy5nZXQoc2VhdCk7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYWlyPVtbXSxbXV07XG5hbGxvY2F0aW9ucy5pbml0KHNlYXQscGFpcik7XG5yZXR1cm4gcGFpcjtcbiB9O1xuXG5jb25zdCBkZWNyZW1lbnRBbGxvY2F0aW9uPShzZWF0LGRlY3JlbWVudCk9PntcbmNvbnN0W2luY3IsZGVjcl09Z2V0QWxsb2NhdGlvbnMoc2VhdCk7XG5cbmNvbnN0IG5ld0RlY3I9Wy4uLmRlY3IsZGVjcmVtZW50XTtcbmFsbG9jYXRpb25zLnNldChzZWF0LFtpbmNyLG5ld0RlY3JdKTtcbiB9O1xuXG5jb25zdCBpbmNyZW1lbnRBbGxvY2F0aW9uPShzZWF0LGluY3JlbWVudCk9PntcbmNvbnN0W2luY3IsZGVjcl09Z2V0QWxsb2NhdGlvbnMoc2VhdCk7XG5cbmNvbnN0IG5ld0luY3I9Wy4uLmluY3IsaW5jcmVtZW50XTtcbmFsbG9jYXRpb25zLnNldChzZWF0LFtuZXdJbmNyLGRlY3JdKTtcbiB9O1xuXG5mb3IoY29uc3RbZnJvbVNlYXQsdG9TZWF0LGZyb21BbW91bnRzLHRvQW1vdW50c11vZiB0cmFuc2ZlcnMpe1xuaWYoZnJvbVNlYXQpe1xuaWYoIWZyb21BbW91bnRzKXtcbnRocm93IEZhaWwgYFRyYW5zZmVyIGZyb20gJHtmcm9tU2VhdH0gbXVzdCBzYXkgaG93IG11Y2hgO1xuIH1cbmRlY3JlbWVudEFsbG9jYXRpb24oZnJvbVNlYXQsZnJvbUFtb3VudHMpO1xuaWYodG9TZWF0KXtcbi8vXG5pZih0b0Ftb3VudHMpe1xuLy9cbmFzc2VydFJpZ2h0c0NvbnNlcnZlZChcbk9iamVjdC52YWx1ZXMoZnJvbUFtb3VudHMpLFxuT2JqZWN0LnZhbHVlcyh0b0Ftb3VudHMpKTtcblxuaW5jcmVtZW50QWxsb2NhdGlvbih0b1NlYXQsdG9BbW91bnRzKTtcbiB9ZWxzZXtcbi8vXG5pbmNyZW1lbnRBbGxvY2F0aW9uKHRvU2VhdCxmcm9tQW1vdW50cyk7XG4gfVxuIH1lbHNle1xuLy9cbiF0b0Ftb3VudHN8fFxuRmFpbCBgVHJhbnNmZXIgd2l0aG91dCB0b1NlYXQgY2Fubm90IGhhdmUgdG9BbW91bnRzICR7dG9BbW91bnRzfWA7XG4gfVxuIH1lbHNle1xudG9TZWF0fHxGYWlsIGBUcmFuc2ZlciBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIGZyb21TZWF0IG9yIHRvU2VhdGA7XG4vL1xuIWZyb21BbW91bnRzfHxcbkZhaWwgYFRyYW5zZmVyIHdpdGhvdXQgZnJvbVNlYXQgY2Fubm90IGhhdmUgZnJvbUFtb3VudHMgJHtmcm9tQW1vdW50c31gO1xudG9BbW91bnRzfHxGYWlsIGBUcmFuc2ZlciB0byAke3RvU2VhdH0gbXVzdCBzYXkgaG93IG11Y2hgO1xuaW5jcmVtZW50QWxsb2NhdGlvbih0b1NlYXQsdG9BbW91bnRzKTtcbiB9XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHRpbmdBbGxvY2F0aW9ucz1bXTtcbmZvcihjb25zdFtzZWF0LFtpbmNyTGlzdCxkZWNyTGlzdF1db2YgYWxsb2NhdGlvbnMuZW50cmllcygpKXtcbmxldCBuZXdBbGxvYz1zZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCk7XG5mb3IoY29uc3QgaW5jciBvZiBpbmNyTGlzdCl7XG5uZXdBbGxvYz1hZGRUb0FsbG9jYXRpb24obmV3QWxsb2MsaW5jcik7XG4gfVxuZm9yKGNvbnN0IGRlY3Igb2YgZGVjckxpc3Qpe1xubmV3QWxsb2M9c3VidHJhY3RGcm9tQWxsb2NhdGlvbihuZXdBbGxvYyxkZWNyKTtcbiB9XG5yZXN1bHRpbmdBbGxvY2F0aW9ucy5wdXNoKFtzZWF0LG5ld0FsbG9jXSk7XG4gfVxucmV0dXJuIHJlc3VsdGluZ0FsbG9jYXRpb25zO1xuIH07JGjNj19vbmNlLm1ha2VBbGxvY2F0aW9uTWFwKG1ha2VBbGxvY2F0aW9uTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBbGxvY2F0aW9uTWFwIjpbIm1ha2VBbGxvY2F0aW9uTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKz4G/qxCQAAsQkAADsAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3JpZ2h0c0NvbnNlcnZhdGlvbi5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9lcnRwIiwiLi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRSaWdodHNDb25zZXJ2ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwsbWFrZVNjYWxhck1hcFN0b3JlLEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFzc2VydFJpZ2h0c0NvbnNlcnZlZCwgJ25hbWUnLCB7dmFsdWU6IFwiYXNzZXJ0UmlnaHRzQ29uc2VydmVkXCJ9KTskaM2PX29uY2UuYXNzZXJ0UmlnaHRzQ29uc2VydmVkKGFzc2VydFJpZ2h0c0NvbnNlcnZlZCk7ICAgXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdW1CeUJyYW5kPShhbW91bnRzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1bXNCeUJyYW5kPW1ha2VTY2FsYXJNYXBTdG9yZSgnYnJhbmQnKTtcbmZvcihjb25zdCBhbW91bnQgb2YgYW1vdW50cyl7XG5jb25zdHticmFuZH09YW1vdW50O1xuaWYoIXN1bXNCeUJyYW5kLmhhcyhicmFuZCkpe1xuc3Vtc0J5QnJhbmQuaW5pdChicmFuZCxhbW91bnQpO1xuIH1lbHNle1xuY29uc3Qgc3VtU29GYXI9c3Vtc0J5QnJhbmQuZ2V0KGJyYW5kKTtcbnN1bXNCeUJyYW5kLnNldChicmFuZCxBbW91bnRNYXRoLmFkZChzdW1Tb0ZhcixhbW91bnQpKTtcbiB9XG4gfVxucmV0dXJuIHN1bXNCeUJyYW5kO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0RXF1YWxQZXJCcmFuZD0obGVmdFN1bXNCeUJyYW5kLHJpZ2h0U3Vtc0J5QnJhbmQpPT57XG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0U3Vtcz0oYnJhbmQpPT57XG5sZXQgbGVmdFN1bTtcbmxldCByaWdodFN1bTtcbmlmKGxlZnRTdW1zQnlCcmFuZC5oYXMoYnJhbmQpKXtcbmxlZnRTdW09bGVmdFN1bXNCeUJyYW5kLmdldChicmFuZCk7XG4gfVxuaWYocmlnaHRTdW1zQnlCcmFuZC5oYXMoYnJhbmQpKXtcbnJpZ2h0U3VtPXJpZ2h0U3Vtc0J5QnJhbmQuZ2V0KGJyYW5kKTtcbiB9XG5pZihsZWZ0U3VtPT09dW5kZWZpbmVkKXtcbmFzc2VydChyaWdodFN1bSk7XG5sZWZ0U3VtPUFtb3VudE1hdGgubWFrZUVtcHR5RnJvbUFtb3VudChyaWdodFN1bSk7XG4gfVxuaWYocmlnaHRTdW09PT11bmRlZmluZWQpe1xucmlnaHRTdW09QW1vdW50TWF0aC5tYWtlRW1wdHlGcm9tQW1vdW50KGxlZnRTdW0pO1xuIH1cbnJldHVybntsZWZ0U3VtLHJpZ2h0U3VtfTtcbiB9O1xuXG5jb25zdCBhbGxCcmFuZHM9bmV3IFNldChbXG4uLi5sZWZ0U3Vtc0J5QnJhbmQua2V5cygpLFxuLi4ucmlnaHRTdW1zQnlCcmFuZC5rZXlzKCldKTtcblxuXG5mb3IoY29uc3QgYnJhbmQgb2YgYWxsQnJhbmRzKXtcbmNvbnN0e2xlZnRTdW0scmlnaHRTdW19PWdldFN1bXMoYnJhbmQpO1xuQW1vdW50TWF0aC5pc0VxdWFsKGxlZnRTdW0scmlnaHRTdW0pfHxcbkZhaWwgYHJpZ2h0cyB3ZXJlIG5vdCBjb25zZXJ2ZWQgZm9yIGJyYW5kICR7YnJhbmR9ICR7bGVmdFN1bS52YWx1ZX0gIT0gJHtyaWdodFN1bS52YWx1ZX1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UmlnaHRzQ29uc2VydmVkKHByZXZpb3VzQW1vdW50cyxuZXdBbW91bnRzKXtcbmNvbnN0IHN1bXNQcmV2QW1vdW50cz1zdW1CeUJyYW5kKHByZXZpb3VzQW1vdW50cyk7XG5jb25zdCBzdW1zTmV3QW1vdW50cz1zdW1CeUJyYW5kKG5ld0Ftb3VudHMpO1xuYXNzZXJ0RXF1YWxQZXJCcmFuZChzdW1zUHJldkFtb3VudHMsc3Vtc05ld0Ftb3VudHMpO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydFJpZ2h0c0NvbnNlcnZlZCI6WyJhc3NlcnRSaWdodHNDb25zZXJ2ZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxL58U24FAABuBQAAMwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4uL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJaY2ZJIiwiWmNmTWludEkiLCJaY2ZTZWF0U2hhcGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUsSXNzdWVyUmVjb3JkU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiLi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChJc3N1ZXJSZWNvcmRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3QgICAgICAgIFpjZlNlYXRTaGFwZT1NLnJlbW90YWJsZSgnemNmU2VhdCcpOyRozY9fb25jZS5aY2ZTZWF0U2hhcGUoWmNmU2VhdFNoYXBlKTtcblxuY29uc3QgICAgICAgIFpjZk1pbnRJPU0uaW50ZXJmYWNlKCdaY2ZNaW50Jyx7XG5nZXRJc3N1ZXJSZWNvcmQ6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJSZWNvcmRTaGFwZSksXG5taW50R2FpbnM6TS5jYWxsKEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSkuXG5vcHRpb25hbChaY2ZTZWF0U2hhcGUpLlxucmV0dXJucyhaY2ZTZWF0U2hhcGUpLFxuYnVybkxvc3NlczpNLmNhbGwoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFpjZlNlYXRTaGFwZSkucmV0dXJucygpfSk7JGjNj19vbmNlLlpjZk1pbnRJKFpjZk1pbnRJKTtcblxuXG5jb25zdCAgICAgICAgWmNmST1NLmludGVyZmFjZShcbidaQ0YnLFxue1xubWFrZUludml0YXRpb246TS5jYWxsKE0ucmF3KCksTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnJlY29yZCgpLE0ucGF0dGVybigpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuc2V0VGVzdEppZzpNLmNhbGwoKS5vcHRpb25hbChNLnJhdygpKS5yZXR1cm5zKCl9LFxuXG57XG5kZWZhdWx0R3VhcmRzOidwYXNzYWJsZSd9KTskaM2PX29uY2UuWmNmSShaY2ZJKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlpjZlNlYXRTaGFwZSI6WyJaY2ZTZWF0U2hhcGUiXSwiWmNmTWludEkiOlsiWmNmTWludEkiXSwiWmNmSSI6WyJaY2ZJIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAjCnLJMAQAATAEAADYAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3R5cGVzLWFtYmllbnQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+R4vph8JAAAfCQAAMAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvdmF0Um9vdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZmFyIiwiLi4vaW50ZXJuYWwtdHlwZXMuanMiLCIuL3pjZlp5Z290ZS5qcyJdLCJleHBvcnRzIjpbImJ1aWxkUm9vdE9iamVjdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixFLG1ha2VaQ0ZaeWdvdGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIi4uL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXSxbXCIuL3pjZlp5Z290ZS5qc1wiLCBbW1wibWFrZVpDRlp5Z290ZVwiLCBbJGjNj19hID0+IChtYWtlWkNGWnlnb3RlID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVpbGRSb290T2JqZWN0LCAnbmFtZScsIHt2YWx1ZTogXCJidWlsZFJvb3RPYmplY3RcIn0pOyRozY9fb25jZS5idWlsZFJvb3RPYmplY3QoYnVpbGRSb290T2JqZWN0KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIGJ1aWxkUm9vdE9iamVjdChwb3dlcnMsdmF0UGFyYW1ldGVycyxiYWdnYWdlKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3R7dGVzdEppZ1NldHRlcn09cG93ZXJzO1xuY29uc3R7Y29udHJhY3RCdW5kbGVDYXB9PXZhdFBhcmFtZXRlcnM7XG5jb250cmFjdEJ1bmRsZUNhcHx8XG5GYWlsIGBleHBlY3RlZCB2YXRQYXJhbWV0ZXJzLmNvbnRyYWN0QnVuZGxlQ2FwICR7dmF0UGFyYW1ldGVyc31gO1xubGV0e3pvZVNlcnZpY2UsaW52aXRhdGlvbklzc3Vlcn09dmF0UGFyYW1ldGVycztcbmNvbnN0IGZpcnN0VGltZT0hYmFnZ2FnZS5oYXMoJ0RpZFN0YXJ0Jyk7XG5pZihmaXJzdFRpbWUpe1xuYmFnZ2FnZS5pbml0KCdEaWRTdGFydCcsJ0RpZFN0YXJ0Jyk7XG5iYWdnYWdlLmluaXQoJ3pvZVNlcnZpY2UnLHpvZVNlcnZpY2UpO1xuYmFnZ2FnZS5pbml0KCdpbnZpdGF0aW9uSXNzdWVyJyxpbnZpdGF0aW9uSXNzdWVyKTtcbiB9ZWxzZXtcbiF6b2VTZXJ2aWNlfHxGYWlsIGBPbiByZXN0YXJ0IHpvZVNlcnZpY2UgbXVzdCBub3QgYmUgaW4gdmF0UGFyYW1ldGVyc2A7XG56b2VTZXJ2aWNlPWJhZ2dhZ2UuZ2V0KCd6b2VTZXJ2aWNlJyk7XG5cbiFpbnZpdGF0aW9uSXNzdWVyfHxcbkZhaWwgYE9uIHJlc3RhcnQgaW52aXRhdGlvbklzc3VlciBtdXN0IG5vdCBiZSBpbiB2YXRQYXJhbWV0ZXJzYDtcbmludml0YXRpb25Jc3N1ZXI9YmFnZ2FnZS5nZXQoJ2ludml0YXRpb25Jc3N1ZXInKTtcbiB9XG5cbi8vXG5jb25zdCB6Y2ZaeWdvdGU9YXdhaXQgbWFrZVpDRlp5Z290ZShcbnBvd2VycyxcbnpvZVNlcnZpY2UsXG5pbnZpdGF0aW9uSXNzdWVyLFxudGVzdEppZ1NldHRlcixcbmNvbnRyYWN0QnVuZGxlQ2FwLFxuYmFnZ2FnZSk7XG5cblxuLy9cblxuaWYoIWZpcnN0VGltZSl7XG5yZXR1cm4gRS53aGVuKEUoemNmWnlnb3RlKS5yZXN0YXJ0Q29udHJhY3QodmF0UGFyYW1ldGVycy5wcml2YXRlQXJncyksKCk9PlxuRmFyKCd1cGdyYWRlZCBjb250cmFjdFJ1bm5lcicse30pKTtcblxuIH1cblxucmV0dXJuIEZhcignY29udHJhY3RSdW5uZXInLHtcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAqL1xuc3RhcnRaY2Y6KFxuem9lSW5zdGFuY2VBZG1pbixcbmluc3RhbmNlUmVjb3JkRnJvbVpvZSxcbmlzc3VlclN0b3JhZ2VGcm9tWm9lLFxucHJpdmF0ZUFyZ3M9dW5kZWZpbmVkKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBFKHpjZlp5Z290ZSkuc3RhcnRDb250cmFjdChcbnpvZUluc3RhbmNlQWRtaW4sXG5pbnN0YW5jZVJlY29yZEZyb21ab2UsXG5pc3N1ZXJTdG9yYWdlRnJvbVpvZSxcbnByaXZhdGVBcmdzKTtcblxuIH19KTtcblxuIH1cblxuaGFyZGVuKGJ1aWxkUm9vdE9iamVjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEvDnnpBEgAAQRIAADAAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3pjZk1pbnQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvdmF0LWRhdGEiLCIuLi9jbGVhblByb3Bvc2FsLmpzIiwiLi4vaXNzdWVyUmVjb3JkLmpzIiwiLi9hbGxvY2F0aW9uTWF0aC5qcyIsIi4uL2ludGVybmFsLXR5cGVzLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyIsIi4vdHlwZXMtYW1iaWVudC5qcyJdLCJleHBvcnRzIjpbInByZXBhcmVaY01pbnQiLCJzdW1BbW91bnRLZXl3b3JkUmVjb3JkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxBbW91bnRNYXRoLHByZXBhcmVFeG9DbGFzcyxjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkLGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQsbWFrZUlzc3VlclJlY29yZCxhZGRUb0FsbG9jYXRpb24sc3VidHJhY3RGcm9tQWxsb2NhdGlvbixaY2ZNaW50STskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dXV0sW1wiLi4vY2xlYW5Qcm9wb3NhbC5qc1wiLCBbW1wiY29lcmNlQW1vdW50S2V5d29yZFJlY29yZFwiLCBbJGjNj19hID0+IChjb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkID0gJGjNj19hKV1dXV0sW1wiLi4vaXNzdWVyUmVjb3JkLmpzXCIsIFtbXCJhc3NlcnRGdWxsSXNzdWVyUmVjb3JkXCIsIFskaM2PX2EgPT4gKGFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQgPSAkaM2PX2EpXV0sW1wibWFrZUlzc3VlclJlY29yZFwiLCBbJGjNj19hID0+IChtYWtlSXNzdWVyUmVjb3JkID0gJGjNj19hKV1dXV0sW1wiLi9hbGxvY2F0aW9uTWF0aC5qc1wiLCBbW1wiYWRkVG9BbGxvY2F0aW9uXCIsIFskaM2PX2EgPT4gKGFkZFRvQWxsb2NhdGlvbiA9ICRozY9fYSldXSxbXCJzdWJ0cmFjdEZyb21BbGxvY2F0aW9uXCIsIFskaM2PX2EgPT4gKHN1YnRyYWN0RnJvbUFsbG9jYXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJaY2ZNaW50SVwiLCBbJGjNj19hID0+IChaY2ZNaW50SSA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dLFtcIi4vdHlwZXMtYW1iaWVudC5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1bUFtb3VudEtleXdvcmRSZWNvcmQ9KGFtcixpc3N1ZXJSZWNvcmQpPT57XG5jb25zdCBlbXB0eT1BbW91bnRNYXRoLm1ha2VFbXB0eShcbmlzc3VlclJlY29yZC5icmFuZCxcbmlzc3VlclJlY29yZC5hc3NldEtpbmQpO1xuXG5yZXR1cm4gT2JqZWN0LnZhbHVlcyhhbXIpLnJlZHVjZShcbih0b3RhbCxhbW91bnRUb0FkZCk9PlxuQW1vdW50TWF0aC5hZGQodG90YWwsYW1vdW50VG9BZGQsaXNzdWVyUmVjb3JkLmJyYW5kKSxcbmVtcHR5KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLnN1bUFtb3VudEtleXdvcmRSZWNvcmQoc3VtQW1vdW50S2V5d29yZFJlY29yZCk7XG5jb25zdCAgICAgICAgcHJlcGFyZVpjTWludD0oXG56Y2ZCYWdnYWdlLFxucmVjb3JkSXNzdWVyLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCxcbm1ha2VFbXB0eVNlYXRLaXQsXG5yZWFsbG9jYXRvcik9Plxue1xuY29uc3QgbWFrZVpjTWludEludGVybmFsPXByZXBhcmVFeG9DbGFzcyhcbnpjZkJhZ2dhZ2UsXG4nemNmTWludCcsXG5aY2ZNaW50SSxcbi8qXG5cblxuXG5cbiAgICAgKi9cbihrZXl3b3JkLHpvZU1pbnQsaXNzdWVyUmVjb3JkKT0+e1xuY29uc3R7XG5icmFuZDptaW50eUJyYW5kLFxuaXNzdWVyOm1pbnR5SXNzdWVyLFxuZGlzcGxheUluZm86bWludHlEaXNwbGF5SW5mb309XG5pc3N1ZXJSZWNvcmQ7XG5cbmNvbnN0IG1pbnR5SXNzdWVyUmVjb3JkPW1ha2VJc3N1ZXJSZWNvcmQoXG5taW50eUJyYW5kLFxubWludHlJc3N1ZXIsXG5taW50eURpc3BsYXlJbmZvKTtcblxucmVjb3JkSXNzdWVyKGtleXdvcmQsbWludHlJc3N1ZXJSZWNvcmQpO1xuXG5yZXR1cm57a2V5d29yZCx6b2VNaW50LG1pbnR5SXNzdWVyUmVjb3JkfTtcbiB9LFxue1xuZ2V0SXNzdWVyUmVjb3JkKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5taW50eUlzc3VlclJlY29yZDtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWludEdhaW5zKGdhaW5zLHpjZlNlYXQ9bWFrZUVtcHR5U2VhdEtpdCgpLnpjZlNlYXQpe1xuY29uc3R7bWludHlJc3N1ZXJSZWNvcmQsem9lTWludH09dGhpcy5zdGF0ZTtcbmdhaW5zPWNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQoZ2FpbnMsZ2V0QXNzZXRLaW5kQnlCcmFuZCk7XG5cbmNvbnN0IHRvdGFsVG9NaW50PXN1bUFtb3VudEtleXdvcmRSZWNvcmQoZ2FpbnMsbWludHlJc3N1ZXJSZWNvcmQpO1xuXG4hemNmU2VhdC5oYXNFeGl0ZWQoKXx8XG5GYWlsIGB6Y2ZTZWF0IG11c3QgYmUgYWN0aXZlIHRvIG1pbnQgZ2FpbnMgZm9yIHRoZSB6Y2ZTZWF0YDtcbmNvbnN0IGFsbG9jYXRpb25QbHVzR2FpbnM9YWRkVG9BbGxvY2F0aW9uKFxuemNmU2VhdC5nZXRDdXJyZW50QWxsb2NhdGlvbigpLFxuZ2FpbnMpO1xuXG5cbi8vXG4vL1xuaWYoemNmU2VhdC5oYXNTdGFnZWRBbGxvY2F0aW9uKCkpe1xuemNmU2VhdC5pbmNyZW1lbnRCeShnYWlucyk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuemNmU2VhdC5pc09mZmVyU2FmZShhbGxvY2F0aW9uUGx1c0dhaW5zKXx8XG5GYWlsIGBUaGUgYWxsb2NhdGlvbiBhZnRlciBtaW50aW5nIGdhaW5zICR7YWxsb2NhdGlvblBsdXNHYWluc30gZm9yIHRoZSB6Y2ZTZWF0IHdhcyBub3Qgb2ZmZXIgc2FmZWA7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnZvaWQgRSh6b2VNaW50KS5taW50QW5kRXNjcm93KHRvdGFsVG9NaW50KTtcbnJlYWxsb2NhdG9yLnJlYWxsb2NhdGUoemNmU2VhdCxhbGxvY2F0aW9uUGx1c0dhaW5zKTtcbnJldHVybiB6Y2ZTZWF0O1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuYnVybkxvc3Nlcyhsb3NzZXMsemNmU2VhdCl7XG5jb25zdHttaW50eUlzc3VlclJlY29yZCx6b2VNaW50fT10aGlzLnN0YXRlO1xubG9zc2VzPWNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQobG9zc2VzLGdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5jb25zdCB0b3RhbFRvQnVybj1zdW1BbW91bnRLZXl3b3JkUmVjb3JkKGxvc3NlcyxtaW50eUlzc3VlclJlY29yZCk7XG5cbiF6Y2ZTZWF0Lmhhc0V4aXRlZCgpfHxcbkZhaWwgYHpjZlNlYXQgbXVzdCBiZSBhY3RpdmUgdG8gYnVybiBsb3NzZXMgZnJvbSB0aGUgemNmU2VhdGA7XG5jb25zdCBhbGxvY2F0aW9uTWludXNMb3NzZXM9c3VidHJhY3RGcm9tQWxsb2NhdGlvbihcbnpjZlNlYXQuZ2V0Q3VycmVudEFsbG9jYXRpb24oKSxcbmxvc3Nlcyk7XG5cblxuLy9cbnpjZlNlYXQuaXNPZmZlclNhZmUoYWxsb2NhdGlvbk1pbnVzTG9zc2VzKXx8XG5GYWlsIGBUaGUgYWxsb2NhdGlvbiBhZnRlciBidXJuaW5nIGxvc3NlcyAke2FsbG9jYXRpb25NaW51c0xvc3Nlc30gZm9yIHRoZSB6Y2ZTZWF0IHdhcyBub3Qgb2ZmZXIgc2FmZWA7XG5cbi8vXG4vL1xuaWYoemNmU2VhdC5oYXNTdGFnZWRBbGxvY2F0aW9uKCkpe1xuemNmU2VhdC5kZWNyZW1lbnRCeShsb3NzZXMpO1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZWFsbG9jYXRvci5yZWFsbG9jYXRlKHpjZlNlYXQsYWxsb2NhdGlvbk1pbnVzTG9zc2VzKTtcbnZvaWQgRSh6b2VNaW50KS53aXRoZHJhd0FuZEJ1cm4odG90YWxUb0J1cm4pO1xuIH19KTtcblxuXG5cbi8qXG5cblxuXG5cbiAgICovXG5yZXR1cm4gYXN5bmMoa2V5d29yZCx6b2VNaW50UCk9PntcbmNvbnN0W3pvZU1pbnQsaXNzdWVyUmVjb3JkXT1hd2FpdCBQcm9taXNlLmFsbChbXG56b2VNaW50UCxcbkUoem9lTWludFApLmdldElzc3VlclJlY29yZCgpXSk7XG5cbmFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQoaXNzdWVyUmVjb3JkKTtcbi8vXG5yZXR1cm4gbWFrZVpjTWludEludGVybmFsKGtleXdvcmQsem9lTWludCxpc3N1ZXJSZWNvcmQpO1xuIH07XG4gfTskaM2PX29uY2UucHJlcGFyZVpjTWludChwcmVwYXJlWmNNaW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN1bUFtb3VudEtleXdvcmRSZWNvcmQiOlsic3VtQW1vdW50S2V5d29yZFJlY29yZCJdLCJwcmVwYXJlWmNNaW50IjpbInByZXBhcmVaY01pbnQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAXHrmW5swAACbMAAAMAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvemNmU2VhdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvc3RvcmUiLCIuL29mZmVyU2FmZXR5LmpzIiwiLi9yaWdodHNDb25zZXJ2YXRpb24uanMiLCIuL2FsbG9jYXRpb25NYXRoLmpzIiwiLi4vY2xlYW5Qcm9wb3NhbC5qcyIsIi4uL3R5cGVHdWFyZHMuanMiLCIuL3JlYWxsb2NhdGUuanMiLCIuLi9jb250cmFjdFN1cHBvcnQvYXRvbWljVHJhbnNmZXIuanMiXSwiZXhwb3J0cyI6WyJjcmVhdGVTZWF0TWFuYWdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhbm5vdGF0ZUVycm9yLEZhaWwsRSxtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByZXBhcmVFeG9DbGFzcyxwcmVwYXJlRXhvQ2xhc3NLaXQscHJvdmlkZSxwcm92aWRlRHVyYWJsZU1hcFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLEFtb3VudE1hdGgsaW5pdEVtcHR5LE0saXNPZmZlclNhZmUsYXNzZXJ0UmlnaHRzQ29uc2VydmVkLGFkZFRvQWxsb2NhdGlvbixzdWJ0cmFjdEZyb21BbGxvY2F0aW9uLGNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmQsQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFNlYXREYXRhU2hhcGUsU2VhdFNoYXBlLG1ha2VBbGxvY2F0aW9uTWFwLFRyYW5zZmVyUGFydFNoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzc0tpdCA9ICRozY9fYSldXSxbXCJwcm92aWRlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZU1hcFN0b3JlID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIi4vb2ZmZXJTYWZldHkuanNcIiwgW1tcImlzT2ZmZXJTYWZlXCIsIFskaM2PX2EgPT4gKGlzT2ZmZXJTYWZlID0gJGjNj19hKV1dXV0sW1wiLi9yaWdodHNDb25zZXJ2YXRpb24uanNcIiwgW1tcImFzc2VydFJpZ2h0c0NvbnNlcnZlZFwiLCBbJGjNj19hID0+IChhc3NlcnRSaWdodHNDb25zZXJ2ZWQgPSAkaM2PX2EpXV1dXSxbXCIuL2FsbG9jYXRpb25NYXRoLmpzXCIsIFtbXCJhZGRUb0FsbG9jYXRpb25cIiwgWyRozY9fYSA9PiAoYWRkVG9BbGxvY2F0aW9uID0gJGjNj19hKV1dLFtcInN1YnRyYWN0RnJvbUFsbG9jYXRpb25cIiwgWyRozY9fYSA9PiAoc3VidHJhY3RGcm9tQWxsb2NhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4uL2NsZWFuUHJvcG9zYWwuanNcIiwgW1tcImNvZXJjZUFtb3VudEtleXdvcmRSZWNvcmRcIiwgWyRozY9fYSA9PiAoY29lcmNlQW1vdW50S2V5d29yZFJlY29yZCA9ICRozY9fYSldXV1dLFtcIi4uL3R5cGVHdWFyZHMuanNcIiwgW1tcIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiU2VhdERhdGFTaGFwZVwiLCBbJGjNj19hID0+IChTZWF0RGF0YVNoYXBlID0gJGjNj19hKV1dLFtcIlNlYXRTaGFwZVwiLCBbJGjNj19hID0+IChTZWF0U2hhcGUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlYWxsb2NhdGUuanNcIiwgW1tcIm1ha2VBbGxvY2F0aW9uTWFwXCIsIFskaM2PX2EgPT4gKG1ha2VBbGxvY2F0aW9uTWFwID0gJGjNj19hKV1dXV0sW1wiLi4vY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzXCIsIFtbXCJUcmFuc2ZlclBhcnRTaGFwZVwiLCBbJGjNj19hID0+IChUcmFuc2ZlclBhcnRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNyZWF0ZVNlYXRNYW5hZ2VyPShcbnpvZUluc3RhbmNlQWRtaW4sXG5nZXRBc3NldEtpbmRCeUJyYW5kLFxuc2h1dGRvd25XaXRoRmFpbHVyZSxcbnpjZkJhZ2dhZ2UpPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBhY3RpdmVaQ0ZTZWF0cz1wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSh6Y2ZCYWdnYWdlLCdhY3RpdmVaQ0ZTZWF0cycpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zPXByb3ZpZGVEdXJhYmxlTWFwU3RvcmUoXG56Y2ZCYWdnYWdlLFxuJ3pjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zJyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgemNmU2VhdFRvU2VhdEhhbmRsZT1wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShcbnpjZkJhZ2dhZ2UsXG4nemNmU2VhdFRvU2VhdEhhbmRsZScpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBoYXNFeGl0ZWQ9KHpjZlNlYXQpPT4hYWN0aXZlWkNGU2VhdHMuaGFzKHpjZlNlYXQpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRBY3RpdmU9KHpjZlNlYXQpPT57XG5hY3RpdmVaQ0ZTZWF0cy5oYXMoemNmU2VhdCl8fEZhaWwgYHNlYXQgaGFzIGJlZW4gZXhpdGVkYDtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBkb0V4aXRTZWF0PSh6Y2ZTZWF0KT0+e1xuYXNzZXJ0QWN0aXZlKHpjZlNlYXQpO1xuYWN0aXZlWkNGU2VhdHMuZGVsZXRlKHpjZlNlYXQpO1xuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEN1cnJlbnRBbGxvY2F0aW9uPSh6Y2ZTZWF0KT0+e1xuLy9cbi8vXG5hc3NlcnRBY3RpdmUoemNmU2VhdCk7XG5yZXR1cm4gYWN0aXZlWkNGU2VhdHMuZ2V0KHpjZlNlYXQpO1xuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGNvbW1pdFN0YWdlZEFsbG9jYXRpb249KHpjZlNlYXQpPT57XG4vL1xuLy9cbmFjdGl2ZVpDRlNlYXRzLnNldCh6Y2ZTZWF0LHpjZlNlYXQuZ2V0U3RhZ2VkQWxsb2NhdGlvbigpKTtcbnpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmRlbGV0ZSh6Y2ZTZWF0KTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBoYXNTdGFnZWRBbGxvY2F0aW9uPXpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmhhcztcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRTdGFnZWRBbGxvY2F0aW9uPSh6Y2ZTZWF0KT0+e1xuaWYoemNmU2VhdFRvU3RhZ2VkQWxsb2NhdGlvbnMuaGFzKHpjZlNlYXQpKXtcbnJldHVybiB6Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5nZXQoemNmU2VhdCk7XG4gfWVsc2V7XG5yZXR1cm4gYWN0aXZlWkNGU2VhdHMuZ2V0KHpjZlNlYXQpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRTdGFnZWRBbGxvY2F0aW9uPSh6Y2ZTZWF0KT0+e1xuaGFzU3RhZ2VkQWxsb2NhdGlvbih6Y2ZTZWF0KXx8XG5GYWlsIGBSZWFsbG9jYXRlIGZhaWxlZCBiZWNhdXNlIGEgc2VhdCBoYWQgbm8gc3RhZ2VkIGFsbG9jYXRpb24uIFBsZWFzZSBhZGQgb3Igc3VidHJhY3QgZnJvbSB0aGUgc2VhdCBhbmQgdGhlbiByZWFsbG9jYXRlLmA7XG4gfTtcblxuY29uc3Qgc2V0U3RhZ2VkQWxsb2NhdGlvbj0oemNmU2VhdCxuZXdTdGFnZWRBbGxvY2F0aW9uKT0+e1xuaWYoemNmU2VhdFRvU3RhZ2VkQWxsb2NhdGlvbnMuaGFzKHpjZlNlYXQpKXtcbnpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLnNldCh6Y2ZTZWF0LG5ld1N0YWdlZEFsbG9jYXRpb24pO1xuIH1lbHNle1xuemNmU2VhdFRvU3RhZ2VkQWxsb2NhdGlvbnMuaW5pdCh6Y2ZTZWF0LG5ld1N0YWdlZEFsbG9jYXRpb24pO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnROb1N0YWdlZEFsbG9jYXRpb249KHpjZlNlYXQpPT57XG5pZihoYXNTdGFnZWRBbGxvY2F0aW9uKHpjZlNlYXQpKXtcbkZhaWwgYFRoZSBzZWF0IGNvdWxkIG5vdCBiZSBleGl0ZWQgd2l0aCBhIHN0YWdlZCBidXQgdW5jb21taXR0ZWQgYWxsb2NhdGlvbjogJHtnZXRTdGFnZWRBbGxvY2F0aW9uKFxuemNmU2VhdClcbiB9LiBQbGVhc2UgcmVhbGxvY2F0ZSBvdmVyIHRoaXMgc2VhdCBvciBjbGVhciB0aGUgc3RhZ2VkIGFsbG9jYXRpb24uYDtcbiB9XG4gfTtcblxuY29uc3QgWkNGU2VhdEk9TS5pbnRlcmZhY2UoJ1pDRlNlYXQnLHt9LHtzbG9wcHk6dHJ1ZX0pO1xuXG5jb25zdCBtYWtlWkNGU2VhdEludGVybmFsPXByZXBhcmVFeG9DbGFzcyhcbnpjZkJhZ2dhZ2UsXG4nemNmU2VhdCcsXG5aQ0ZTZWF0SSxcbihwcm9wb3NhbCk9Pih7cHJvcG9zYWx9KSxcbntcbmdldFN1YnNjcmliZXIoKXtcbmNvbnN0e3NlbGZ9PXRoaXM7XG5yZXR1cm4gRSh6b2VJbnN0YW5jZUFkbWluKS5nZXRFeGl0U3Vic2NyaWJlcihcbnpjZlNlYXRUb1NlYXRIYW5kbGUuZ2V0KHNlbGYpKTtcblxuIH0sXG5nZXRQcm9wb3NhbCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUucHJvcG9zYWw7XG4gfSxcbmV4aXQoY29tcGxldGlvbil7XG5jb25zdHtzZWxmfT10aGlzO1xuYXNzZXJ0QWN0aXZlKHNlbGYpO1xuYXNzZXJ0Tm9TdGFnZWRBbGxvY2F0aW9uKHNlbGYpO1xuZG9FeGl0U2VhdChzZWxmKTtcbnZvaWQgRSh6b2VJbnN0YW5jZUFkbWluKS5leGl0U2VhdChcbnpjZlNlYXRUb1NlYXRIYW5kbGUuZ2V0KHNlbGYpLFxuY29tcGxldGlvbik7XG5cbnpjZlNlYXRUb1NlYXRIYW5kbGUuZGVsZXRlKHNlbGYpO1xuIH0sXG5mYWlsKFxucmVhc29uPUVycm9yKFxuJ1NlYXQgZXhpdGVkIHdpdGggZmFpbHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgZm9yIG1vcmUgaW5mb3JtYXRpb24uJykpXG5cbntcbmNvbnN0e3NlbGZ9PXRoaXM7XG5pZih0eXBlb2YgcmVhc29uPT09J3N0cmluZycpe1xucmVhc29uPUVycm9yKHJlYXNvbik7XG5hbm5vdGF0ZUVycm9yKFxucmVhc29uLFxuJ1pDRlNlYXQuZmFpbCB3YXMgY2FsbGVkIHdpdGggYSBzdHJpbmcgcmVhc29uLCBidXQgcmVxdWlyZXMgYW4gRXJyb3IgYXJndW1lbnQuJyk7XG5cbiB9XG5pZighaGFzRXhpdGVkKHNlbGYpKXtcbmRvRXhpdFNlYXQoc2VsZik7XG52b2lkIEUoem9lSW5zdGFuY2VBZG1pbikuZmFpbFNlYXQoXG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmdldChzZWxmKSxcbmhhcmRlbihyZWFzb24pKTtcblxuemNmU2VhdFRvU2VhdEhhbmRsZS5kZWxldGUoc2VsZik7XG4gfVxucmV0dXJuIHJlYXNvbjtcbiB9LFxuaGFzRXhpdGVkKCl7XG5jb25zdHtzZWxmfT10aGlzO1xucmV0dXJuIGhhc0V4aXRlZChzZWxmKTtcbiB9LFxuXG4vKlxuXG4gICAgICAgKi9cbmdldEFtb3VudEFsbG9jYXRlZChrZXl3b3JkLGJyYW5kKXtcbmNvbnN0e3NlbGZ9PXRoaXM7XG5hc3NlcnRBY3RpdmUoc2VsZik7XG5jb25zdCBjdXJyZW50QWxsb2NhdGlvbj1nZXRDdXJyZW50QWxsb2NhdGlvbihzZWxmKTtcbmlmKGN1cnJlbnRBbGxvY2F0aW9uW2tleXdvcmRdIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gY3VycmVudEFsbG9jYXRpb25ba2V5d29yZF07XG4gfVxuaWYoIWJyYW5kKXtcbnRocm93IEZhaWwgYEEgYnJhbmQgbXVzdCBiZSBzdXBwbGllZCB3aGVuIHRoZSBrZXl3b3JkIGlzIG5vdCBkZWZpbmVkYDtcbiB9XG5jb25zdCBhc3NldEtpbmQ9Z2V0QXNzZXRLaW5kQnlCcmFuZChicmFuZCk7XG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG4gfSxcbmdldEN1cnJlbnRBbGxvY2F0aW9uKCl7XG5jb25zdHtzZWxmfT10aGlzO1xucmV0dXJuIGdldEN1cnJlbnRBbGxvY2F0aW9uKHNlbGYpO1xuIH0sXG5nZXRTdGFnZWRBbGxvY2F0aW9uKCl7XG5jb25zdHtzZWxmfT10aGlzO1xucmV0dXJuIGdldFN0YWdlZEFsbG9jYXRpb24oc2VsZik7XG4gfSxcbmlzT2ZmZXJTYWZlKG5ld0FsbG9jYXRpb24pe1xuY29uc3R7c3RhdGUsc2VsZn09dGhpcztcbmFzc2VydEFjdGl2ZShzZWxmKTtcbmNvbnN0IGN1cnJlbnRBbGxvY2F0aW9uPWdldEN1cnJlbnRBbGxvY2F0aW9uKHNlbGYpO1xuY29uc3QgcmVhbGxvY2F0aW9uPWhhcmRlbih7XG4uLi5jdXJyZW50QWxsb2NhdGlvbixcbi4uLm5ld0FsbG9jYXRpb259KTtcblxuXG5yZXR1cm4gaXNPZmZlclNhZmUoc3RhdGUucHJvcG9zYWwscmVhbGxvY2F0aW9uKTtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbmluY3JlbWVudEJ5KGFtb3VudEtleXdvcmRSZWNvcmQpe1xuY29uc3R7c2VsZn09dGhpcztcbmFzc2VydEFjdGl2ZShzZWxmKTtcbmFtb3VudEtleXdvcmRSZWNvcmQ9Y29lcmNlQW1vdW50S2V5d29yZFJlY29yZChcbmFtb3VudEtleXdvcmRSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kKTtcblxuc2V0U3RhZ2VkQWxsb2NhdGlvbihcbnNlbGYsXG5hZGRUb0FsbG9jYXRpb24oZ2V0U3RhZ2VkQWxsb2NhdGlvbihzZWxmKSxhbW91bnRLZXl3b3JkUmVjb3JkKSk7XG5cbnJldHVybiBhbW91bnRLZXl3b3JkUmVjb3JkO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuZGVjcmVtZW50QnkoYW1vdW50S2V5d29yZFJlY29yZCl7XG5jb25zdHtzZWxmfT10aGlzO1xuYXNzZXJ0QWN0aXZlKHNlbGYpO1xuYW1vdW50S2V5d29yZFJlY29yZD1jb2VyY2VBbW91bnRLZXl3b3JkUmVjb3JkKFxuYW1vdW50S2V5d29yZFJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQpO1xuXG5zZXRTdGFnZWRBbGxvY2F0aW9uKFxuc2VsZixcbnN1YnRyYWN0RnJvbUFsbG9jYXRpb24oXG5nZXRTdGFnZWRBbGxvY2F0aW9uKHNlbGYpLFxuYW1vdW50S2V5d29yZFJlY29yZCkpO1xuXG5cbnJldHVybiBhbW91bnRLZXl3b3JkUmVjb3JkO1xuIH0sXG5jbGVhcigpe1xuY29uc3R7c2VsZn09dGhpcztcbmlmKHpjZlNlYXRUb1N0YWdlZEFsbG9jYXRpb25zLmhhcyhzZWxmKSl7XG56Y2ZTZWF0VG9TdGFnZWRBbGxvY2F0aW9ucy5kZWxldGUoc2VsZik7XG4gfVxuIH0sXG5oYXNTdGFnZWRBbGxvY2F0aW9uKCl7XG5jb25zdHtzZWxmfT10aGlzO1xucmV0dXJuIGhhc1N0YWdlZEFsbG9jYXRpb24oc2VsZik7XG4gfX0pO1xuXG5cblxuY29uc3QgcmVwbGFjZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2Usa2V5KT0+e1xuY29uc3QgbWFwU3RvcmU9bWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShrZXkse2R1cmFibGU6dHJ1ZX0pO1xuYmFnZ2FnZS5zZXQoa2V5LG1hcFN0b3JlKTtcbnJldHVybiBtYXBTdG9yZTtcbiB9O1xuXG5jb25zdCBaY2ZTZWF0TWFuYWdlcklLaXQ9aGFyZGVuKHtcbnNlYXRNYW5hZ2VyOk0uaW50ZXJmYWNlKCdaY2ZTZWF0TWFuYWdlcicse1xubWFrZVpDRlNlYXQ6TS5jYWxsKFNlYXREYXRhU2hhcGUpLnJldHVybnMoTS5yZW1vdGFibGUoJ3pjZlNlYXQnKSksXG5hdG9taWNSZWFycmFuZ2U6TS5jYWxsKE0uYXJyYXlPZihUcmFuc2ZlclBhcnRTaGFwZSkpLnJldHVybnMoKSxcbnJlYWxsb2NhdGU6TS5jYWxsKE0ucmVtb3RhYmxlKCd6Y2ZTZWF0JyksTS5yZW1vdGFibGUoJ3pjZlNlYXQnKSkuXG5yZXN0KE0uYXJyYXlPZihNLnJlbW90YWJsZSgnemNmU2VhdCcpKSkuXG5yZXR1cm5zKCksXG5kcm9wQWxsUmVmZXJlbmNlczpNLmNhbGwoKS5yZXR1cm5zKCl9KSxcblxuemNmTWludFJlYWxsb2NhdG9yOk0uaW50ZXJmYWNlKCdNaW50UmVhbGxvY2F0b3InLHtcbnJlYWxsb2NhdGU6TS5jYWxsKFNlYXRTaGFwZSxBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpLnJldHVybnMoKX0pfSk7XG5cblxuXG5jb25zdCBtYWtlU2VhdE1hbmFnZXJLaXQ9cHJlcGFyZUV4b0NsYXNzS2l0KFxuemNmQmFnZ2FnZSxcbidaY2ZTZWF0TWFuYWdlcicsXG5aY2ZTZWF0TWFuYWdlcklLaXQsXG5pbml0RW1wdHksXG57XG5zZWF0TWFuYWdlcjp7XG5tYWtlWkNGU2VhdCh7cHJvcG9zYWwsaW5pdGlhbEFsbG9jYXRpb24sc2VhdEhhbmRsZX0pe1xuY29uc3QgemNmU2VhdD1tYWtlWkNGU2VhdEludGVybmFsKHByb3Bvc2FsKTtcbmFjdGl2ZVpDRlNlYXRzLmluaXQoemNmU2VhdCxpbml0aWFsQWxsb2NhdGlvbik7XG56Y2ZTZWF0VG9TZWF0SGFuZGxlLmluaXQoemNmU2VhdCxzZWF0SGFuZGxlKTtcbnJldHVybiB6Y2ZTZWF0O1xuIH0sXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5hdG9taWNSZWFycmFuZ2UodHJhbnNmZXJzKXtcbmNvbnN0IG5ld0FsbG9jYXRpb25zPW1ha2VBbGxvY2F0aW9uTWFwKHRyYW5zZmVycyk7XG5cbi8vXG5mb3IoY29uc3Rbc2VhdF1vZiBuZXdBbGxvY2F0aW9ucyl7XG5hc3NlcnRBY3RpdmUoc2VhdCk7XG4hc2VhdC5oYXNTdGFnZWRBbGxvY2F0aW9uKCl8fFxuRmFpbCBgQ2Fubm90IG1peCBhdG9taWNSZWFycmFuZ2Ugd2l0aCBzZWF0IHN0YWdpbmdzOiAke3NlYXR9YDtcbnpjZlNlYXRUb1NlYXRIYW5kbGUuaGFzKHNlYXQpfHxcbkZhaWwgYFRoZSBzZWF0ICR7c2VhdH0gd2FzIG5vdCByZWNvZ25pemVkYDtcbiB9XG5cbi8vXG5cbi8vXG5jb25zdCBmbGF0dGVuQW1vdW50cz0oYWxsb2NhdGlvbnMpPT5cbmFsbG9jYXRpb25zLmZsYXRNYXAoT2JqZWN0LnZhbHVlcyk7XG5jb25zdCBwcmV2aW91c0Ftb3VudHM9ZmxhdHRlbkFtb3VudHMoXG5uZXdBbGxvY2F0aW9ucy5tYXAoKFtzZWF0XSk9PnNlYXQuZ2V0Q3VycmVudEFsbG9jYXRpb24oKSkpO1xuXG5jb25zdCBuZXdBbW91bnRzPWZsYXR0ZW5BbW91bnRzKFxubmV3QWxsb2NhdGlvbnMubWFwKChbXyxhbGxvY2F0aW9uXSk9PmFsbG9jYXRpb24pKTtcblxuYXNzZXJ0UmlnaHRzQ29uc2VydmVkKHByZXZpb3VzQW1vdW50cyxuZXdBbW91bnRzKTtcblxuLy9cbmZvcihjb25zdFtzZWF0LGFsbG9jYXRpb25db2YgbmV3QWxsb2NhdGlvbnMpe1xuaXNPZmZlclNhZmUoc2VhdC5nZXRQcm9wb3NhbCgpLGFsbG9jYXRpb24pfHxcbkZhaWwgYE9mZmVyIHNhZmV0eSB3YXMgdmlvbGF0ZWQgYnkgdGhlIHByb3Bvc2VkIGFsbG9jYXRpb246ICR7YWxsb2NhdGlvbn0uIFByb3Bvc2FsIHdhcyAke3NlYXQuZ2V0UHJvcG9zYWwoKX1gO1xuIH1cblxuY29uc3Qgc2VhdEhhbmRsZUFsbG9jYXRpb25zPW5ld0FsbG9jYXRpb25zLm1hcChcbihbc2VhdCxhbGxvY2F0aW9uXSk9PntcbmNvbnN0IHNlYXRIYW5kbGU9emNmU2VhdFRvU2VhdEhhbmRsZS5nZXQoc2VhdCk7XG5yZXR1cm57YWxsb2NhdGlvbixzZWF0SGFuZGxlfTtcbiB9KTtcblxudHJ5e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmZvcihjb25zdFtzZWF0LGFsbG9jYXRpb25db2YgbmV3QWxsb2NhdGlvbnMpe1xuYWN0aXZlWkNGU2VhdHMuc2V0KHNlYXQsYWxsb2NhdGlvbik7XG4gfVxuXG4vL1xuLy9cbi8vXG52b2lkIEUoem9lSW5zdGFuY2VBZG1pbikucmVwbGFjZUFsbG9jYXRpb25zKHNlYXRIYW5kbGVBbGxvY2F0aW9ucyk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxuIH0sXG5yZWFsbG9jYXRlKC8qICAgICAgICAgICAgICAgICAgICAqLy4uLnNlYXRzKXtcbmZvcihjb25zdCBzZWF0IG9mIHNlYXRzKXtcbmFzc2VydEFjdGl2ZShzZWF0KTtcbmFzc2VydFN0YWdlZEFsbG9jYXRpb24oc2VhdCk7XG4gfVxuXG4vL1xuY29uc3QgZmxhdHRlbkFsbG9jYXRpb25zPShhbGxvY2F0aW9ucyk9PlxuYWxsb2NhdGlvbnMuZmxhdE1hcChPYmplY3QudmFsdWVzKTtcbmNvbnN0IHByZXZpb3VzQWxsb2NhdGlvbnM9c2VhdHMubWFwKChzZWF0KT0+XG5zZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCkpO1xuXG5jb25zdCBwcmV2aW91c0Ftb3VudHM9ZmxhdHRlbkFsbG9jYXRpb25zKHByZXZpb3VzQWxsb2NhdGlvbnMpO1xuY29uc3QgbmV3QWxsb2NhdGlvbnM9c2VhdHMubWFwKChzZWF0KT0+c2VhdC5nZXRTdGFnZWRBbGxvY2F0aW9uKCkpO1xuY29uc3QgbmV3QW1vdW50cz1mbGF0dGVuQWxsb2NhdGlvbnMobmV3QWxsb2NhdGlvbnMpO1xuXG5hc3NlcnRSaWdodHNDb25zZXJ2ZWQocHJldmlvdXNBbW91bnRzLG5ld0Ftb3VudHMpO1xuXG4vL1xuZm9yKGNvbnN0IHNlYXQgb2Ygc2VhdHMpe1xuaXNPZmZlclNhZmUoc2VhdC5nZXRQcm9wb3NhbCgpLHNlYXQuZ2V0U3RhZ2VkQWxsb2NhdGlvbigpKXx8XG5GYWlsIGBPZmZlciBzYWZldHkgd2FzIHZpb2xhdGVkIGJ5IHRoZSBwcm9wb3NlZCBhbGxvY2F0aW9uOiAke3NlYXQuZ2V0U3RhZ2VkQWxsb2NhdGlvbigpfS4gUHJvcG9zYWwgd2FzICR7c2VhdC5nZXRQcm9wb3NhbCgpfWA7XG4gfVxuXG4vL1xuY29uc3QgemNmU2VhdHNTb0Zhcj1uZXcgU2V0KCk7XG5cbmZvcihjb25zdCBzZWF0IG9mIHNlYXRzKXtcbnpjZlNlYXRUb1NlYXRIYW5kbGUuaGFzKHNlYXQpfHxcbkZhaWwgYFRoZSBzZWF0ICR7c2VhdH0gd2FzIG5vdCByZWNvZ25pemVkYDtcbiF6Y2ZTZWF0c1NvRmFyLmhhcyhzZWF0KXx8XG5GYWlsIGBTZWF0ICgke3NlYXR9KSB3YXMgYWxyZWFkeSBhbiBhcmd1bWVudCB0byByZWFsbG9jYXRlYDtcbnpjZlNlYXRzU29GYXIuYWRkKHNlYXQpO1xuIH1cblxudHJ5e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5mb3IoY29uc3Qgc2VhdCBvZiBzZWF0cyl7XG5jb21taXRTdGFnZWRBbGxvY2F0aW9uKHNlYXQpO1xuIH1cbmNvbnN0IHNlYXRIYW5kbGVBbGxvY2F0aW9ucz1zZWF0cy5tYXAoKHNlYXQpPT57XG5jb25zdCBzZWF0SGFuZGxlPXpjZlNlYXRUb1NlYXRIYW5kbGUuZ2V0KHNlYXQpO1xucmV0dXJue3NlYXRIYW5kbGUsYWxsb2NhdGlvbjpzZWF0LmdldEN1cnJlbnRBbGxvY2F0aW9uKCl9O1xuIH0pO1xuXG5FKHpvZUluc3RhbmNlQWRtaW4pLnJlcGxhY2VBbGxvY2F0aW9ucyhzZWF0SGFuZGxlQWxsb2NhdGlvbnMpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25XaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbiB9LFxuZHJvcEFsbFJlZmVyZW5jZXMoKXtcbmFjdGl2ZVpDRlNlYXRzPXJlcGxhY2VEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbidhY3RpdmVaQ0ZTZWF0cycpO1xuXG56Y2ZTZWF0VG9TZWF0SGFuZGxlPXJlcGxhY2VEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbid6Y2ZTZWF0VG9TZWF0SGFuZGxlJyk7XG5cbiB9fSxcblxuemNmTWludFJlYWxsb2NhdG9yOntcbi8vXG4vL1xuLy9cbnJlYWxsb2NhdGUoemNmU2VhdCxuZXdBbGxvY2F0aW9uKXtcbnRyeXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuYWN0aXZlWkNGU2VhdHMuc2V0KHpjZlNlYXQsbmV3QWxsb2NhdGlvbik7XG5cbmNvbnN0IHNlYXRIYW5kbGVBbGxvY2F0aW9ucz1bXG57XG5zZWF0SGFuZGxlOnpjZlNlYXRUb1NlYXRIYW5kbGUuZ2V0KHpjZlNlYXQpLFxuYWxsb2NhdGlvbjpuZXdBbGxvY2F0aW9ufV07XG5cblxuXG5FKHpvZUluc3RhbmNlQWRtaW4pLnJlcGxhY2VBbGxvY2F0aW9ucyhzZWF0SGFuZGxlQWxsb2NhdGlvbnMpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25XaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbiB9fX0pO1xuXG5cblxuXG5yZXR1cm4gcHJvdmlkZSh6Y2ZCYWdnYWdlLCd0aGVTZWF0TWFuYWdlcktpdCcsKCk9Pm1ha2VTZWF0TWFuYWdlcktpdCgpKTtcbiB9OyRozY9fb25jZS5jcmVhdGVTZWF0TWFuYWdlcihjcmVhdGVTZWF0TWFuYWdlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjcmVhdGVTZWF0TWFuYWdlciI6WyJjcmVhdGVTZWF0TWFuYWdlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABAg42/fjcAAH43AAAyAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC96Y2ZaeWdvdGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvZXJ0cCIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9pbnRlcm5hbCIsIi4uL2NsZWFuUHJvcG9zYWwuanMiLCIuLi9oYW5kbGVXYXJuaW5nLmpzIiwiLi4vaW5zdGFuY2VSZWNvcmRTdG9yYWdlLmpzIiwiLi4vaXNzdWVyU3RvcmFnZS5qcyIsIi4uL21ha2VIYW5kbGUuanMiLCIuL2V2YWxDb250cmFjdENvZGUuanMiLCIuL2V4aXQuanMiLCIuL29mZmVySGFuZGxlclN0b3JhZ2UuanMiLCIuL3pjZlNlYXQuanMiLCIuLi90eXBlR3VhcmRzLmpzIiwiLi96Y2ZNaW50LmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZVpDRlp5Z290ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUscGFzc1N0eWxlT2YsbWFrZVByb21pc2VLaXQsQXNzZXRLaW5kLGFzc2VydFBhdHRlcm4sbXVzdE1hdGNoLGNhbkJlRHVyYWJsZSxNLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvLHByZXBhcmVFeG9DbGFzcyxwcm92aWRlRHVyYWJsZU1hcFN0b3JlLG9iamVjdE1hcCxjbGVhblByb3Bvc2FsLGhhbmRsZVBLaXRXYXJuaW5nLG1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UscHJvdmlkZUlzc3VlclN0b3JhZ2UsZGVmaW5lRHVyYWJsZUhhbmRsZSxldmFsQ29udHJhY3RCdW5kbGUsbWFrZU1ha2VFeGl0ZXIsbWFrZU9mZmVySGFuZGxlclN0b3JhZ2UsY3JlYXRlU2VhdE1hbmFnZXIsSGFuZGxlT2ZmZXJJLEludml0YXRpb25IYW5kbGVTaGFwZSxwcmVwYXJlWmNNaW50LFpjZkk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9cIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4byA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9jbGVhblByb3Bvc2FsLmpzXCIsIFtbXCJjbGVhblByb3Bvc2FsXCIsIFskaM2PX2EgPT4gKGNsZWFuUHJvcG9zYWwgPSAkaM2PX2EpXV1dXSxbXCIuLi9oYW5kbGVXYXJuaW5nLmpzXCIsIFtbXCJoYW5kbGVQS2l0V2FybmluZ1wiLCBbJGjNj19hID0+IChoYW5kbGVQS2l0V2FybmluZyA9ICRozY9fYSldXV1dLFtcIi4uL2luc3RhbmNlUmVjb3JkU3RvcmFnZS5qc1wiLCBbW1wibWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi4vaXNzdWVyU3RvcmFnZS5qc1wiLCBbW1wicHJvdmlkZUlzc3VlclN0b3JhZ2VcIiwgWyRozY9fYSA9PiAocHJvdmlkZUlzc3VlclN0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuLi9tYWtlSGFuZGxlLmpzXCIsIFtbXCJkZWZpbmVEdXJhYmxlSGFuZGxlXCIsIFskaM2PX2EgPT4gKGRlZmluZUR1cmFibGVIYW5kbGUgPSAkaM2PX2EpXV1dXSxbXCIuL2V2YWxDb250cmFjdENvZGUuanNcIiwgW1tcImV2YWxDb250cmFjdEJ1bmRsZVwiLCBbJGjNj19hID0+IChldmFsQ29udHJhY3RCdW5kbGUgPSAkaM2PX2EpXV1dXSxbXCIuL2V4aXQuanNcIiwgW1tcIm1ha2VNYWtlRXhpdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNYWtlRXhpdGVyID0gJGjNj19hKV1dXV0sW1wiLi9vZmZlckhhbmRsZXJTdG9yYWdlLmpzXCIsIFtbXCJtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZVwiLCBbJGjNj19hID0+IChtYWtlT2ZmZXJIYW5kbGVyU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4vemNmU2VhdC5qc1wiLCBbW1wiY3JlYXRlU2VhdE1hbmFnZXJcIiwgWyRozY9fYSA9PiAoY3JlYXRlU2VhdE1hbmFnZXIgPSAkaM2PX2EpXV1dXSxbXCIuLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJIYW5kbGVPZmZlcklcIiwgWyRozY9fYSA9PiAoSGFuZGxlT2ZmZXJJID0gJGjNj19hKV1dLFtcIkludml0YXRpb25IYW5kbGVTaGFwZVwiLCBbJGjNj19hID0+IChJbnZpdGF0aW9uSGFuZGxlU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCIuL3pjZk1pbnQuanNcIiwgW1tcInByZXBhcmVaY01pbnRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVpjTWludCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiWmNmSVwiLCBbJGjNj19hID0+IChaY2ZJID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VaQ0ZaeWdvdGU9YXN5bmMoXG5wb3dlcnMsXG56b2VTZXJ2aWNlLFxuaW52aXRhdGlvbklzc3VlcixcbnRlc3RKaWdTZXR0ZXIsXG5jb250cmFjdEJ1bmRsZUNhcCxcbnpjZkJhZ2dhZ2U9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCd6Y2ZCYWdnYWdlJyx7ZHVyYWJsZTp0cnVlfSkpPT5cbntcbmNvbnN0IG1ha2VTZWF0SGFuZGxlPWRlZmluZUR1cmFibGVIYW5kbGUoemNmQmFnZ2FnZSwnU2VhdCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHpvZUluc3RhbmNlQWRtaW47XG5sZXQgc2VhdE1hbmFnZXI7XG5sZXQgaW5zdGFuY2VSZWNIb2xkZXI7XG5jb25zdCBtYWtlRXhpdGVyPW1ha2VNYWtlRXhpdGVyKHpjZkJhZ2dhZ2UpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRJbnN0YW5jZVJlY0hvbGRlcj0oKT0+e1xuaW5zdGFuY2VSZWNIb2xkZXJ8fEZhaWwgYGluc3RhbmNlUmVjb3JkIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZS5gO1xucmV0dXJuIGluc3RhbmNlUmVjSG9sZGVyO1xuIH07XG5cbmNvbnN0e1xuc3RvcmVJc3N1ZXJSZWNvcmQsXG5nZXRBc3NldEtpbmRCeUJyYW5kLFxuZ2V0QnJhbmRGb3JJc3N1ZXIsXG5nZXRJc3N1ZXJGb3JCcmFuZCxcbmluc3RhbnRpYXRlOmluc3RhbnRpYXRlSXNzdWVyU3RvcmFnZX09XG5wcm92aWRlSXNzdWVyU3RvcmFnZSh6Y2ZCYWdnYWdlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duV2l0aEZhaWx1cmU9KHJlYXNvbik9PntcbnZvaWQgRSh6b2VJbnN0YW5jZUFkbWluKS5mYWlsQWxsU2VhdHMocmVhc29uKTtcbnNlYXRNYW5hZ2VyLmRyb3BBbGxSZWZlcmVuY2VzKCk7XG4vL1xucG93ZXJzLmV4aXRWYXRXaXRoRmFpbHVyZShyZWFzb24pO1xuIH07XG5cbmNvbnN0e3N0b3JlT2ZmZXJIYW5kbGVyLHRha2VPZmZlckhhbmRsZXJ9PVxubWFrZU9mZmVySGFuZGxlclN0b3JhZ2UoemNmQmFnZ2FnZSk7XG5cbi8vXG5jb25zdCBtYWtlSW5zdGFuY2VSZWNvcmQ9bWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSh6Y2ZCYWdnYWdlKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcmVjb3JkSXNzdWVyPShrZXl3b3JkLGlzc3VlclJlY29yZCk9PntcbmdldEluc3RhbmNlUmVjSG9sZGVyKCkuYWRkSXNzdWVyKGtleXdvcmQsaXNzdWVyUmVjb3JkKTtcbnN0b3JlSXNzdWVyUmVjb3JkKGlzc3VlclJlY29yZCk7XG4gfTtcblxuY29uc3QgbWFrZUVtcHR5U2VhdEtpdD0oZXhpdD11bmRlZmluZWQpPT57XG5jb25zdCBpbml0aWFsQWxsb2NhdGlvbj1oYXJkZW4oe30pO1xuY29uc3QgcHJvcG9zYWw9Y2xlYW5Qcm9wb3NhbChoYXJkZW4oe2V4aXR9KSxnZXRBc3NldEtpbmRCeUJyYW5kKTtcbmNvbnN0IHVzZXJTZWF0UHJvbWlzZUtpdD1tYWtlUHJvbWlzZUtpdCgpO1xuaGFuZGxlUEtpdFdhcm5pbmcodXNlclNlYXRQcm9taXNlS2l0KTtcbmNvbnN0IHNlYXRIYW5kbGU9bWFrZVNlYXRIYW5kbGUoKTtcblxuY29uc3Qgc2VhdERhdGE9aGFyZGVuKHtcbnByb3Bvc2FsLFxuaW5pdGlhbEFsbG9jYXRpb24sXG5zZWF0SGFuZGxlfSk7XG5cbmNvbnN0IHpjZlNlYXQ9c2VhdE1hbmFnZXIubWFrZVpDRlNlYXQoc2VhdERhdGEpO1xuXG5jb25zdCBleGl0ZXI9bWFrZUV4aXRlcihzZWF0RGF0YS5wcm9wb3NhbCx6Y2ZTZWF0KTtcbnZvaWQgRSh6b2VJbnN0YW5jZUFkbWluKS5cbm1ha2VOb0VzY3Jvd1NlYXQoaW5pdGlhbEFsbG9jYXRpb24scHJvcG9zYWwsZXhpdGVyLHNlYXRIYW5kbGUpLlxudGhlbigodXNlclNlYXQpPT51c2VyU2VhdFByb21pc2VLaXQucmVzb2x2ZSh1c2VyU2VhdCkpO1xuXG5yZXR1cm57emNmU2VhdCx1c2VyU2VhdDp1c2VyU2VhdFByb21pc2VLaXQucHJvbWlzZX07XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtYWtlWmNNaW50O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VaQ0ZNaW50PWFzeW5jKFxua2V5d29yZCxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5nZXRJbnN0YW5jZVJlY0hvbGRlcigpLmFzc2VydFVuaXF1ZUtleXdvcmQoa2V5d29yZCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCB6b2VNaW50PUUoem9lSW5zdGFuY2VBZG1pbikubWFrZVpvZU1pbnQoXG5rZXl3b3JkLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRpb25zKTtcblxucmV0dXJuIG1ha2VaY01pbnQoa2V5d29yZCx6b2VNaW50KTtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlZ2lzdGVyRmVlTWludD1hc3luYyhrZXl3b3JkLGZlZU1pbnRBY2Nlc3MpPT57XG5nZXRJbnN0YW5jZVJlY0hvbGRlcigpLmFzc2VydFVuaXF1ZUtleXdvcmQoa2V5d29yZCk7XG5cbmNvbnN0IHpvZU1pbnQ9RSh6b2VJbnN0YW5jZUFkbWluKS5yZWdpc3RlckZlZU1pbnQoa2V5d29yZCxmZWVNaW50QWNjZXNzKTtcbnJldHVybiBtYWtlWmNNaW50KGtleXdvcmQsem9lTWludCk7XG4gfTtcblxuY29uc3QgSGFuZGxlT2ZmZXJTaGFwZT1NLnJlbW90YWJsZSgnSGFuZGxlT2ZmZXInKTtcblxuLy9cbi8vXG5jb25zdCBtYWtlSGFuZGxlT2ZmZXJPYmo9cHJlcGFyZUV4b0NsYXNzKFxuemNmQmFnZ2FnZSxcbidoYW5kbGVPZmZlck9iaicsXG5IYW5kbGVPZmZlckksXG4ob2ZmZXJIYW5kbGVyVGFrZXIpPT4oe29mZmVySGFuZGxlclRha2VyfSksXG57XG5oYW5kbGVPZmZlcihpbnZpdGF0aW9uSGFuZGxlLHNlYXREYXRhKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3QgemNmU2VhdD1zZWF0TWFuYWdlci5tYWtlWkNGU2VhdChzZWF0RGF0YSk7XG4vL1xuLy9cblxuY29uc3Qgb2ZmZXJIYW5kbGVyPXN0YXRlLm9mZmVySGFuZGxlclRha2VyLnRha2UoaW52aXRhdGlvbkhhbmRsZSk7XG5jb25zdCBvZmZlclJlc3VsdFA9XG50eXBlb2Ygb2ZmZXJIYW5kbGVyPT09J2Z1bmN0aW9uJz9cbkUob2ZmZXJIYW5kbGVyKSh6Y2ZTZWF0LHNlYXREYXRhLm9mZmVyQXJncyk6XG5FKG9mZmVySGFuZGxlcikuaGFuZGxlKHpjZlNlYXQsc2VhdERhdGEub2ZmZXJBcmdzKTtcblxuY29uc3Qgb2ZmZXJSZXN1bHRQcm9taXNlPW9mZmVyUmVzdWx0UC5jYXRjaCgocmVhc29uKT0+e1xuaWYocmVhc29uPT09dW5kZWZpbmVkKXtcbmNvbnN0IG5ld0Vycj1FcnJvcihcbiBgSWYgYW4gb2ZmZXJIYW5kbGVyIHRocm93cywgaXQgbXVzdCBwcm92aWRlIGEgcmVhc29uIG9mIHR5cGUgRXJyb3IsIGJ1dCB0aGUgcmVhc29uIHdhcyB1bmRlZmluZWQuIFBsZWFzZSBmaXggdGhlIGNvbnRyYWN0IGNvZGUgdG8gc3BlY2lmeSBhIHJlYXNvbiBmb3IgdGhyb3dpbmcuYCk7XG5cbnRocm93IHpjZlNlYXQuZmFpbChuZXdFcnIpO1xuIH1cbnRocm93IHpjZlNlYXQuZmFpbChyZWFzb24pO1xuIH0pO1xuY29uc3QgZXhpdGVyPW1ha2VFeGl0ZXIoc2VhdERhdGEucHJvcG9zYWwsemNmU2VhdCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmV0dXJuIGhhcmRlbih7b2ZmZXJSZXN1bHRQcm9taXNlLGV4aXRPYmo6ZXhpdGVyfSk7XG4gfX0pO1xuXG5cblxuY29uc3QgSGFuZGxlT2ZmZXJGdW5jdGlvblNoYXBlPU0ucmVtb3RhYmxlKCdIYW5kbGVPZmZlckZ1bmN0aW9uJyk7XG5jb25zdCBPZmZlckhhbmRsZXJTaGFwZT1NLm9yKEhhbmRsZU9mZmVyU2hhcGUsSGFuZGxlT2ZmZXJGdW5jdGlvblNoYXBlKTtcbmNvbnN0IFRha2VyST1NLmludGVyZmFjZSgnb2ZmZXIgaGFuZGxlciB0YWtlcicse1xudGFrZTpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlKS5cbm9wdGlvbmFsKE0uc3RyaW5nKCkpLlxucmV0dXJucyhPZmZlckhhbmRsZXJTaGFwZSl9KTtcblxuY29uc3QgdGFrZXI9cHJlcGFyZUV4byh6Y2ZCYWdnYWdlLCdvZmZlciBoYW5kbGVyIHRha2VyJyxUYWtlckkse1xudGFrZTp0YWtlT2ZmZXJIYW5kbGVyfSk7XG5cbmNvbnN0IGhhbmRsZU9mZmVyT2JqPW1ha2VIYW5kbGVPZmZlck9iaih0YWtlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGV2YWx1YXRlQ29udHJhY3Q9KCk9PntcbmxldCBidW5kbGU7XG5pZihwYXNzU3R5bGVPZihjb250cmFjdEJ1bmRsZUNhcCk9PT0ncmVtb3RhYmxlJyl7XG5jb25zdCBidW5kbGVDYXA9Y29udHJhY3RCdW5kbGVDYXA7XG4vL1xuYnVuZGxlPXBvd2Vycy5EKGJ1bmRsZUNhcCkuZ2V0QnVuZGxlKCk7XG4gfWVsc2V7XG5idW5kbGU9Y29udHJhY3RCdW5kbGVDYXA7XG4gfVxucmV0dXJuIGV2YWxDb250cmFjdEJ1bmRsZShidW5kbGUpO1xuIH07XG4vL1xuY29uc3QgYnVuZGxlUmVzdWx0PWF3YWl0IGV2YWx1YXRlQ29udHJhY3QoKTtcblxuLy9cbmNvbnN0e3N0YXJ0LG1ldGE9e319PSgoKT0+e1xuaWYoJ3ByZXBhcmUnaW4gYnVuZGxlUmVzdWx0KXtcbmlmKCdzdGFydCdpbiBidW5kbGVSZXN1bHQpe1xuRmFpbCBgY29udHJhY3QgbXVzdCBwcm92aWRlIGV4YWN0bHkgb25lIG9mIFwic3RhcnRcIiBhbmQgXCJwcmVwYXJlXCJgO1xuIH1cbi8vXG5pZigvKiAgICAgICAgICAgICAgKi9idW5kbGVSZXN1bHQubWV0YT8udXBncmFkYWJpbGl0eSl7XG5GYWlsIGBwcmVwYXJlKCkgaXMgZGVwcmVjYXRlZCBhbmQgaW5jb21wYXRpYmxlIHdpdGggdGhlICd1cGdyYWRhYmlsaXR5JyBpbmRpY2F0b3JgO1xuIH1cbnJldHVybntcbnN0YXJ0OmJ1bmRsZVJlc3VsdC5wcmVwYXJlLFxubWV0YTp7XG51cGdyYWRhYmlsaXR5OidjYW5VcGdyYWRlJyxcbmN1c3RvbVRlcm1zU2hhcGU6YnVuZGxlUmVzdWx0LmN1c3RvbVRlcm1zU2hhcGUsXG5wcml2YXRlQXJnc1NoYXBlOmJ1bmRsZVJlc3VsdC5wcml2YXRlQXJnc1NoYXBlfX07XG5cblxuIH1cbi8vXG5yZXR1cm4gYnVuZGxlUmVzdWx0O1xuIH0pKCk7XG4vL1xuXG5pZihzdGFydD09PXVuZGVmaW5lZCl7XG5pZignYnVpbGRSb290T2JqZWN0J2luIGJ1bmRsZVJlc3VsdCl7XG4vL1xudGhyb3cgRmFpbCBgRGlkIHlvdSBwcm92aWRlIGEgdmF0IGJ1bmRsZSBpbnN0ZWFkIG9mIGEgY29udHJhY3QgYnVuZGxlP2A7XG4gfVxudGhyb3cgRmFpbCBgY29udHJhY3QgZXhwb3J0cyBtaXNzaW5nIHN0YXJ0YDtcbiB9XG5cbnN0YXJ0Lmxlbmd0aDw9M3x8RmFpbCBgaW52YWxpZCBzdGFydCBwYXJhbWV0ZXJzYDtcbmNvbnN0IGR1cmFiaWxpdHlSZXF1aXJlZD1cbm1ldGEudXBncmFkYWJpbGl0eSYmXG5bJ2NhbkJlVXBncmFkZWQnLCdjYW5VcGdyYWRlJ10uaW5jbHVkZXMobWV0YS51cGdyYWRhYmlsaXR5KTtcblxuLyogICAgICAgICAgICAgICovXG5jb25zdCB6Y2Y9cHJlcGFyZUV4byh6Y2ZCYWdnYWdlLCd6Y2YnLFpjZkkse1xuYXRvbWljUmVhcnJhbmdlOih0cmFuc2ZlcnMpPT5zZWF0TWFuYWdlci5hdG9taWNSZWFycmFuZ2UodHJhbnNmZXJzKSxcbnJlYWxsb2NhdGU6KC4uLnNlYXRzKT0+c2VhdE1hbmFnZXIucmVhbGxvY2F0ZSguLi5zZWF0cyksXG5hc3NlcnRVbmlxdWVLZXl3b3JkOihrd2QpPT5nZXRJbnN0YW5jZVJlY0hvbGRlcigpLmFzc2VydFVuaXF1ZUtleXdvcmQoa3dkKSxcbnNhdmVJc3N1ZXI6YXN5bmMoaXNzdWVyUCxrZXl3b3JkKT0+e1xuLy9cbi8vXG4vL1xuZ2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5hc3NlcnRVbmlxdWVLZXl3b3JkKGtleXdvcmQpO1xuY29uc3QgcmVjb3JkPWF3YWl0IEUoem9lSW5zdGFuY2VBZG1pbikuc2F2ZUlzc3Vlcihpc3N1ZXJQLGtleXdvcmQpO1xuLy9cbnJlY29yZElzc3VlcihrZXl3b3JkLHJlY29yZCk7XG5yZXR1cm4gcmVjb3JkO1xuIH0sXG5tYWtlSW52aXRhdGlvbjooXG5vZmZlckhhbmRsZXIsXG5kZXNjcmlwdGlvbixcbmN1c3RvbURldGFpbHM9aGFyZGVuKHt9KSxcbnByb3Bvc2FsU2hhcGU9dW5kZWZpbmVkKT0+XG57XG50eXBlb2YgZGVzY3JpcHRpb249PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZpdGF0aW9ucyBtdXN0IGhhdmUgYSBkZXNjcmlwdGlvbiBzdHJpbmc6ICR7ZGVzY3JpcHRpb259YDtcblxub2ZmZXJIYW5kbGVyfHxGYWlsIGBvZmZlckhhbmRsZXIgbXVzdCBiZSBwcm92aWRlZGA7XG5cbmlmKHByb3Bvc2FsU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihwcm9wb3NhbFNoYXBlKTtcbiB9XG5cbmNvbnN0IGludml0YXRpb25IYW5kbGU9c3RvcmVPZmZlckhhbmRsZXIob2ZmZXJIYW5kbGVyKTtcbmNvbnN0IGludml0YXRpb25QPUUoem9lSW5zdGFuY2VBZG1pbikubWFrZUludml0YXRpb24oXG5pbnZpdGF0aW9uSGFuZGxlLFxuZGVzY3JpcHRpb24sXG5jdXN0b21EZXRhaWxzLFxucHJvcG9zYWxTaGFwZSk7XG5cbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL2ludml0YXRpb25QKTtcbiB9LFxuLy9cbnNodXRkb3duOihjb21wbGV0aW9uKT0+e1xudm9pZCBFKHpvZUluc3RhbmNlQWRtaW4pLmV4aXRBbGxTZWF0cyhjb21wbGV0aW9uKTtcbnNlYXRNYW5hZ2VyLmRyb3BBbGxSZWZlcmVuY2VzKCk7XG5wb3dlcnMuZXhpdFZhdChjb21wbGV0aW9uKTtcbiB9LFxuc2h1dGRvd25XaXRoRmFpbHVyZSxcbnN0b3BBY2NlcHRpbmdPZmZlcnM6KCk9PkUoem9lSW5zdGFuY2VBZG1pbikuc3RvcEFjY2VwdGluZ09mZmVycygpLFxubWFrZVpDRk1pbnQsXG5yZWdpc3RlckZlZU1pbnQsXG5tYWtlRW1wdHlTZWF0S2l0LFxuXG4vL1xuZ2V0Wm9lU2VydmljZTooKT0+em9lU2VydmljZSxcbmdldEludml0YXRpb25Jc3N1ZXI6KCk9Pmludml0YXRpb25Jc3N1ZXIsXG5nZXRUZXJtczooKT0+e1xuY29uc3QgdGVybXM9Z2V0SW5zdGFuY2VSZWNIb2xkZXIoKS5nZXRUZXJtcygpO1xuXG4vL1xuY29uc3R7Y3VzdG9tVGVybXNTaGFwZX09bWV0YTtcbmlmKGN1c3RvbVRlcm1zU2hhcGUpe1xuY29uc3R7YnJhbmRzOl9iLGlzc3VlcnM6X2ksLi4uY3VzdG9tVGVybXN9PXRlcm1zO1xubXVzdE1hdGNoKGhhcmRlbihjdXN0b21UZXJtcyksY3VzdG9tVGVybXNTaGFwZSwnY3VzdG9tVGVybXMnKTtcbiB9XG5cbnJldHVybiB0ZXJtcztcbiB9LFxuZ2V0QnJhbmRGb3JJc3N1ZXIsXG5nZXRJc3N1ZXJGb3JCcmFuZCxcbmdldEFzc2V0S2luZDpnZXRBc3NldEtpbmRCeUJyYW5kLFxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuc2V0VGVzdEppZzoodGVzdEZuPSgpPT4oe30pKT0+e1xuaWYodGVzdEppZ1NldHRlcil7XG50ZXN0SmlnU2V0dGVyKHsuLi50ZXN0Rm4oKSx6Y2Z9KTtcbiB9XG4gfSxcbmdldEluc3RhbmNlOigpPT5nZXRJbnN0YW5jZVJlY0hvbGRlcigpLmdldEluc3RhbmNlUmVjb3JkKCkuaW5zdGFuY2UsXG5zZXRPZmZlckZpbHRlcjooc3RyaW5ncyk9PkUoem9lSW5zdGFuY2VBZG1pbikuc2V0T2ZmZXJGaWx0ZXIoc3RyaW5ncyksXG5nZXRPZmZlckZpbHRlcjooKT0+RSh6b2VJbnN0YW5jZUFkbWluKS5nZXRPZmZlckZpbHRlcigpfSk7XG5cblxuLy9cbi8vXG4vL1xuXG5jb25zdCBjb250cmFjdEJhZ2dhZ2U9cHJvdmlkZUR1cmFibGVNYXBTdG9yZSh6Y2ZCYWdnYWdlLCdjb250cmFjdEJhZ2dhZ2UnKTtcblxuY29uc3QgaW5pdFNlYXRNZ3JBbmRNaW50S2luZD0oKT0+e1xubGV0IHpjZk1pbnRSZWFsbG9jYXRvcjtcbih7c2VhdE1hbmFnZXIsemNmTWludFJlYWxsb2NhdG9yfT1jcmVhdGVTZWF0TWFuYWdlcihcbnpvZUluc3RhbmNlQWRtaW4sXG5nZXRBc3NldEtpbmRCeUJyYW5kLFxuc2h1dGRvd25XaXRoRmFpbHVyZSxcbnpjZkJhZ2dhZ2UpKTtcblxuXG5tYWtlWmNNaW50PXByZXBhcmVaY01pbnQoXG56Y2ZCYWdnYWdlLFxucmVjb3JkSXNzdWVyLFxuZ2V0QXNzZXRLaW5kQnlCcmFuZCxcbm1ha2VFbXB0eVNlYXRLaXQsXG56Y2ZNaW50UmVhbGxvY2F0b3IpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB6Y2ZaeWdvdGU9e1xuLy9cbnN0YXJ0Q29udHJhY3Q6YXN5bmMoXG5pbnN0YW5jZUFkbWluRnJvbVpvZSxcbmluc3RhbmNlUmVjb3JkRnJvbVpvZSxcbmlzc3VlclN0b3JhZ2VGcm9tWm9lLFxucHJpdmF0ZUFyZ3M9dW5kZWZpbmVkKT0+XG57XG56b2VJbnN0YW5jZUFkbWluPWluc3RhbmNlQWRtaW5Gcm9tWm9lO1xuaW5pdFNlYXRNZ3JBbmRNaW50S2luZCgpO1xuXG56Y2ZCYWdnYWdlLmluaXQoJ3pjZkluc3RhbmNlQWRtaW4nLGluc3RhbmNlQWRtaW5Gcm9tWm9lKTtcbmluc3RhbmNlUmVjSG9sZGVyPW1ha2VJbnN0YW5jZVJlY29yZChpbnN0YW5jZVJlY29yZEZyb21ab2UpO1xuaW5zdGFudGlhdGVJc3N1ZXJTdG9yYWdlKGlzc3VlclN0b3JhZ2VGcm9tWm9lKTtcbnpjZkJhZ2dhZ2UuaW5pdCgnaW5zdGFuY2VSZWNIb2xkZXInLGluc3RhbmNlUmVjSG9sZGVyKTtcbnpjZkJhZ2dhZ2UuaW5pdCgncmVwYWlyZWRDb250cmFjdENvbXBsZXRpb25XYXRjaGVyJyx0cnVlKTtcblxuY29uc3R7cHJpdmF0ZUFyZ3NTaGFwZX09bWV0YTtcbmlmKHByaXZhdGVBcmdzU2hhcGUpe1xubXVzdE1hdGNoKHByaXZhdGVBcmdzLHByaXZhdGVBcmdzU2hhcGUsJ3ByaXZhdGVBcmdzJyk7XG4gfVxuLy9cbnJldHVybiBFLndoZW4oXG5zdGFydCh6Y2YscHJpdmF0ZUFyZ3MsY29udHJhY3RCYWdnYWdlKSxcbih7XG5jcmVhdG9yRmFjZXQ9dW5kZWZpbmVkLFxucHVibGljRmFjZXQ9dW5kZWZpbmVkLFxuY3JlYXRvckludml0YXRpb249dW5kZWZpbmVkLFxuLi4udW5leHBlY3RlZH0pPT5cbntcbmNvbnN0IHVuZXhwZWN0ZWRLZXlzPU9iamVjdC5rZXlzKHVuZXhwZWN0ZWQpO1xudW5leHBlY3RlZEtleXMubGVuZ3RoPT09MHx8XG5GYWlsIGBjb250cmFjdCBcInN0YXJ0XCIgcmV0dXJuZWQgdW5yZWNvZ25pemVkIHByb3BlcnRpZXMgJHt1bmV4cGVjdGVkS2V5c31gO1xuXG5jb25zdCBhcmVEdXJhYmxlPW9iamVjdE1hcChcbntjcmVhdG9yRmFjZXQscHVibGljRmFjZXQsY3JlYXRvckludml0YXRpb259LFxuY2FuQmVEdXJhYmxlKTtcblxuY29uc3QgYWxsRHVyYWJsZT1PYmplY3QudmFsdWVzKGFyZUR1cmFibGUpLmV2ZXJ5KEJvb2xlYW4pO1xuaWYoZHVyYWJpbGl0eVJlcXVpcmVkKXtcbmFsbER1cmFibGV8fFxuRmFpbCBgd2l0aCAke21ldGEudXBncmFkYWJpbGl0eX0sIHZhbHVlcyBmcm9tIHN0YXJ0KCkgbXVzdCBiZSBkdXJhYmxlICR7YXJlRHVyYWJsZX1gO1xuIH1cblxuaWYoYWxsRHVyYWJsZSl7XG56Y2ZCYWdnYWdlLmluaXQoJ2NyZWF0b3JGYWNldCcsY3JlYXRvckZhY2V0KTtcbnpjZkJhZ2dhZ2UuaW5pdCgncHVibGljRmFjZXQnLHB1YmxpY0ZhY2V0KTtcbnpjZkJhZ2dhZ2UuaW5pdCgnY3JlYXRvckludml0YXRpb24nLGNyZWF0b3JJbnZpdGF0aW9uKTtcbiB9XG5cbnJldHVybiBoYXJkZW4oe1xuY3JlYXRvckZhY2V0LFxucHVibGljRmFjZXQsXG5jcmVhdG9ySW52aXRhdGlvbixcbmhhbmRsZU9mZmVyT2JqfSk7XG5cbiB9KTtcblxuIH0sXG5cbnJlc3RhcnRDb250cmFjdDphc3luYyhwcml2YXRlQXJncz11bmRlZmluZWQpPT57XG5pZihtZXRhLnVwZ3JhZGFiaWxpdHkpe1xubWV0YS51cGdyYWRhYmlsaXR5PT09J2NhblVwZ3JhZGUnfHxGYWlsIGBjb250cmFjdCBjYW5ub3QgdXBncmFkZWA7XG4gfVxuem9lSW5zdGFuY2VBZG1pbj16Y2ZCYWdnYWdlLmdldCgnemNmSW5zdGFuY2VBZG1pbicpO1xuaW5zdGFuY2VSZWNIb2xkZXI9emNmQmFnZ2FnZS5nZXQoJ2luc3RhbmNlUmVjSG9sZGVyJyk7XG5pbml0U2VhdE1nckFuZE1pbnRLaW5kKCk7XG5cbmF3YWl0IG51bGw7XG5pZighemNmQmFnZ2FnZS5oYXMoJ3JlcGFpcmVkQ29udHJhY3RDb21wbGV0aW9uV2F0Y2hlcicpKXtcbi8vXG4vL1xuRSh6b2VJbnN0YW5jZUFkbWluKS5cbnJlcGFpckNvbnRyYWN0Q29tcGxldGlvbldhdGNoZXIoKS5cbmNhdGNoKCgpPT57IH0pO1xuXG56Y2ZCYWdnYWdlLmluaXQoJ3JlcGFpcmVkQ29udHJhY3RDb21wbGV0aW9uV2F0Y2hlcicsdHJ1ZSk7XG4gfVxuXG5jb25zdHtwcml2YXRlQXJnc1NoYXBlfT1tZXRhO1xuaWYocHJpdmF0ZUFyZ3NTaGFwZSl7XG5tdXN0TWF0Y2gocHJpdmF0ZUFyZ3MscHJpdmF0ZUFyZ3NTaGFwZSwncHJpdmF0ZUFyZ3MnKTtcbiB9XG5cbi8vXG5yZXR1cm4gRS53aGVuKFxuc3RhcnQoemNmLHByaXZhdGVBcmdzLGNvbnRyYWN0QmFnZ2FnZSksXG4oe1xuY3JlYXRvckZhY2V0PXVuZGVmaW5lZCxcbnB1YmxpY0ZhY2V0PXVuZGVmaW5lZCxcbmNyZWF0b3JJbnZpdGF0aW9uPXVuZGVmaW5lZH0pPT5cbntcbmNvbnN0IHByaW9yQ3JlYXRvckZhY2V0PXpjZkJhZ2dhZ2UuZ2V0KCdjcmVhdG9yRmFjZXQnKTtcbmNvbnN0IHByaW9yUHVibGljRmFjZXQ9emNmQmFnZ2FnZS5nZXQoJ3B1YmxpY0ZhY2V0Jyk7XG5jb25zdCBwcmlvckNyZWF0b3JJbnZpdGF0aW9uPXpjZkJhZ2dhZ2UuZ2V0KCdjcmVhdG9ySW52aXRhdGlvbicpO1xuXG5wcmlvckNyZWF0b3JGYWNldD09PWNyZWF0b3JGYWNldCYmXG5wcmlvclB1YmxpY0ZhY2V0PT09cHVibGljRmFjZXQmJlxucHJpb3JDcmVhdG9ySW52aXRhdGlvbj09PWNyZWF0b3JJbnZpdGF0aW9ufHxcbkZhaWwgYHJlc3RhcnRDb250cmFjdCBmYWlsZWQ6IGZhY2V0cyByZXR1cm5lZCBieSBjb250cmFjdCBjaGFuZ2VkIGlkZW50aXR5YDtcbnJldHVybiBoYXJkZW4oe1xuY3JlYXRvckZhY2V0LFxucHVibGljRmFjZXQsXG5jcmVhdG9ySW52aXRhdGlvbixcbmhhbmRsZU9mZmVyT2JqfSk7XG5cbiB9KTtcblxuIH19O1xuXG5yZXR1cm4gaGFyZGVuKHpjZlp5Z290ZSk7XG4gfTskaM2PX29uY2UubWFrZVpDRlp5Z290ZShtYWtlWkNGWnlnb3RlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VaQ0ZaeWdvdGUiOlsibWFrZVpDRlp5Z290ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAX7ZyhOQcAADkHAAA5AAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RTdXBwb3J0L2F0b21pY1RyYW5zZmVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiVHJhbnNmZXJQYXJ0U2hhcGUiLCJhdG9taWNSZWFycmFuZ2UiLCJhdG9taWNUcmFuc2ZlciIsImZyb21Pbmx5IiwidG9Pbmx5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sQW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFNlYXRTaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIi4uL3R5cGVHdWFyZHMuanNcIiwgW1tcIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZVwiLCBbJGjNj19hID0+IChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiU2VhdFNoYXBlXCIsIFskaM2PX2EgPT4gKFNlYXRTaGFwZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3QgICAgICAgIFRyYW5zZmVyUGFydFNoYXBlPU0uc3BsaXRBcnJheShcbmhhcmRlbihbTS5vcHQoU2VhdFNoYXBlKSxNLm9wdChTZWF0U2hhcGUpLE0ub3B0KEFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSldKSxcbmhhcmRlbihbTS5vcHQoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKV0pKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuVHJhbnNmZXJQYXJ0U2hhcGUoVHJhbnNmZXJQYXJ0U2hhcGUpO1xuY29uc3QgICAgICAgIGF0b21pY1JlYXJyYW5nZT0oemNmLHRyYW5zZmVycyk9PntcbnpjZi5hdG9taWNSZWFycmFuZ2UodHJhbnNmZXJzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuYXRvbWljUmVhcnJhbmdlKGF0b21pY1JlYXJyYW5nZSk7XG5jb25zdCAgICAgICAgZnJvbU9ubHk9KGZyb21TZWF0LGZyb21BbW91bnRzKT0+XG5oYXJkZW4oW2Zyb21TZWF0LHVuZGVmaW5lZCxmcm9tQW1vdW50c10pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZnJvbU9ubHkoZnJvbU9ubHkpO1xuY29uc3QgICAgICAgIHRvT25seT0odG9TZWF0LHRvQW1vdW50cyk9PlxuaGFyZGVuKFt1bmRlZmluZWQsdG9TZWF0LHVuZGVmaW5lZCx0b0Ftb3VudHNdKTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnRvT25seSh0b09ubHkpO1xuY29uc3QgICAgICAgIGF0b21pY1RyYW5zZmVyPShcbnpjZixcbmZyb21TZWF0PXVuZGVmaW5lZCxcbnRvU2VhdD11bmRlZmluZWQsXG5mcm9tQW1vdW50cz11bmRlZmluZWQsXG50b0Ftb3VudHM9dW5kZWZpbmVkKT0+XG56Y2YuYXRvbWljUmVhcnJhbmdlKGhhcmRlbihbW2Zyb21TZWF0LHRvU2VhdCxmcm9tQW1vdW50cyx0b0Ftb3VudHNdXSkpOyRozY9fb25jZS5hdG9taWNUcmFuc2ZlcihhdG9taWNUcmFuc2Zlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUcmFuc2ZlclBhcnRTaGFwZSI6WyJUcmFuc2ZlclBhcnRTaGFwZSJdLCJhdG9taWNSZWFycmFuZ2UiOlsiYXRvbWljUmVhcnJhbmdlIl0sImZyb21Pbmx5IjpbImZyb21Pbmx5Il0sInRvT25seSI6WyJ0b09ubHkiXSwiYXRvbWljVHJhbnNmZXIiOlsiYXRvbWljVHJhbnNmZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFFYf5uECAADhAgAAKAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2hhbmRsZVdhcm5pbmcuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImhhbmRsZVBLaXRXYXJuaW5nIiwiaGFuZGxlUFdhcm5pbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaGFuZGxlUFdhcm5pbmc9KHByb21pc2UpPT57XG5wcm9taXNlLmNhdGNoKCgpPT57IH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmhhbmRsZVBXYXJuaW5nKGhhbmRsZVBXYXJuaW5nKTtcbmNvbnN0ICAgICAgICBoYW5kbGVQS2l0V2FybmluZz0ocHJvbWlzZUtpdCk9PntcbmhhbmRsZVBXYXJuaW5nKHByb21pc2VLaXQucHJvbWlzZSk7XG4gfTskaM2PX29uY2UuaGFuZGxlUEtpdFdhcm5pbmcoaGFuZGxlUEtpdFdhcm5pbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFuZGxlUFdhcm5pbmciOlsiaGFuZGxlUFdhcm5pbmciXSwiaGFuZGxlUEtpdFdhcm5pbmciOlsiaGFuZGxlUEtpdFdhcm5pbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0yc1o/gOAAD4DgAAMAAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2luc3RhbmNlUmVjb3JkU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi9jbGVhblByb3Bvc2FsLmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsibWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwscHJlcGFyZUV4b0NsYXNzLE0sYXNzZXJ0S2V5d29yZE5hbWUsQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUsSW5zdGFsbGF0aW9uU2hhcGUsSW5zdGFuY2VSZWNvcmRTaGFwZSxJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUsSXNzdWVyUmVjb3JkU2hhcGUsS2V5d29yZFNoYXBlLFRlcm1zU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dLFtcIi4vY2xlYW5Qcm9wb3NhbC5qc1wiLCBbW1wiYXNzZXJ0S2V5d29yZE5hbWVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5d29yZE5hbWUgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIkluc3RhbGxhdGlvblNoYXBlXCIsIFskaM2PX2EgPT4gKEluc3RhbGxhdGlvblNoYXBlID0gJGjNj19hKV1dLFtcIkluc3RhbmNlUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW5zdGFuY2VSZWNvcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGVcIiwgWyRozY9fYSA9PiAoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIklzc3VlclJlY29yZFNoYXBlXCIsIFskaM2PX2EgPT4gKElzc3VlclJlY29yZFNoYXBlID0gJGjNj19hKV1dLFtcIktleXdvcmRTaGFwZVwiLCBbJGjNj19hID0+IChLZXl3b3JkU2hhcGUgPSAkaM2PX2EpXV0sW1wiVGVybXNTaGFwZVwiLCBbJGjNj19hID0+IChUZXJtc1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2U9KGJhZ2dhZ2UpPT57XG5jb25zdCBhc3NlcnRJbnN0YW50aWF0ZWQ9KGluc3RhbmNlUmVjb3JkKT0+e1xuaW5zdGFuY2VSZWNvcmQhPT0ndW5kZWZpbmVkJ3x8XG5GYWlsIGBpbnN0YW5jZVJlY29yZCBoYXMgbm90IGJlZW4gaW5zdGFudGlhdGVkYDtcbiB9O1xuXG5jb25zdCBJbnN0YW5jZVJlY29yZEk9TS5pbnRlcmZhY2UoJ0luc3RhbmNlUmVjb3JkJyx7XG5hZGRJc3N1ZXI6TS5jYWxsKEtleXdvcmRTaGFwZSxJc3N1ZXJSZWNvcmRTaGFwZSkucmV0dXJucygpLFxuZ2V0SW5zdGFuY2VSZWNvcmQ6TS5jYWxsKCkucmV0dXJucyhJbnN0YW5jZVJlY29yZFNoYXBlKSxcbmdldFRlcm1zOk0uY2FsbCgpLnJldHVybnMoTS5zcGxpdFJlY29yZChUZXJtc1NoYXBlKSksXG5nZXRJbnN0YWxsYXRpb246TS5jYWxsKCkucmV0dXJucyhJbnN0YWxsYXRpb25TaGFwZSksXG5nZXRJc3N1ZXJzOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEJyYW5kczpNLmNhbGwoKS5yZXR1cm5zKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcbmFzc2VydFVuaXF1ZUtleXdvcmQ6TS5jYWxsKEtleXdvcmRTaGFwZSkucmV0dXJucygpfSk7XG5cblxuY29uc3QgbWFrZUluc3RhbmNlUmVjb3JkPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4nSW5zdGFuY2VSZWNvcmQnLFxuSW5zdGFuY2VSZWNvcmRJLFxuKHJlY29yZCk9PmhhcmRlbih7aW5zdGFuY2VSZWNvcmQ6cmVjb3JkfSksXG57XG5hZGRJc3N1ZXIoa2V5d29yZCxpc3N1ZXJSZWNvcmQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG4hb3duS2V5cyhpc3N1ZXJSZWNvcmQpLmluY2x1ZGVzKGtleXdvcmQpfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGRlZmluaXRpb24gb2YgJHtxKGtleXdvcmQpfWA7XG5cbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5jb25zdCBpbnN0YW5jZVJlY29yZD1zdGF0ZS5pbnN0YW5jZVJlY29yZDtcbmNvbnN0IG5leHRJbnN0YW5jZVJlY29yZD1oYXJkZW4oe1xuLi4uaW5zdGFuY2VSZWNvcmQsXG50ZXJtczp7XG4uLi5pbnN0YW5jZVJlY29yZC50ZXJtcyxcbmlzc3VlcnM6e1xuLi4uaW5zdGFuY2VSZWNvcmQudGVybXMuaXNzdWVycyxcbltrZXl3b3JkXTppc3N1ZXJSZWNvcmQuaXNzdWVyfSxcblxuYnJhbmRzOntcbi4uLmluc3RhbmNlUmVjb3JkLnRlcm1zLmJyYW5kcyxcbltrZXl3b3JkXTppc3N1ZXJSZWNvcmQuYnJhbmR9fX0pO1xuXG5cblxuc3RhdGUuaW5zdGFuY2VSZWNvcmQ9bmV4dEluc3RhbmNlUmVjb3JkO1xuIH0sXG5nZXRJbnN0YW5jZVJlY29yZCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlUmVjb3JkO1xuIH0sXG5nZXRUZXJtcygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5hc3NlcnRJbnN0YW50aWF0ZWQoc3RhdGUuaW5zdGFuY2VSZWNvcmQpO1xucmV0dXJuIHN0YXRlLmluc3RhbmNlUmVjb3JkLnRlcm1zO1xuIH0sXG5nZXRJbnN0YWxsYXRpb24oKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZC5pbnN0YWxsYXRpb247XG4gfSxcbmdldElzc3VlcnMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcy5pc3N1ZXJzO1xuIH0sXG5nZXRCcmFuZHMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuYXNzZXJ0SW5zdGFudGlhdGVkKHN0YXRlLmluc3RhbmNlUmVjb3JkKTtcbnJldHVybiBzdGF0ZS5pbnN0YW5jZVJlY29yZC50ZXJtcy5icmFuZHM7XG4gfSxcbmFzc2VydFVuaXF1ZUtleXdvcmQoa2V5d29yZCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmFzc2VydEluc3RhbnRpYXRlZChzdGF0ZS5pbnN0YW5jZVJlY29yZCk7XG5hc3NlcnRLZXl3b3JkTmFtZShrZXl3b3JkKTtcbiFvd25LZXlzKHN0YXRlLmluc3RhbmNlUmVjb3JkLnRlcm1zLmlzc3VlcnMpLmluY2x1ZGVzKGtleXdvcmQpfHxcbkZhaWwgYGtleXdvcmQgJHtxKGtleXdvcmQpfSBtdXN0IGJlIHVuaXF1ZWA7XG4gfX0pO1xuXG5cblxucmV0dXJuIG1ha2VJbnN0YW5jZVJlY29yZDtcbiB9OyRozY9fb25jZS5tYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlKG1ha2VJbnN0YW5jZVJlY29yZFN0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUluc3RhbmNlUmVjb3JkU3RvcmFnZSI6WyJtYWtlSW5zdGFuY2VSZWNvcmRTdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJty+dFtBAAAbQQAACkAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pbnRlcm5hbC10eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG4vKlxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACJl7Y51wMAANcDAAAnAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaXNzdWVyUmVjb3JkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQiLCJtYWtlSXNzdWVyUmVjb3JkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXNzdWVyUmVjb3JkPShicmFuZCxpc3N1ZXIsZGlzcGxheUluZm8pPT5cbmhhcmRlbih7XG5icmFuZCxcbmlzc3VlcixcbmFzc2V0S2luZDpkaXNwbGF5SW5mby5hc3NldEtpbmQsXG5kaXNwbGF5SW5mb30pO1xuXG5cbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VJc3N1ZXJSZWNvcmQobWFrZUlzc3VlclJlY29yZCk7XG5jb25zdCAgICAgICAgYXNzZXJ0RnVsbElzc3VlclJlY29yZD0oaXNzdWVyUmVjb3JkKT0+e1xuaWYoIWlzc3VlclJlY29yZC5kaXNwbGF5SW5mbyl7XG50aHJvdyBGYWlsIGBmdWxsIElzc3VlclJlY29yZCByZXF1aXJlcyBkaXNwbGF5SW5mb2A7XG4gfVxuIH07JGjNj19vbmNlLmFzc2VydEZ1bGxJc3N1ZXJSZWNvcmQoYXNzZXJ0RnVsbElzc3VlclJlY29yZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSXNzdWVyUmVjb3JkIjpbIm1ha2VJc3N1ZXJSZWNvcmQiXSwiYXNzZXJ0RnVsbElzc3VlclJlY29yZCI6WyJhc3NlcnRGdWxsSXNzdWVyUmVjb3JkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADJ19CyfEQAAnxEAACgAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pc3N1ZXJTdG9yYWdlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy92YXQtZGF0YSIsIi4vY2xlYW5Qcm9wb3NhbC5qcyIsIi4vaXNzdWVyUmVjb3JkLmpzIl0sImV4cG9ydHMiOlsicHJvdmlkZUlzc3VlclN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxFLGRlZXBseUZ1bGZpbGxlZE9iamVjdCxvYmplY3RNYXAscHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsY2xlYW5LZXl3b3JkcyxtYWtlSXNzdWVyUmVjb3JkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRPYmplY3RcIiwgWyRozY9fYSA9PiAoZGVlcGx5RnVsZmlsbGVkT2JqZWN0ID0gJGjNj19hKV1dLFtcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vY2xlYW5Qcm9wb3NhbC5qc1wiLCBbW1wiY2xlYW5LZXl3b3Jkc1wiLCBbJGjNj19hID0+IChjbGVhbktleXdvcmRzID0gJGjNj19hKV1dXV0sW1wiLi9pc3N1ZXJSZWNvcmQuanNcIiwgW1tcIm1ha2VJc3N1ZXJSZWNvcmRcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclJlY29yZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbmNvbnN0IFNUT1JBR0VfSU5TVEFOVElBVEVEX0tFWT0nSXNzdWVyU3RvcmFnZUluc3RhbnRpYXRlZCc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlSXNzdWVyU3RvcmFnZT0oemNmQmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvSXNzdWVyUmVjb3JkPXByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKFxuemNmQmFnZ2FnZSxcbidicmFuZFRvSXNzdWVyUmVjb3JkJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyVG9Jc3N1ZXJSZWNvcmQ9cHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoXG56Y2ZCYWdnYWdlLFxuJ2lzc3VlclRvSXNzdWVyUmVjb3JkJyk7XG5cblxubGV0IGluc3RhbnRpYXRlZD16Y2ZCYWdnYWdlLmhhcyhTVE9SQUdFX0lOU1RBTlRJQVRFRF9LRVkpO1xuY29uc3QgYXNzZXJ0SW5zdGFudGlhdGVkPSgpPT57XG5pbnN0YW50aWF0ZWR8fEZhaWwgYGlzc3VlclN0b3JhZ2UgaGFzIG5vdCBiZWVuIGluc3RhbnRpYXRlZGA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3RvcmVJc3N1ZXJSZWNvcmQ9KGlzc3VlclJlY29yZCk9PntcbmFzc2VydEluc3RhbnRpYXRlZCgpO1xuY29uc3R7YnJhbmQsaXNzdWVyfT1pc3N1ZXJSZWNvcmQ7XG5pZihpc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMoaXNzdWVyKSl7XG5yZXR1cm4gaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0KGlzc3Vlcik7XG4gfVxuXG5icmFuZFRvSXNzdWVyUmVjb3JkLmluaXQoYnJhbmQsaXNzdWVyUmVjb3JkKTtcbmlzc3VlclRvSXNzdWVyUmVjb3JkLmluaXQoaXNzdWVyLGlzc3VlclJlY29yZCk7XG5yZXR1cm4gaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0KGlzc3Vlcik7XG4gfTtcblxuY29uc3QgZ2V0QnlCcmFuZD0oYnJhbmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbnJldHVybiBicmFuZFRvSXNzdWVyUmVjb3JkLmdldChicmFuZCk7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3RvcmVJc3N1ZXI9YXN5bmMoaXNzdWVyUCk9PntcbmFzc2VydEluc3RhbnRpYXRlZCgpO1xuY29uc3QgYnJhbmRQPUUoaXNzdWVyUCkuZ2V0QnJhbmQoKTtcbmNvbnN0IGJyYW5kSXNzdWVyTWF0Y2hQPUUoYnJhbmRQKS5pc015SXNzdWVyKGlzc3VlclApO1xuY29uc3QgZGlzcGxheUluZm9QPUUoYnJhbmRQKS5nZXREaXNwbGF5SW5mbygpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3RbaXNzdWVyLGJyYW5kLGJyYW5kSXNzdWVyTWF0Y2gsZGlzcGxheUluZm9dPWF3YWl0IFByb21pc2UuYWxsKFtcbmlzc3VlclAsXG5icmFuZFAsXG5icmFuZElzc3Vlck1hdGNoUCxcbmRpc3BsYXlJbmZvUF0pO1xuXG4vL1xuXG5pZihpc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMoaXNzdWVyKSl7XG5yZXR1cm4gaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0KGlzc3Vlcik7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyYW5kSXNzdWVyTWF0Y2h8fEZhaWwgYGlzc3VlciB3YXMgdXNpbmcgYSBicmFuZCB3aGljaCB3YXMgbm90IGl0cyBvd25gO1xuY29uc3QgaXNzdWVyUmVjb3JkPW1ha2VJc3N1ZXJSZWNvcmQoYnJhbmQsaXNzdWVyLGRpc3BsYXlJbmZvKTtcbnN0b3JlSXNzdWVyUmVjb3JkKGlzc3VlclJlY29yZCk7XG5yZXR1cm4gZ2V0QnlCcmFuZChicmFuZCk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0QXNzZXRLaW5kQnlCcmFuZD0oYnJhbmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbnJldHVybiBnZXRCeUJyYW5kKGJyYW5kKS5hc3NldEtpbmQ7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHN0b3JlSXNzdWVyS2V5d29yZFJlY29yZD1hc3luYyh1bmNsZWFuSXNzdWVyS2V5d29yZFJlY29yZCk9PntcbmFzc2VydEluc3RhbnRpYXRlZCgpO1xuY2xlYW5LZXl3b3Jkcyh1bmNsZWFuSXNzdWVyS2V5d29yZFJlY29yZCk7XG5jb25zdCBpc3N1ZXJSZWNvcmRQcz1vYmplY3RNYXAodW5jbGVhbklzc3VlcktleXdvcmRSZWNvcmQsKGlzc3VlclApPT5cbnN0b3JlSXNzdWVyKGlzc3VlclApKTtcblxuY29uc3QgaXNzdWVyUmVjb3Jkcz1hd2FpdCBkZWVwbHlGdWxmaWxsZWRPYmplY3QoaXNzdWVyUmVjb3JkUHMpO1xuY29uc3QgaXNzdWVycz1vYmplY3RNYXAoaXNzdWVyUmVjb3Jkcywoe2lzc3Vlcn0pPT5pc3N1ZXIpO1xuY29uc3QgYnJhbmRzPW9iamVjdE1hcChpc3N1ZXJSZWNvcmRzLCh7YnJhbmR9KT0+YnJhbmQpO1xucmV0dXJuIGhhcmRlbih7aXNzdWVycyxicmFuZHN9KTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGdldEJyYW5kRm9ySXNzdWVyPShpc3N1ZXIpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0KGlzc3VlcikuYnJhbmQ7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBnZXRJc3N1ZXJGb3JCcmFuZD0oYnJhbmQpPT57XG5hc3NlcnRJbnN0YW50aWF0ZWQoKTtcbi8vXG5yZXR1cm4gYnJhbmRUb0lzc3VlclJlY29yZC5nZXQoYnJhbmQpLmlzc3VlcjtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRJc3N1ZXJSZWNvcmRzPShpc3N1ZXJzKT0+e1xuYXNzZXJ0SW5zdGFudGlhdGVkKCk7XG5yZXR1cm4gaXNzdWVycy5tYXAoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0KTtcbiB9O1xuXG5jb25zdCBpbnN0YW50aWF0ZT0oaXNzdWVyUmVjb3Jkcz1bXSk9PntcbmlmKCF6Y2ZCYWdnYWdlLmhhcyhTVE9SQUdFX0lOU1RBTlRJQVRFRF9LRVkpKXtcbnpjZkJhZ2dhZ2UuaW5pdChTVE9SQUdFX0lOU1RBTlRJQVRFRF9LRVksdHJ1ZSk7XG5pbnN0YW50aWF0ZWQ9dHJ1ZTtcbmZvcihjb25zdCByZWNvcmQgb2YgaXNzdWVyUmVjb3Jkcyl7XG5zdG9yZUlzc3VlclJlY29yZChyZWNvcmQpO1xuIH1cbiB9XG4gfTtcblxucmV0dXJue1xuc3RvcmVJc3N1ZXJLZXl3b3JkUmVjb3JkLFxuc3RvcmVJc3N1ZXIsXG5zdG9yZUlzc3VlclJlY29yZCxcbmdldEFzc2V0S2luZEJ5QnJhbmQsXG5nZXRCcmFuZEZvcklzc3VlcixcbmdldElzc3VlckZvckJyYW5kLFxuZ2V0SXNzdWVyUmVjb3Jkcyxcbmluc3RhbnRpYXRlfTtcblxuIH07JGjNj19vbmNlLnByb3ZpZGVJc3N1ZXJTdG9yYWdlKHByb3ZpZGVJc3N1ZXJTdG9yYWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByb3ZpZGVJc3N1ZXJTdG9yYWdlIjpbInByb3ZpZGVJc3N1ZXJTdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADODslVRBgAAUQYAACUAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9tYWtlSGFuZGxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRHVyYWJsZUhhbmRsZSIsIm1ha2VIYW5kbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxpbml0RW1wdHksbWFrZUV4byxwcmVwYXJlRXhvQ2xhc3MsSGFuZGxlSTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXSxbXCJtYWtlRXhvXCIsIFskaM2PX2EgPT4gKG1ha2VFeG8gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJIYW5kbGVJXCIsIFskaM2PX2EgPT4gKEhhbmRsZUkgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRHVyYWJsZUhhbmRsZT0oYmFnZ2FnZSxoYW5kbGVUeXBlKT0+e1xudHlwZW9mIGhhbmRsZVR5cGU9PT0nc3RyaW5nJ3x8RmFpbCBgaGFuZGxlVHlwZSBtdXN0IGJlIGEgc3RyaW5nYDtcbmNvbnN0IG1ha2VIYW5kbGU9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbiBgJHtoYW5kbGVUeXBlfUhhbmRsZWAsXG5IYW5kbGVJLFxuaW5pdEVtcHR5LFxue30pO1xuXG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9tYWtlSGFuZGxlKTtcbiB9OyRozY9fb25jZS5kZWZpbmVEdXJhYmxlSGFuZGxlKGRlZmluZUR1cmFibGVIYW5kbGUpO1xuaGFyZGVuKGRlZmluZUR1cmFibGVIYW5kbGUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIYW5kbGU9KGhhbmRsZVR5cGUpPT57XG50eXBlb2YgaGFuZGxlVHlwZT09PSdzdHJpbmcnfHxGYWlsIGBoYW5kbGVUeXBlIG11c3QgYmUgYSBzdHJpbmdgO1xuLy9cbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL21ha2VFeG8oYCR7aGFuZGxlVHlwZX1IYW5kbGVgLEhhbmRsZUkse30pKTtcbiB9OyRozY9fb25jZS5tYWtlSGFuZGxlKG1ha2VIYW5kbGUpO1xuaGFyZGVuKG1ha2VIYW5kbGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmaW5lRHVyYWJsZUhhbmRsZSI6WyJkZWZpbmVEdXJhYmxlSGFuZGxlIl0sIm1ha2VIYW5kbGUiOlsibWFrZUhhbmRsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACLew/ZekMAAHpDAAAlAAAAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2VydHAiLCJAYWdvcmljL25vdGlmaWVyIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdGltZSJdLCJleHBvcnRzIjpbIkFkbWluRmFjZXRJIiwiQW1vdW50S2V5d29yZFJlY29yZFNoYXBlIiwiQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSIsIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlIiwiQnVuZGxlQ2FwU2hhcGUiLCJCdW5kbGVTaGFwZSIsIkVtcHR5UHJvcG9zYWxTaGFwZSIsIkV4aXRPYmplY3RJIiwiRXhpdE9iamVjdFNoYXBlIiwiRmVlTWludEFjY2Vzc1NoYXBlIiwiRnVsbFByb3Bvc2FsU2hhcGUiLCJIYW5kbGVJIiwiSGFuZGxlT2ZmZXJJIiwiSW5zdGFsbGF0aW9uU2hhcGUiLCJJbnN0YW5jZUFkbWluSSIsIkluc3RhbmNlQWRtaW5TaGFwZSIsIkluc3RhbmNlSGFuZGxlU2hhcGUiLCJJbnN0YW5jZVJlY29yZFNoYXBlIiwiSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQiLCJJbnZpdGF0aW9uRWxlbWVudFNoYXBlIiwiSW52aXRhdGlvbkhhbmRsZVNoYXBlIiwiSW52aXRhdGlvblNoYXBlIiwiSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlIiwiSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSIsIklzc3VlclJlY29yZFNoYXBlIiwiS2V5d29yZFNoYXBlIiwiT2ZmZXJIYW5kbGVySSIsIlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlIiwiUHJpY2VRdW90ZVNoYXBlIiwiUHJvcG9zYWxTaGFwZSIsIlNlYXREYXRhU2hhcGUiLCJTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSIsIlNlYXRTaGFwZSIsIlRlcm1zU2hhcGUiLCJUaW1lclNoYXBlIiwiVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUiLCJab2VNaW50SSIsIlpvZU1pbnRTaGFwZSIsIlpvZVNlcnZpY2VJIiwiWm9lU3RvcmFnZU1hbmFnZXJJS2l0IiwiaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUiLCJpc09uRGVtYW5kRXhpdFJ1bGUiLCJpc1dhaXZlZEV4aXRSdWxlIiwibWFrZUhhbmRsZVNoYXBlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEFtb3VudFNoYXBlLEFzc2V0S2luZFNoYXBlLEJyYW5kU2hhcGUsRGlzcGxheUluZm9TaGFwZSxJc3N1ZXJLaXRTaGFwZSxJc3N1ZXJTaGFwZSxQYXltZW50U2hhcGUsU3Vic2NyaWJlclNoYXBlLE0sVGltZXN0YW1wU2hhcGU7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudFNoYXBlXCIsIFskaM2PX2EgPT4gKEFtb3VudFNoYXBlID0gJGjNj19hKV1dLFtcIkFzc2V0S2luZFNoYXBlXCIsIFskaM2PX2EgPT4gKEFzc2V0S2luZFNoYXBlID0gJGjNj19hKV1dLFtcIkJyYW5kU2hhcGVcIiwgWyRozY9fYSA9PiAoQnJhbmRTaGFwZSA9ICRozY9fYSldXSxbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaM2PX2EgPT4gKERpc3BsYXlJbmZvU2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyS2l0U2hhcGVcIiwgWyRozY9fYSA9PiAoSXNzdWVyS2l0U2hhcGUgPSAkaM2PX2EpXV0sW1wiSXNzdWVyU2hhcGVcIiwgWyRozY9fYSA9PiAoSXNzdWVyU2hhcGUgPSAkaM2PX2EpXV0sW1wiUGF5bWVudFNoYXBlXCIsIFskaM2PX2EgPT4gKFBheW1lbnRTaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIlN1YnNjcmliZXJTaGFwZVwiLCBbJGjNj19hID0+IChTdWJzY3JpYmVyU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3RpbWVcIiwgW1tcIlRpbWVzdGFtcFNoYXBlXCIsIFskaM2PX2EgPT4gKFRpbWVzdGFtcFNoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbmNvbnN0ICAgICAgICBLZXl3b3JkU2hhcGU9TS5zdHJpbmcoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLktleXdvcmRTaGFwZShLZXl3b3JkU2hhcGUpO1xuY29uc3QgICAgICAgIEludml0YXRpb25IYW5kbGVTaGFwZT1NLnJlbW90YWJsZSgnSW52aXRhdGlvbkhhbmRsZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkludml0YXRpb25IYW5kbGVTaGFwZShJbnZpdGF0aW9uSGFuZGxlU2hhcGUpO1xuY29uc3QgICAgICAgIEludml0YXRpb25TaGFwZT1NLnJlbW90YWJsZSgnSW52aXRhdGlvbicpOyRozY9fb25jZS5JbnZpdGF0aW9uU2hhcGUoSW52aXRhdGlvblNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnN0YW5jZUhhbmRsZVNoYXBlPU0ucmVtb3RhYmxlKCdJbnN0YW5jZUhhbmRsZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuSW5zdGFuY2VIYW5kbGVTaGFwZShJbnN0YW5jZUhhbmRsZVNoYXBlKTtcbmNvbnN0ICAgICAgICBJbnN0YWxsYXRpb25TaGFwZT1NLnJlbW90YWJsZSgnSW5zdGFsbGF0aW9uJyk7JGjNj19vbmNlLkluc3RhbGxhdGlvblNoYXBlKEluc3RhbGxhdGlvblNoYXBlKTtcbmNvbnN0ICAgICAgICBTZWF0U2hhcGU9TS5yZW1vdGFibGUoJ1NlYXQnKTskaM2PX29uY2UuU2VhdFNoYXBlKFNlYXRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihLZXl3b3JkU2hhcGUsQW1vdW50U2hhcGUpOyRozY9fb25jZS5BbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUoQW1vdW50S2V5d29yZFJlY29yZFNoYXBlKTtcbmNvbnN0ICAgICAgICBBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoXG5LZXl3b3JkU2hhcGUsXG5NLnBhdHRlcm4oKSk7JGjNj19vbmNlLkFtb3VudFBhdHRlcm5LZXl3b3JkUmVjb3JkU2hhcGUoQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZT1NLnJlY29yZE9mKFxuS2V5d29yZFNoYXBlLFxuTS5lcmVmKFBheW1lbnRTaGFwZSkpOyRozY9fb25jZS5QYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZShQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGU9TS5yZWNvcmRPZihLZXl3b3JkU2hhcGUsSXNzdWVyU2hhcGUpOyRozY9fb25jZS5Jc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUoSXNzdWVyS2V5d29yZFJlY29yZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoXG5LZXl3b3JkU2hhcGUsXG5NLmVyZWYoSXNzdWVyU2hhcGUpKTskaM2PX29uY2UuSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZShJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlKTtcblxuY29uc3QgICAgICAgIEJyYW5kS2V5d29yZFJlY29yZFNoYXBlPU0ucmVjb3JkT2YoS2V5d29yZFNoYXBlLEJyYW5kU2hhcGUpOyRozY9fb25jZS5CcmFuZEtleXdvcmRSZWNvcmRTaGFwZShCcmFuZEtleXdvcmRSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBJc3N1ZXJSZWNvcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuYnJhbmQ6QnJhbmRTaGFwZSxcbmlzc3VlcjpJc3N1ZXJTaGFwZSxcbmFzc2V0S2luZDpBc3NldEtpbmRTaGFwZX0sXG5cbntkaXNwbGF5SW5mbzpEaXNwbGF5SW5mb1NoYXBlfSk7JGjNj19vbmNlLklzc3VlclJlY29yZFNoYXBlKElzc3VlclJlY29yZFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgVGVybXNTaGFwZT17XG5pc3N1ZXJzOklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSxcbmJyYW5kczpCcmFuZEtleXdvcmRSZWNvcmRTaGFwZX07JGjNj19vbmNlLlRlcm1zU2hhcGUoVGVybXNTaGFwZSk7XG5cbmhhcmRlbihUZXJtc1NoYXBlKTtcblxuY29uc3QgICAgICAgIEluc3RhbmNlUmVjb3JkU2hhcGU9e1xuaW5zdGFsbGF0aW9uOkluc3RhbGxhdGlvblNoYXBlLFxuaW5zdGFuY2U6SW5zdGFuY2VIYW5kbGVTaGFwZSxcbnRlcm1zOk0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSl9OyRozY9fb25jZS5JbnN0YW5jZVJlY29yZFNoYXBlKEluc3RhbmNlUmVjb3JkU2hhcGUpO1xuXG5oYXJkZW4oSW5zdGFuY2VSZWNvcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBIYW5kbGVJPU0uaW50ZXJmYWNlKCdIYW5kbGUnLHt9KTskaM2PX29uY2UuSGFuZGxlSShIYW5kbGVJKTtcblxuY29uc3QgICAgICAgIG1ha2VIYW5kbGVTaGFwZT0obmFtZSk9Pk0ucmVtb3RhYmxlKCBgJHtuYW1lfUhhbmRsZWApOyRozY9fb25jZS5tYWtlSGFuZGxlU2hhcGUobWFrZUhhbmRsZVNoYXBlKTtcbmNvbnN0ICAgICAgICBUaW1lclNoYXBlPW1ha2VIYW5kbGVTaGFwZSgndGltZXInKTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5UaW1lclNoYXBlKFRpbWVyU2hhcGUpO1xuY29uc3QgICAgICAgIEZ1bGxQcm9wb3NhbFNoYXBlPXtcbndhbnQ6QW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSxcbmdpdmU6QW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuZXhpdDpNLnNwbGl0UmVjb3JkKFxue30sXG57XG5vbkRlbWFuZDpudWxsLFxud2FpdmVkOm51bGwsXG5hZnRlckRlYWRsaW5lOntcbnRpbWVyOk0uZXJlZihUaW1lclNoYXBlKSxcbmRlYWRsaW5lOlRpbWVzdGFtcFNoYXBlfX0sXG5cblxue30pfTskaM2PX29uY2UuRnVsbFByb3Bvc2FsU2hhcGUoRnVsbFByb3Bvc2FsU2hhcGUpO1xuXG5cbmhhcmRlbihGdWxsUHJvcG9zYWxTaGFwZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIFByb3Bvc2FsU2hhcGU9TS5zcGxpdFJlY29yZCh7fSxGdWxsUHJvcG9zYWxTaGFwZSx7fSk7JGjNj19vbmNlLlByb3Bvc2FsU2hhcGUoUHJvcG9zYWxTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBFbXB0eVByb3Bvc2FsU2hhcGU9TS5zcGxpdFJlY29yZCh7XG5naXZlOnt9LFxud2FudDp7fSxcbmV4aXQ6e29uRGVtYW5kOm51bGx9fSk7JGjNj19vbmNlLkVtcHR5UHJvcG9zYWxTaGFwZShFbXB0eVByb3Bvc2FsU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBpc09uRGVtYW5kRXhpdFJ1bGU9KGV4aXQpPT57XG5jb25zdFtleGl0S2V5XT1PYmplY3Qua2V5cyhleGl0KTtcbnJldHVybiBleGl0S2V5PT09J29uRGVtYW5kJztcbiB9OyRozY9fb25jZS5pc09uRGVtYW5kRXhpdFJ1bGUoaXNPbkRlbWFuZEV4aXRSdWxlKTtcbmhhcmRlbihpc09uRGVtYW5kRXhpdFJ1bGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2FpdmVkRXhpdFJ1bGU9KGV4aXQpPT57XG5jb25zdFtleGl0S2V5XT1PYmplY3Qua2V5cyhleGl0KTtcbnJldHVybiBleGl0S2V5PT09J3dhaXZlZCc7XG4gfTskaM2PX29uY2UuaXNXYWl2ZWRFeGl0UnVsZShpc1dhaXZlZEV4aXRSdWxlKTtcbmhhcmRlbihpc1dhaXZlZEV4aXRSdWxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0FmdGVyRGVhZGxpbmVFeGl0UnVsZT0oZXhpdCk9PntcbmNvbnN0W2V4aXRLZXldPU9iamVjdC5rZXlzKGV4aXQpO1xucmV0dXJuIGV4aXRLZXk9PT0nYWZ0ZXJEZWFkbGluZSc7XG4gfTskaM2PX29uY2UuaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUoaXNBZnRlckRlYWRsaW5lRXhpdFJ1bGUpO1xuaGFyZGVuKGlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlKTtcblxuY29uc3QgICAgICAgIEludml0YXRpb25FbGVtZW50U2hhcGU9TS5zcGxpdFJlY29yZCh7XG5kZXNjcmlwdGlvbjpNLnN0cmluZygpLFxuaGFuZGxlOkludml0YXRpb25IYW5kbGVTaGFwZSxcbmluc3RhbmNlOkluc3RhbmNlSGFuZGxlU2hhcGUsXG5pbnN0YWxsYXRpb246SW5zdGFsbGF0aW9uU2hhcGV9KTskaM2PX29uY2UuSW52aXRhdGlvbkVsZW1lbnRTaGFwZShJbnZpdGF0aW9uRWxlbWVudFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgT2ZmZXJIYW5kbGVyST1NLmludGVyZmFjZSgnT2ZmZXJIYW5kbGVyJyx7XG5oYW5kbGU6TS5jYWxsKFNlYXRTaGFwZSkub3B0aW9uYWwoTS5hbnkoKSkucmV0dXJucyhNLmFueSgpKX0pOyRozY9fb25jZS5PZmZlckhhbmRsZXJJKE9mZmVySGFuZGxlckkpO1xuXG5cbmNvbnN0ICAgICAgICBTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZT1NLmFycmF5T2Yoe1xuc2VhdEhhbmRsZTpTZWF0U2hhcGUsXG5hbGxvY2F0aW9uOkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZX0pOyRozY9fb25jZS5TZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZShTZWF0SGFuZGxlQWxsb2NhdGlvbnNTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIFpvZU1pbnRTaGFwZT1NLnJlbW90YWJsZSgnWm9lTWludCcpOyRozY9fb25jZS5ab2VNaW50U2hhcGUoWm9lTWludFNoYXBlKTtcbmNvbnN0ICAgICAgICBab2VNaW50ST1NLmludGVyZmFjZSgnWm9lTWludCcse1xuZ2V0SXNzdWVyUmVjb3JkOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyUmVjb3JkU2hhcGUpLFxubWludEFuZEVzY3JvdzpNLmNhbGwoQW1vdW50U2hhcGUpLnJldHVybnMoKSxcbndpdGhkcmF3QW5kQnVybjpNLmNhbGwoQW1vdW50U2hhcGUpLnJldHVybnMoKX0pOyRozY9fb25jZS5ab2VNaW50SShab2VNaW50SSk7XG5cblxuY29uc3QgICAgICAgIEZlZU1pbnRBY2Nlc3NTaGFwZT1NLnJlbW90YWJsZSgnRmVlTWludEFjY2VzcycpOyRozY9fb25jZS5GZWVNaW50QWNjZXNzU2hhcGUoRmVlTWludEFjY2Vzc1NoYXBlKTtcblxuY29uc3QgICAgICAgIEV4aXRPYmplY3RJPU0uaW50ZXJmYWNlKCdFeGl0IE9iamVjdCcse1xuZXhpdDpNLmNhbGwoKS5yZXR1cm5zKCl9KTskaM2PX29uY2UuRXhpdE9iamVjdEkoRXhpdE9iamVjdEkpO1xuXG5cbmNvbnN0ICAgICAgICBFeGl0T2JqZWN0U2hhcGU9TS5yZW1vdGFibGUoJ0V4aXRPYmonKTskaM2PX29uY2UuRXhpdE9iamVjdFNoYXBlKEV4aXRPYmplY3RTaGFwZSk7XG5jb25zdCAgICAgICAgSW5zdGFuY2VBZG1pblNoYXBlPU0ucmVtb3RhYmxlKCdJbnN0YW5jZUFkbWluJyk7JGjNj19vbmNlLkluc3RhbmNlQWRtaW5TaGFwZShJbnN0YW5jZUFkbWluU2hhcGUpO1xuY29uc3QgICAgICAgIEluc3RhbmNlQWRtaW5JPU0uaW50ZXJmYWNlKCdJbnN0YW5jZUFkbWluJyx7XG5tYWtlSW52aXRhdGlvbjpNLmNhbGwoSW52aXRhdGlvbkhhbmRsZVNoYXBlLE0uc3RyaW5nKCkpLlxub3B0aW9uYWwoTS5yZWNvcmQoKSxNLnBhdHRlcm4oKSkuXG5yZXR1cm5zKEludml0YXRpb25TaGFwZSksXG5zYXZlSXNzdWVyOk0uY2FsbFdoZW4oTS5hd2FpdChJc3N1ZXJTaGFwZSksS2V5d29yZFNoYXBlKS5yZXR1cm5zKFxuSXNzdWVyUmVjb3JkU2hhcGUpLFxuXG5tYWtlTm9Fc2Nyb3dTZWF0Ok0uY2FsbChcbkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSxcblByb3Bvc2FsU2hhcGUsXG5FeGl0T2JqZWN0U2hhcGUsXG5TZWF0U2hhcGUpLlxucmV0dXJucyhTZWF0U2hhcGUpLFxuZXhpdEFsbFNlYXRzOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsQWxsU2VhdHM6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmV4aXRTZWF0Ok0uY2FsbChTZWF0U2hhcGUsTS5hbnkoKSkucmV0dXJucygpLFxuZmFpbFNlYXQ6TS5jYWxsKFNlYXRTaGFwZSxNLmFueSgpKS5yZXR1cm5zKCksXG5tYWtlWm9lTWludDpNLmNhbGwoS2V5d29yZFNoYXBlKS5cbm9wdGlvbmFsKFxuQXNzZXRLaW5kU2hhcGUsXG5EaXNwbGF5SW5mb1NoYXBlLFxuTS5zcGxpdFJlY29yZCh7fSx7ZWxlbWVudFNoYXBlOk0ucGF0dGVybigpfSkpLlxuXG5yZXR1cm5zKE0ucmVtb3RhYmxlKCd6b2VNaW50JykpLFxucmVnaXN0ZXJGZWVNaW50Ok0uY2FsbChLZXl3b3JkU2hhcGUsRmVlTWludEFjY2Vzc1NoYXBlKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ2ZlZU1pbnQnKSksXG5cbnJlcGxhY2VBbGxvY2F0aW9uczpNLmNhbGwoU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUpLnJldHVybnMoKSxcbnN0b3BBY2NlcHRpbmdPZmZlcnM6TS5jYWxsKCkucmV0dXJucygpLFxuc2V0T2ZmZXJGaWx0ZXI6TS5jYWxsKE0uYXJyYXlPZihNLnN0cmluZygpKSkucmV0dXJucygpLFxuZ2V0T2ZmZXJGaWx0ZXI6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5T2YoTS5zdHJpbmcoKSkpLFxuZ2V0RXhpdFN1YnNjcmliZXI6TS5jYWxsKFNlYXRTaGFwZSkucmV0dXJucyhTdWJzY3JpYmVyU2hhcGUpLFxuaXNCbG9ja2VkOk0uY2FsbChNLnN0cmluZygpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbnJlcGFpckNvbnRyYWN0Q29tcGxldGlvbldhdGNoZXI6TS5jYWxsKCkucmV0dXJucygpfSk7JGjNj19vbmNlLkluc3RhbmNlQWRtaW5JKEluc3RhbmNlQWRtaW5JKTtcblxuXG5jb25zdCAgICAgICAgSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQ9e1xuaW5zdGFuY2VTdG9yYWdlTWFuYWdlcjpNLmludGVyZmFjZSgnSW5zdGFuY2VTdG9yYWdlTWFuYWdlcicse1xuZ2V0VGVybXM6TS5jYWxsKCkucmV0dXJucyhNLnNwbGl0UmVjb3JkKFRlcm1zU2hhcGUpKSxcbmdldElzc3VlcnM6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0QnJhbmRzOk0uY2FsbCgpLnJldHVybnMoQnJhbmRLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbCgpLnJldHVybnMoSW5zdGFsbGF0aW9uU2hhcGUpLFxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcblxuc2F2ZUlzc3VlcjpNLmNhbGwoSXNzdWVyU2hhcGUsS2V5d29yZFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbm1ha2Vab2VNaW50Ok0uY2FsbChLZXl3b3JkU2hhcGUpLlxub3B0aW9uYWwoXG5Bc3NldEtpbmRTaGFwZSxcbkRpc3BsYXlJbmZvU2hhcGUsXG5NLnNwbGl0UmVjb3JkKHt9LHtlbGVtZW50U2hhcGU6TS5wYXR0ZXJuKCl9KSkuXG5cbnJldHVybnMoTS5lcmVmKFpvZU1pbnRTaGFwZSkpLFxucmVnaXN0ZXJGZWVNaW50Ok0uY2FsbChLZXl3b3JkU2hhcGUsRmVlTWludEFjY2Vzc1NoYXBlKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ2ZlZU1pbnQnKSksXG5cbmdldEluc3RhbmNlUmVjb3JkOk0uY2FsbCgpLnJldHVybnMoSW5zdGFuY2VSZWNvcmRTaGFwZSksXG5nZXRJc3N1ZXJSZWNvcmRzOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheU9mKElzc3VlclJlY29yZFNoYXBlKSksXG5nZXRXaXRoZHJhd0ZhY2V0Ok0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoJ1dpdGhkcmF3RmFjZXQnKSksXG5pbml0SW5zdGFuY2VBZG1pbjpNLmNhbGwoXG5JbnN0YW5jZUhhbmRsZVNoYXBlLFxuTS5yZW1vdGFibGUoJ2luc3RhbmNlQWRtaW4nKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmRlbGV0ZUluc3RhbmNlQWRtaW46TS5jYWxsKEluc3RhbmNlQWRtaW5TaGFwZSkucmV0dXJucygpLFxubWFrZUludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSxNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0ucmVjb3JkKCksTS5wYXR0ZXJuKCkpLlxucmV0dXJucyhQYXltZW50U2hhcGUpLFxuZ2V0Um9vdDpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLFxuZ2V0QWRtaW5Ob2RlOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoJ2FkbWluTm9kZScpKX0pLFxuXG53aXRoZHJhd0ZhY2V0Ok0uaW50ZXJmYWNlKCdXaXRoZHJhd0ZhY2V0Jyx7XG53aXRoZHJhd1BheW1lbnRzOk0uY2FsbChBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUpLnJldHVybnMoXG5QYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSl9KSxcblxuXG5oZWxwZXJzOk0uaW50ZXJmYWNlKCdJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VyIGhlbHBlcicse1xud3JhcElzc3VlcktpdFdpdGhab2VNaW50Ok0uY2FsbChcbktleXdvcmRTaGFwZSxcbklzc3VlcktpdFNoYXBlLFxuTS5yZW1vdGFibGUoJ2FkbWluTm9kZScpKS5cbnJldHVybnMoWm9lTWludFNoYXBlKX0pfTskaM2PX29uY2UuSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQoSW5zdGFuY2VTdG9yYWdlTWFuYWdlcklLaXQpO1xuXG5cbmhhcmRlbihJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCk7XG5cbmNvbnN0ICAgICAgICBCdW5kbGVDYXBTaGFwZT1NLnJlbW90YWJsZSgnYnVuZGxlQ2FwJyk7JGjNj19vbmNlLkJ1bmRsZUNhcFNoYXBlKEJ1bmRsZUNhcFNoYXBlKTtcbmNvbnN0ICAgICAgICBCdW5kbGVTaGFwZT1NLmFuZChcbk0uc3BsaXRSZWNvcmQoe21vZHVsZUZvcm1hdDpNLmFueSgpfSksXG5NLnJlY29yZE9mKE0uc3RyaW5nKCksTS5zdHJpbmcoe3N0cmluZ0xlbmd0aExpbWl0OkluZmluaXR5fSkpKTskaM2PX29uY2UuQnVuZGxlU2hhcGUoQnVuZGxlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZT1NLnNwbGl0UmVjb3JkKFxue2luc3RhbGxhdGlvbjpJbnN0YWxsYXRpb25TaGFwZX0sXG57XG5idW5kbGU6TS5yZWNvcmRPZihNLnN0cmluZygpLE0uc3RyaW5nKHtzdHJpbmdMZW5ndGhMaW1pdDpJbmZpbml0eX0pKSxcbmJ1bmRsZUNhcDpCdW5kbGVDYXBTaGFwZSxcbmJ1bmRsZUlEOk0uc3RyaW5nKCl9LFxuXG57fSk7JGjNj19vbmNlLlVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlKFVud3JhcHBlZEluc3RhbGxhdGlvblNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgWm9lU3RvcmFnZU1hbmFnZXJJS2l0PXtcbnpvZVNlcnZpY2VEYXRhQWNjZXNzOk0uaW50ZXJmYWNlKCdab2VTZXJ2aWNlIGRhdGFBY2Nlc3MnLHtcbmdldFRlcm1zOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKE0uc3BsaXRSZWNvcmQoVGVybXNTaGFwZSkpLFxuZ2V0SXNzdWVyczpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpLFxuZ2V0QnJhbmRzOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKEJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcbmdldEluc3RhbGxhdGlvbjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnJlbW90YWJsZSgnSW5zdGFsbGF0aW9uJykpKSxcblxuZ2V0SW52aXRhdGlvbklzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcblxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uOk0uY2FsbChJbnN0YWxsYXRpb25TaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnN0cmluZygpKSksXG5cbmluc3RhbGxCdW5kbGU6TS5jYWxsKE0ub3IoSW5zdGFuY2VIYW5kbGVTaGFwZSxCdW5kbGVTaGFwZSkpLlxub3B0aW9uYWwoTS5zdHJpbmcoKSkuXG5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmluc3RhbGxCdW5kbGVJRDpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnN0cmluZygpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuXG5nZXRQdWJsaWNGYWNldDpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnJlbW90YWJsZSgnUHVibGljRmFjZXQnKSkpLFxuXG5nZXRPZmZlckZpbHRlcjpNLmNhbGwoSW5zdGFuY2VIYW5kbGVTaGFwZSkucmV0dXJucyhNLmFycmF5T2YoTS5zdHJpbmcoKSkpLFxuZ2V0UHJvcG9zYWxTaGFwZUZvckludml0YXRpb246TS5jYWxsKEludml0YXRpb25IYW5kbGVTaGFwZSkucmV0dXJucyhcbk0ub3B0KE0ucGF0dGVybigpKSl9KSxcblxuXG5tYWtlT2ZmZXJBY2Nlc3M6TS5pbnRlcmZhY2UoJ1pvZVN0b3JhZ2UgbWFrZU9mZmVyIGFjY2Vzcycse1xuZ2V0QXNzZXRLaW5kQnlCcmFuZDpNLmNhbGwoQnJhbmRTaGFwZSkucmV0dXJucyhBc3NldEtpbmRTaGFwZSksXG5nZXRJbnN0YW5jZUFkbWluOk0uY2FsbChJbnN0YW5jZUhhbmRsZVNoYXBlKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ2luc3RhbmNlQWRtaW4nKSksXG5cbmdldFByb3Bvc2FsU2hhcGVGb3JJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLm9wdChNLnBhdHRlcm4oKSkpLFxuXG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxuZGVwb3NpdFBheW1lbnRzOk0uY2FsbChQcm9wb3NhbFNoYXBlLFBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlKS5yZXR1cm5zKFxuTS5wcm9taXNlKCkpfSksXG5cblxuc3RhcnRJbnN0YW5jZUFjY2VzczpNLmludGVyZmFjZSgnWm9lU3RvcmFnZSBzdGFydEluc3RhbmNlIGFjY2Vzcycse1xubWFrZVpvZUluc3RhbmNlU3RvcmFnZU1hbmFnZXI6TS5jYWxsKFxuSW5zdGFsbGF0aW9uU2hhcGUsXG5NLmFueSgpLFxuSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSxcbk0ub3IoSW5zdGFuY2VIYW5kbGVTaGFwZSxCdW5kbGVTaGFwZSksXG5NLm9yKEJ1bmRsZUNhcFNoYXBlLEJ1bmRsZVNoYXBlKSxcbk0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG51bndyYXBJbnN0YWxsYXRpb246TS5jYWxsV2hlbihNLmVyZWYoSW5zdGFsbGF0aW9uU2hhcGUpKS5yZXR1cm5zKFxuVW53cmFwcGVkSW5zdGFsbGF0aW9uU2hhcGUpfSksXG5cblxuaW52aXRhdGlvbklzc3VlckFjY2VzczpNLmludGVyZmFjZSgnWm9lU3RvcmFnZSBpbnZpdGF0aW9uSXNzdWVyJyx7XG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpfSl9OyRozY9fb25jZS5ab2VTdG9yYWdlTWFuYWdlcklLaXQoWm9lU3RvcmFnZU1hbmFnZXJJS2l0KTtcblxuXG5oYXJkZW4oWm9lU3RvcmFnZU1hbmFnZXJJS2l0KTtcblxuY29uc3QgICAgICAgIFpvZVNlcnZpY2VJPU0uaW50ZXJmYWNlKCdab2VTZXJ2aWNlJyx7XG5pbnN0YWxsOk0uY2FsbChNLmFueSgpKS5vcHRpb25hbChNLnN0cmluZygpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmluc3RhbGxCdW5kbGVJRDpNLmNhbGwoTS5zdHJpbmcoKSkub3B0aW9uYWwoTS5zdHJpbmcoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5zdGFydEluc3RhbmNlOk0uY2FsbChNLmVyZWYoSW5zdGFsbGF0aW9uU2hhcGUpKS5cbm9wdGlvbmFsKElzc3VlclBLZXl3b3JkUmVjb3JkU2hhcGUsTS5yZWNvcmQoKSxNLnJlY29yZCgpLE0uc3RyaW5nKCkpLlxucmV0dXJucyhNLnByb21pc2UoKSksXG5vZmZlcjpNLmNhbGwoTS5lcmVmKEludml0YXRpb25TaGFwZSkpLlxub3B0aW9uYWwoUHJvcG9zYWxTaGFwZSxQYXltZW50UEtleXdvcmRSZWNvcmRTaGFwZSxNLmFueSgpKS5cbnJldHVybnMoTS5wcm9taXNlKCkpLFxuXG5nZXRPZmZlckZpbHRlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5NLmFycmF5T2YoTS5zdHJpbmcoKSkpLFxuXG5nZXRJbnZpdGF0aW9uSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0RmVlSXNzdWVyOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0QnJhbmRzOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbkJyYW5kS2V5d29yZFJlY29yZFNoYXBlKSxcblxuZ2V0SXNzdWVyczpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5Jc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUpLFxuXG5nZXRQdWJsaWNGYWNldDpNLmNhbGxXaGVuKE0uYXdhaXQoSW5zdGFuY2VIYW5kbGVTaGFwZSkpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnUHVibGljRmFjZXQnKSksXG5cbmdldFRlcm1zOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhNLmFueSgpKSxcbmdldEluc3RhbGxhdGlvbkZvckluc3RhbmNlOk0uY2FsbFdoZW4oTS5hd2FpdChJbnN0YW5jZUhhbmRsZVNoYXBlKSkucmV0dXJucyhcbk0uZXJlZihNLnJlbW90YWJsZSgnSW5zdGFsbGF0aW9uJykpKSxcblxuZ2V0QnVuZGxlSURGcm9tSW5zdGFsbGF0aW9uOk0uY2FsbChJbnN0YWxsYXRpb25TaGFwZSkucmV0dXJucyhcbk0uZXJlZihNLnN0cmluZygpKSksXG5cblxuZ2V0SW5zdGFsbGF0aW9uOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRJbnN0YW5jZTpNLmNhbGwoTS5lcmVmKEludml0YXRpb25TaGFwZSkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0Q29uZmlndXJhdGlvbjpNLmNhbGwoKS5yZXR1cm5zKHtcbmZlZUlzc3VlckNvbmZpZzp7XG5uYW1lOk0uc3RyaW5nKCksXG5hc3NldEtpbmQ6J25hdCcsXG5kaXNwbGF5SW5mbzpEaXNwbGF5SW5mb1NoYXBlfX0pLFxuXG5cbmdldEludml0YXRpb25EZXRhaWxzOk0uY2FsbChNLmVyZWYoSW52aXRhdGlvblNoYXBlKSkucmV0dXJucyhNLmFueSgpKSxcbmdldFByb3Bvc2FsU2hhcGVGb3JJbnZpdGF0aW9uOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUpLnJldHVybnMoXG5NLm9wdChQcm9wb3NhbFNoYXBlKSl9KTskaM2PX29uY2UuWm9lU2VydmljZUkoWm9lU2VydmljZUkpO1xuXG5cblxuY29uc3QgICAgICAgIEFkbWluRmFjZXRJPU0uaW50ZXJmYWNlKCdaY2ZBZG1pbkZhY2V0Jyx7XG5nZXRWYXRTaHV0ZG93blByb21pc2U6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG5yZXN0YXJ0Q29udHJhY3Q6TS5jYWxsKCkub3B0aW9uYWwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG51cGdyYWRlQ29udHJhY3Q6TS5jYWxsKE0uc3RyaW5nKCkpLm9wdGlvbmFsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxudGVybWluYXRlQ29udHJhY3Q6TS5jYWxsKE0uZXJyb3IoKSkucmV0dXJucyhNLnByb21pc2UoKSl9KTskaM2PX29uY2UuQWRtaW5GYWNldEkoQWRtaW5GYWNldEkpO1xuXG5cbmNvbnN0ICAgICAgICBTZWF0RGF0YVNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5wcm9wb3NhbDpQcm9wb3NhbFNoYXBlLFxuaW5pdGlhbEFsbG9jYXRpb246QW1vdW50S2V5d29yZFJlY29yZFNoYXBlLFxuc2VhdEhhbmRsZTpTZWF0U2hhcGV9LFxuXG57XG5vZmZlckFyZ3M6TS5hbnkoKX0pOyRozY9fb25jZS5TZWF0RGF0YVNoYXBlKFNlYXREYXRhU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEhhbmRsZU9mZmVyST1NLmludGVyZmFjZSgnSGFuZGxlT2ZmZXInLHtcbmhhbmRsZU9mZmVyOk0uY2FsbChJbnZpdGF0aW9uSGFuZGxlU2hhcGUsU2VhdERhdGFTaGFwZSkucmV0dXJucyh7XG5vZmZlclJlc3VsdFByb21pc2U6TS5wcm9taXNlKCksXG5leGl0T2JqOkV4aXRPYmplY3RTaGFwZX0pfSk7JGjNj19vbmNlLkhhbmRsZU9mZmVySShIYW5kbGVPZmZlckkpO1xuXG5cblxuY29uc3QgICAgICAgIFByaWNlUXVvdGVTaGFwZT17XG5xdW90ZUFtb3VudDpBbW91bnRTaGFwZSxcbnF1b3RlUGF5bWVudDpNLmVyZWYoUGF5bWVudFNoYXBlKX07JGjNj19vbmNlLlByaWNlUXVvdGVTaGFwZShQcmljZVF1b3RlU2hhcGUpO1xuXG5oYXJkZW4oUHJpY2VRdW90ZVNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IktleXdvcmRTaGFwZSI6WyJLZXl3b3JkU2hhcGUiXSwiSW52aXRhdGlvbkhhbmRsZVNoYXBlIjpbIkludml0YXRpb25IYW5kbGVTaGFwZSJdLCJJbnZpdGF0aW9uU2hhcGUiOlsiSW52aXRhdGlvblNoYXBlIl0sIkluc3RhbmNlSGFuZGxlU2hhcGUiOlsiSW5zdGFuY2VIYW5kbGVTaGFwZSJdLCJJbnN0YWxsYXRpb25TaGFwZSI6WyJJbnN0YWxsYXRpb25TaGFwZSJdLCJTZWF0U2hhcGUiOlsiU2VhdFNoYXBlIl0sIkFtb3VudEtleXdvcmRSZWNvcmRTaGFwZSI6WyJBbW91bnRLZXl3b3JkUmVjb3JkU2hhcGUiXSwiQW1vdW50UGF0dGVybktleXdvcmRSZWNvcmRTaGFwZSI6WyJBbW91bnRQYXR0ZXJuS2V5d29yZFJlY29yZFNoYXBlIl0sIlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlIjpbIlBheW1lbnRQS2V5d29yZFJlY29yZFNoYXBlIl0sIklzc3VlcktleXdvcmRSZWNvcmRTaGFwZSI6WyJJc3N1ZXJLZXl3b3JkUmVjb3JkU2hhcGUiXSwiSXNzdWVyUEtleXdvcmRSZWNvcmRTaGFwZSI6WyJJc3N1ZXJQS2V5d29yZFJlY29yZFNoYXBlIl0sIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlIjpbIkJyYW5kS2V5d29yZFJlY29yZFNoYXBlIl0sIklzc3VlclJlY29yZFNoYXBlIjpbIklzc3VlclJlY29yZFNoYXBlIl0sIlRlcm1zU2hhcGUiOlsiVGVybXNTaGFwZSJdLCJJbnN0YW5jZVJlY29yZFNoYXBlIjpbIkluc3RhbmNlUmVjb3JkU2hhcGUiXSwiSGFuZGxlSSI6WyJIYW5kbGVJIl0sIm1ha2VIYW5kbGVTaGFwZSI6WyJtYWtlSGFuZGxlU2hhcGUiXSwiVGltZXJTaGFwZSI6WyJUaW1lclNoYXBlIl0sIkZ1bGxQcm9wb3NhbFNoYXBlIjpbIkZ1bGxQcm9wb3NhbFNoYXBlIl0sIlByb3Bvc2FsU2hhcGUiOlsiUHJvcG9zYWxTaGFwZSJdLCJFbXB0eVByb3Bvc2FsU2hhcGUiOlsiRW1wdHlQcm9wb3NhbFNoYXBlIl0sImlzT25EZW1hbmRFeGl0UnVsZSI6WyJpc09uRGVtYW5kRXhpdFJ1bGUiXSwiaXNXYWl2ZWRFeGl0UnVsZSI6WyJpc1dhaXZlZEV4aXRSdWxlIl0sImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIjpbImlzQWZ0ZXJEZWFkbGluZUV4aXRSdWxlIl0sIkludml0YXRpb25FbGVtZW50U2hhcGUiOlsiSW52aXRhdGlvbkVsZW1lbnRTaGFwZSJdLCJPZmZlckhhbmRsZXJJIjpbIk9mZmVySGFuZGxlckkiXSwiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiOlsiU2VhdEhhbmRsZUFsbG9jYXRpb25zU2hhcGUiXSwiWm9lTWludFNoYXBlIjpbIlpvZU1pbnRTaGFwZSJdLCJab2VNaW50SSI6WyJab2VNaW50SSJdLCJGZWVNaW50QWNjZXNzU2hhcGUiOlsiRmVlTWludEFjY2Vzc1NoYXBlIl0sIkV4aXRPYmplY3RJIjpbIkV4aXRPYmplY3RJIl0sIkV4aXRPYmplY3RTaGFwZSI6WyJFeGl0T2JqZWN0U2hhcGUiXSwiSW5zdGFuY2VBZG1pblNoYXBlIjpbIkluc3RhbmNlQWRtaW5TaGFwZSJdLCJJbnN0YW5jZUFkbWluSSI6WyJJbnN0YW5jZUFkbWluSSJdLCJJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCI6WyJJbnN0YW5jZVN0b3JhZ2VNYW5hZ2VySUtpdCJdLCJCdW5kbGVDYXBTaGFwZSI6WyJCdW5kbGVDYXBTaGFwZSJdLCJCdW5kbGVTaGFwZSI6WyJCdW5kbGVTaGFwZSJdLCJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSI6WyJVbndyYXBwZWRJbnN0YWxsYXRpb25TaGFwZSJdLCJab2VTdG9yYWdlTWFuYWdlcklLaXQiOlsiWm9lU3RvcmFnZU1hbmFnZXJJS2l0Il0sIlpvZVNlcnZpY2VJIjpbIlpvZVNlcnZpY2VJIl0sIkFkbWluRmFjZXRJIjpbIkFkbWluRmFjZXRJIl0sIlNlYXREYXRhU2hhcGUiOlsiU2VhdERhdGFTaGFwZSJdLCJIYW5kbGVPZmZlckkiOlsiSGFuZGxlT2ZmZXJJIl0sIlByaWNlUXVvdGVTaGFwZSI6WyJQcmljZVF1b3RlU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA23U6/4gBAACIAQAAHgAAAEBhZ29yaWMvem9uZS12MC4yLjIvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZHVyYWJsZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD3utnWChEAAAoRAAAiAAAAQGFnb3JpYy96b25lLXYwLjIuMi9zcmMvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvYmFzZS16b25lIl0sImV4cG9ydHMiOlsibWFrZUR1cmFibGVab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLGlzUGFzc2FibGUsY2FuQmVEdXJhYmxlLG1ha2VTY2FsYXJNYXBTdG9yZSxwcmVwYXJlRXhvLHByZXBhcmVFeG9DbGFzcyxwcmVwYXJlRXhvQ2xhc3NLaXQscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVNldFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlLHdhdGNoUHJvbWlzZSxrZXlzLG1ha2VPbmNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVNldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzU3RvcmFibGU9KHNwZWNpbWVuKT0+aXNQYXNzYWJsZShzcGVjaW1lbikmJmNhbkJlRHVyYWJsZShzcGVjaW1lbik7XG5oYXJkZW4oaXNTdG9yYWJsZSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgYXR0YWNoRHVyYWJsZVN0b3Jlcz0oZ2V0QmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+e1xuY29uc3QgYmFnZ2FnZT1nZXRCYWdnYWdlKCk7XG5jb25zdCByZXQ9cHJvdmlkZUR1cmFibGVNYXBTdG9yZShiYWdnYWdlLGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIHJldDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtTZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtNYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBGYXIoJ2R1cmFibGVTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUR1cmFibGVab25lKG1ha2VEdXJhYmxlWm9uZSk7XG5oYXJkZW4obWFrZUR1cmFibGVab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VEdXJhYmxlWm9uZSI6WyJtYWtlRHVyYWJsZVpvbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAgekds2ECAABhAgAAGwAAAEBlbmRvL2Jhc2U2NC12MS4wLjkvYXRvYi5qc3siaW1wb3J0cyI6WyIuL2RlY29kZS5qcyJdLCJleHBvcnRzIjpbImF0b2IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZGVjb2RlQmFzZTY0OyRozY9faW1wb3J0cyhbW1wiLi9kZWNvZGUuanNcIiwgW1tcImRlY29kZUJhc2U2NFwiLCBbJGjNj19hID0+IChkZWNvZGVCYXNlNjQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGF0b2I9KGVuY29kZWREYXRhKT0+e1xuY29uc3QgYnVmPWRlY29kZUJhc2U2NChlbmNvZGVkRGF0YSk7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5idWYpO1xuIH07JGjNj19vbmNlLmF0b2IoYXRvYik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhdG9iIjpbImF0b2IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJlRd5gEDAAABAwAAGwAAAEBlbmRvL2Jhc2U2NC12MS4wLjkvYnRvYS5qc3siaW1wb3J0cyI6WyIuL2VuY29kZS5qcyJdLCJleHBvcnRzIjpbImJ0b2EiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZW5jb2RlQmFzZTY0OyRozY9faW1wb3J0cyhbW1wiLi9lbmNvZGUuanNcIiwgW1tcImVuY29kZUJhc2U2NFwiLCBbJGjNj19hID0+IChlbmNvZGVCYXNlNjQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJ0b2E9KHN0cmluZ1RvRW5jb2RlKT0+e1xuY29uc3QgYnl0ZXM9c3RyaW5nVG9FbmNvZGUuc3BsaXQoJycpLm1hcCgoY2hhcik9PntcbmNvbnN0IGI9Y2hhci5jaGFyQ29kZUF0KDApO1xuaWYoYj4weGZmKXtcbnRocm93IEVycm9yKCBgYnRvYTogY2hhcmFjdGVyIG91dCBvZiByYW5nZTogJHtjaGFyfWApO1xuIH1cbnJldHVybiBiO1xuIH0pO1xuY29uc3QgYnVmPW5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbnJldHVybiBlbmNvZGVCYXNlNjQoYnVmKTtcbiB9OyRozY9fb25jZS5idG9hKGJ0b2EpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYnRvYSI6WyJidG9hIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHP6J4+rAQAAqwEAAB0AAABAZW5kby9iYXNlNjQtdjEuMC45L2RlY29kZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9kZWNvZGUuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZGVjb2RlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZGVjb2RlLmpzIjpbWyJkZWNvZGVCYXNlNjQiLCJkZWNvZGVCYXNlNjQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPf3R0KrAQAAqwEAAB0AAABAZW5kby9iYXNlNjQtdjEuMC45L2VuY29kZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGUuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlLmpzIjpbWyJlbmNvZGVCYXNlNjQiLCJlbmNvZGVCYXNlNjQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGrmdmeWAgAAlgIAABwAAABAZW5kby9iYXNlNjQtdjEuMC45L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZS5qcyIsIi4vc3JjL2RlY29kZS5qcyIsIi4vYnRvYS5qcyIsIi4vYXRvYi5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGUuanNcIiwgW11dLFtcIi4vc3JjL2RlY29kZS5qc1wiLCBbXV0sW1wiLi9idG9hLmpzXCIsIFtdXSxbXCIuL2F0b2IuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGUuanMiOltbImVuY29kZUJhc2U2NCIsImVuY29kZUJhc2U2NCJdXSwiLi9zcmMvZGVjb2RlLmpzIjpbWyJkZWNvZGVCYXNlNjQiLCJkZWNvZGVCYXNlNjQiXV0sIi4vYnRvYS5qcyI6W1siYnRvYSIsImJ0b2EiXV0sIi4vYXRvYi5qcyI6W1siYXRvYiIsImF0b2IiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF1zFicRAwAAEQMAACEAAABAZW5kby9iYXNlNjQtdjEuMC45L3NyYy9jb21tb24uanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFscGhhYmV0NjQiLCJtb25vZHU2NCIsInBhZGRpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbmNvbnN0ICAgICAgICBwYWRkaW5nPSc9JzskaM2PX29uY2UucGFkZGluZyhwYWRkaW5nKTtcblxuY29uc3QgICAgICAgIGFscGhhYmV0NjQ9XG4nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmFscGhhYmV0NjQoYWxwaGFiZXQ2NCk7XG5jb25zdCAgICAgICAgbW9ub2R1NjQ9e307JGjNj19vbmNlLm1vbm9kdTY0KG1vbm9kdTY0KTtcbmZvcihsZXQgaT0wO2k8YWxwaGFiZXQ2NC5sZW5ndGg7aSs9MSl7XG5jb25zdCBjPWFscGhhYmV0NjRbaV07XG5tb25vZHU2NFtjXT1pO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhZGRpbmciOlsicGFkZGluZyJdLCJhbHBoYWJldDY0IjpbImFscGhhYmV0NjQiXSwibW9ub2R1NjQiOlsibW9ub2R1NjQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA4E5MvncHAAB3BwAAIQAAAEBlbmRvL2Jhc2U2NC12MS4wLjkvc3JjL2RlY29kZS5qc3siaW1wb3J0cyI6WyIuL2NvbW1vbi5qcyJdLCJleHBvcnRzIjpbImRlY29kZUJhc2U2NCIsImpzRGVjb2RlQmFzZTY0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1vbm9kdTY0LHBhZGRpbmc7JGjNj19pbXBvcnRzKFtbXCIuL2NvbW1vbi5qc1wiLCBbW1wibW9ub2R1NjRcIiwgWyRozY9fYSA9PiAobW9ub2R1NjQgPSAkaM2PX2EpXV0sW1wicGFkZGluZ1wiLCBbJGjNj19hID0+IChwYWRkaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAganNEZWNvZGVCYXNlNjQ9KHN0cmluZyxuYW1lPSc8dW5rbm93bj4nKT0+e1xuY29uc3QgZGF0YT1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoc3RyaW5nLmxlbmd0aCo0LzMpKTtcbmxldCByZWdpc3Rlcj0wO1xubGV0IHF1YW50dW09MDtcbmxldCBpPTA7Ly9cbmxldCBqPTA7Ly9cblxud2hpbGUoaTxzdHJpbmcubGVuZ3RoJiZzdHJpbmdbaV0hPT1wYWRkaW5nKXtcbmNvbnN0IG51bWJlcj1tb25vZHU2NFtzdHJpbmdbaV1dO1xuaWYobnVtYmVyPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKCBgSW52YWxpZCBiYXNlNjQgY2hhcmFjdGVyICR7c3RyaW5nW2ldfSBpbiBzdHJpbmcgJHtuYW1lfWApO1xuIH1cbnJlZ2lzdGVyPXJlZ2lzdGVyPDw2fG51bWJlcjtcbnF1YW50dW0rPTY7XG5pZihxdWFudHVtPj04KXtcbnF1YW50dW0tPTg7XG5kYXRhW2pdPXJlZ2lzdGVyPj4+cXVhbnR1bTtcbmorPTE7XG5yZWdpc3RlciY9KDE8PHF1YW50dW0pLTE7XG4gfVxuaSs9MTtcbiB9XG5cbndoaWxlKHF1YW50dW0+MCl7XG5pZihpPT09c3RyaW5nLmxlbmd0aHx8c3RyaW5nW2ldIT09cGFkZGluZyl7XG50aHJvdyBFcnJvciggYE1pc3NpbmcgcGFkZGluZyBhdCBvZmZzZXQgJHtpfSBvZiBzdHJpbmcgJHtuYW1lfWApO1xuIH1cbi8vXG4vL1xuaSs9MTtcbnF1YW50dW0tPTI7XG4gfVxuXG5pZihpPHN0cmluZy5sZW5ndGgpe1xudGhyb3cgRXJyb3IoXG4gYEJhc2U2NCBzdHJpbmcgaGFzIHRyYWlsaW5nIGdhcmJhZ2UgJHtzdHJpbmcuc3Vic3RyKFxuaSlcbiB9IGluIHN0cmluZyAke25hbWV9YCk7XG5cbiB9XG5cbnJldHVybiBkYXRhLnN1YmFycmF5KDAsaik7XG4gfTtcblxuLy9cbi8vXG4kaM2PX29uY2UuanNEZWNvZGVCYXNlNjQoanNEZWNvZGVCYXNlNjQpO2NvbnN0IGFkYXB0RGVjb2Rlcj1cbihuYXRpdmVEZWNvZGVCYXNlNjQpPT5cbiguLi5hcmdzKT0+e1xuY29uc3QgZGVjb2RlZD1uYXRpdmVEZWNvZGVCYXNlNjQoLi4uYXJncyk7XG5pZihkZWNvZGVkIGluc3RhbmNlb2YgVWludDhBcnJheSl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjb2RlZCk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgZGVjb2RlQmFzZTY0PVxuZ2xvYmFsVGhpcy5CYXNlNjQhPT11bmRlZmluZWQ/XG5hZGFwdERlY29kZXIoZ2xvYmFsVGhpcy5CYXNlNjQuZGVjb2RlKTpcbmpzRGVjb2RlQmFzZTY0OyRozY9fb25jZS5kZWNvZGVCYXNlNjQoZGVjb2RlQmFzZTY0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImpzRGVjb2RlQmFzZTY0IjpbImpzRGVjb2RlQmFzZTY0Il0sImRlY29kZUJhc2U2NCI6WyJkZWNvZGVCYXNlNjQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARwvKqSAGAAAgBgAAIQAAAEBlbmRvL2Jhc2U2NC12MS4wLjkvc3JjL2VuY29kZS5qc3siaW1wb3J0cyI6WyIuL2NvbW1vbi5qcyJdLCJleHBvcnRzIjpbImVuY29kZUJhc2U2NCIsImpzRW5jb2RlQmFzZTY0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFscGhhYmV0NjQscGFkZGluZzskaM2PX2ltcG9ydHMoW1tcIi4vY29tbW9uLmpzXCIsIFtbXCJhbHBoYWJldDY0XCIsIFskaM2PX2EgPT4gKGFscGhhYmV0NjQgPSAkaM2PX2EpXV0sW1wicGFkZGluZ1wiLCBbJGjNj19hID0+IChwYWRkaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBqc0VuY29kZUJhc2U2ND0oZGF0YSk9Pntcbi8vXG4vL1xuLy9cbmxldCBzdHJpbmc9Jyc7XG5sZXQgcmVnaXN0ZXI9MDtcbmxldCBxdWFudHVtPTA7XG5cbmZvcihsZXQgaT0wO2k8ZGF0YS5sZW5ndGg7aSs9MSl7XG5jb25zdCBiPWRhdGFbaV07XG5yZWdpc3Rlcj1yZWdpc3Rlcjw8OHxiO1xucXVhbnR1bSs9ODtcbmlmKHF1YW50dW09PT0yNCl7XG5zdHJpbmcrPVxuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjE4JjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjEyJjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjYmMHgzZl0rXG5hbHBoYWJldDY0W3JlZ2lzdGVyPj4+MCYweDNmXTtcbnJlZ2lzdGVyPTA7XG5xdWFudHVtPTA7XG4gfVxuIH1cblxuc3dpdGNoKHF1YW50dW0pe1xuY2FzZSAwOlxuYnJlYWs7XG5jYXNlIDg6XG5zdHJpbmcrPVxuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjImMHgzZl0rXG5hbHBoYWJldDY0W3JlZ2lzdGVyPDw0JjB4M2ZdK1xucGFkZGluZytcbnBhZGRpbmc7XG5icmVhaztcbmNhc2UgMTY6XG5zdHJpbmcrPVxuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjEwJjB4M2ZdK1xuYWxwaGFiZXQ2NFtyZWdpc3Rlcj4+PjQmMHgzZl0rXG5hbHBoYWJldDY0W3JlZ2lzdGVyPDwyJjB4M2ZdK1xucGFkZGluZztcbmJyZWFrO1xuZGVmYXVsdDpcbnRocm93IEVycm9yKCBgaW50ZXJuYWw6IGJhZCBxdWFudHVtICR7cXVhbnR1bX1gKTt9XG5cbnJldHVybiBzdHJpbmc7XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLmpzRW5jb2RlQmFzZTY0KGpzRW5jb2RlQmFzZTY0KTtcbmNvbnN0ICAgICAgICBlbmNvZGVCYXNlNjQ9XG5nbG9iYWxUaGlzLkJhc2U2NCE9PXVuZGVmaW5lZD9nbG9iYWxUaGlzLkJhc2U2NC5lbmNvZGU6anNFbmNvZGVCYXNlNjQ7JGjNj19vbmNlLmVuY29kZUJhc2U2NChlbmNvZGVCYXNlNjQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsianNFbmNvZGVCYXNlNjQiOlsianNFbmNvZGVCYXNlNjQiXSwiZW5jb2RlQmFzZTY0IjpbImVuY29kZUJhc2U2NCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABU4lu4xwQAAMcEAAArAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9hcHBseS1sYWJlbGluZy1lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Rocm93LWxhYmVsZWQuanMiXSwiZXhwb3J0cyI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjNj19hID0+ICh0aHJvd0xhYmVsZWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwbHlMYWJlbGluZ0Vycm9yPShmdW5jLGFyZ3MsbGFiZWw9dW5kZWZpbmVkKT0+e1xuaWYobGFiZWw9PT11bmRlZmluZWQpe1xucmV0dXJuIGZ1bmMoLi4uYXJncyk7XG4gfVxubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xudGhyb3dMYWJlbGVkKGVycixsYWJlbCk7XG4gfVxuaWYoaXNQcm9taXNlKHJlc3VsdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihyZXN1bHQsdW5kZWZpbmVkLChyZWFzb24pPT50aHJvd0xhYmVsZWQocmVhc29uLGxhYmVsKSk7XG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9OyRozY9fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmcm9tVW5pcXVlRW50cmllcz0oYWxsRW50cmllcyk9PntcbmNvbnN0IGVudHJpZXNBcnJheT1bLi4uYWxsRW50cmllc107XG5jb25zdCByZXN1bHQ9aGFyZGVuKGZyb21FbnRyaWVzKGVudHJpZXNBcnJheSkpO1xuaWYob3duS2V5cyhyZXN1bHQpLmxlbmd0aD09PWVudHJpZXNBcnJheS5sZW5ndGgpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7XG5mb3IoY29uc3RbbmFtZSxfXW9mIGVudHJpZXNBcnJheSl7XG5pZihuYW1lcy5oYXMobmFtZSkpe1xuRmFpbCBgY29sbGlzaW9uIG9uIHByb3BlcnR5IG5hbWUgJHtxKG5hbWUpfTogJHtlbnRyaWVzQXJyYXl9YDtcbiB9XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGZhaWxlZCB0byBjcmVhdGUgb2JqZWN0IGZyb20gdW5pcXVlIGVudHJpZXNgO1xuIH07JGjNj19vbmNlLmZyb21VbmlxdWVFbnRyaWVzKGZyb21VbmlxdWVFbnRyaWVzKTtcbmhhcmRlbihmcm9tVW5pcXVlRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmcm9tVW5pcXVlRW50cmllcyI6WyJmcm9tVW5pcXVlRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABRcw2kNwIAADcCAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9pZGVudC1jaGVja2VyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpZGVudENoZWNrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpZGVudENoZWNrZXI9KGNvbmQsX2RldGFpbHMpPT5jb25kOyRozY9fb25jZS5pZGVudENoZWNrZXIoaWRlbnRDaGVja2VyKTtcbmhhcmRlbihpZGVudENoZWNrZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWRlbnRDaGVja2VyIjpbImlkZW50Q2hlY2tlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABhWP6GeAIAAHgCAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9saXN0LWRpZmZlcmVuY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImxpc3REaWZmZXJlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRozY9fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD5vAqF0DAABdAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlSXRlcmF0b3I7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBcnJheUl0ZXJhdG9yPShhcnIpPT57XG5jb25zdHtsZW5ndGh9PWFycjtcbmxldCBpPTA7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG4vKiAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZihpPGxlbmd0aCl7XG52YWx1ZT1hcnJbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbi8vXG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5tYWtlQXJyYXlJdGVyYXRvcihtYWtlQXJyYXlJdGVyYXRvcik7XG5oYXJkZW4obWFrZUFycmF5SXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFycmF5SXRlcmF0b3IiOlsibWFrZUFycmF5SXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVosJ4zkCAAA5AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1pdGVyYXRvci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZUl0ZXJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJdGVyYXRvcj0obmV4dCk9PntcbmNvbnN0IGl0ZXI9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5pdGVyLFxubmV4dH0pO1xuXG5yZXR1cm4gaXRlcjtcbiB9OyRozY9fb25jZS5tYWtlSXRlcmF0b3IobWFrZUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlSXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUl0ZXJhdG9yIjpbIm1ha2VJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtVwZ+AgMAAAIDAAAhAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWFwPShvcmlnaW5hbCxtYXBGbik9PntcbmNvbnN0IGVudHM9ZW50cmllcyhvcmlnaW5hbCk7XG5jb25zdCBtYXBFbnRzPWVudHMubWFwKFxuKFtrLHZdKT0+LyogICAgICAgICAgICAgICAgICAgICAgICovW2ssbWFwRm4odixrKV0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbihmcm9tRW50cmllcyhtYXBFbnRzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADufX47hAwAA4QMAACYAAABAZW5kby9jb21tb24tdjEuMi44L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxjcmVhdGUsZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWV0YU1hcD0oXG5vcmlnaW5hbCxcbm1ldGFNYXBGbixcbnByb3RvPU9iamVjdC5wcm90b3R5cGUpPT5cbntcbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpO1xuY29uc3Qga2V5cz1vd25LZXlzKG9yaWdpbmFsKTtcblxuY29uc3QgZGVzY0VudHJpZXM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xua2V5cy5cbm1hcCgoa2V5KT0+W2tleSxtZXRhTWFwRm4oZGVzY3Nba2V5XSxrZXkpXSkuXG5maWx0ZXIoKFtfa2V5LG9wdERlc2NdKT0+b3B0RGVzYyE9PXVuZGVmaW5lZCk7XG5cbnJldHVybiBoYXJkZW4oY3JlYXRlKHByb3RvLGZyb21FbnRyaWVzKGRlc2NFbnRyaWVzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1ldGFNYXAob2JqZWN0TWV0YU1hcCk7XG5oYXJkZW4ob2JqZWN0TWV0YU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNZXRhTWFwIjpbIm9iamVjdE1ldGFNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwgIay+EDAADhAwAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvdGhyb3ctbGFiZWxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJ0aHJvd0xhYmVsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRocm93TGFiZWxlZD0oXG5pbm5lckVycixcbmxhYmVsLFxuZXJyQ29uc3RydWN0b3I9dW5kZWZpbmVkLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmlmKHR5cGVvZiBsYWJlbD09PSdudW1iZXInKXtcbmxhYmVsPSBgWyR7bGFiZWx9XWA7XG4gfVxuY29uc3Qgb3V0ZXJFcnI9bWFrZUVycm9yKFxuIGAke2xhYmVsfTogJHtpbm5lckVyci5tZXNzYWdlfWAsXG5lcnJDb25zdHJ1Y3Rvcixcbm9wdGlvbnMpO1xuXG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyLFggYENhdXNlZCBieSAke2lubmVyRXJyfWApO1xudGhyb3cgb3V0ZXJFcnI7XG4gfTskaM2PX29uY2UudGhyb3dMYWJlbGVkKHRocm93TGFiZWxlZCk7XG5oYXJkZW4odGhyb3dMYWJlbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRocm93TGFiZWxlZCI6WyJ0aHJvd0xhYmVsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWfuwAm8CAABvAgAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvaW1wb3J0LWFyY2hpdmUuanN7ImltcG9ydHMiOlsiLi9zcmMvdHlwZXMtZXh0ZXJuYWwuanMiLCIuL3NyYy9pbXBvcnQtYXJjaGl2ZS5qcyJdLCJleHBvcnRzIjpbImxvYWRBcmNoaXZlIiwibG9hZEFyY2hpdmUiXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLWV4dGVybmFsLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy90eXBlcy1leHRlcm5hbC5qc1wiLCBbXV0sW1wiLi9zcmMvaW1wb3J0LWFyY2hpdmUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pbXBvcnQtYXJjaGl2ZS5qcyI6W1sicGFyc2VBcmNoaXZlIiwicGFyc2VBcmNoaXZlIl0sWyJsb2FkQXJjaGl2ZSIsImxvYWRBcmNoaXZlIl0sWyJpbXBvcnRBcmNoaXZlIiwiaW1wb3J0QXJjaGl2ZSJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmJuoKbYnAAC2JwAANgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2NvbXBhcnRtZW50LW1hcC5qc3siaW1wb3J0cyI6WyIuL3BvbGljeS1mb3JtYXQuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDb21wYXJ0bWVudE1hcCIsInBhdGhDb21wYXJlIiwic3RyaW5nQ29tcGFyZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRQYWNrYWdlUG9saWN5OyRozY9faW1wb3J0cyhbW1wiLi9wb2xpY3ktZm9ybWF0LmpzXCIsIFtbXCJhc3NlcnRQYWNrYWdlUG9saWN5XCIsIFskaM2PX2EgPT4gKGFzc2VydFBhY2thZ2VQb2xpY3kgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgICAgICAgIHN0cmluZ0NvbXBhcmU9KGEsYik9PmE9PT1iPzA6YTxiPy0xOjE7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLnN0cmluZ0NvbXBhcmUoc3RyaW5nQ29tcGFyZSk7XG5jb25zdCBjdW11bGF0aXZlTGVuZ3RoPShsZW5ndGgsdGVybSk9PntcbnJldHVybiBsZW5ndGgrdGVybS5sZW5ndGg7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXRoQ29tcGFyZT0oYSxiKT0+e1xuLy9cbmlmKGE9PT11bmRlZmluZWQmJmI9PT11bmRlZmluZWQpe1xucmV0dXJuIDA7XG4gfVxuaWYoYT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gMTtcbiB9XG5pZihiPT09dW5kZWZpbmVkKXtcbnJldHVybi0xO1xuIH1cbi8vXG5pZihhLmxlbmd0aCE9PWIubGVuZ3RoKXtcbnJldHVybiBhLmxlbmd0aC1iLmxlbmd0aDtcbiB9XG4vL1xuY29uc3QgYVN1bT1hLnJlZHVjZShjdW11bGF0aXZlTGVuZ3RoLDApO1xuY29uc3QgYlN1bT1iLnJlZHVjZShjdW11bGF0aXZlTGVuZ3RoLDApO1xuaWYoYVN1bSE9PWJTdW0pe1xucmV0dXJuIGFTdW0tYlN1bTtcbiB9XG4vL1xuYXNzZXJ0KGEubGVuZ3RoPT09Yi5sZW5ndGgpOy8vXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8YS5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wYXJpc29uPXN0cmluZ0NvbXBhcmUoYVtpXSxiW2ldKTtcbmlmKGNvbXBhcmlzb24hPT0wKXtcbnJldHVybiBjb21wYXJpc29uO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5wYXRoQ29tcGFyZShwYXRoQ29tcGFyZSk7XG5mdW5jdGlvbiplbnVtZXJhdGUoaXRlcmFibGUpe1xubGV0IGluZGV4PTA7XG5mb3IoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpe1xueWllbGRbaW5kZXgsdmFsdWVdO1xuaW5kZXgrPTE7XG4gfVxuIH1cblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydEVtcHR5T2JqZWN0PShvYmplY3QsbWVzc2FnZSk9PntcbmFzc2VydChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aD09PTAsbWVzc2FnZSk7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGFzc2VydENvbmRpdGlvbnM9KGNvbmRpdGlvbnMsdXJsKT0+e1xuaWYoY29uZGl0aW9ucz09PXVuZGVmaW5lZClyZXR1cm47XG5hc3NlcnQoXG5BcnJheS5pc0FycmF5KGNvbmRpdGlvbnMpLFxuIGBjb25kaXRpb25zIG11c3QgYmUgYW4gYXJyYXksIGdvdCAke2NvbmRpdGlvbnN9IGluICR7cSh1cmwpfWApO1xuXG5mb3IoY29uc3RbaW5kZXgsdmFsdWVdb2YgZW51bWVyYXRlKGNvbmRpdGlvbnMpKXtcbmFzc2VydC50eXBlb2YoXG52YWx1ZSxcbidzdHJpbmcnLFxuIGBjb25kaXRpb25zWyR7aW5kZXh9XSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt2YWx1ZX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0Q29tcGFydG1lbnRNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdHtjb21wYXJ0bWVudCxtb2R1bGUscmV0YWluZWQsLi4uZXh0cmF9PWFsbGVnZWRNb2R1bGU7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cSh7XG5leHRyYSxcbmNvbXBhcnRtZW50fSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxuY29tcGFydG1lbnQsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5jb21wYXJ0bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGNvbXBhcnRtZW50KX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5tb2R1bGUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5tb2R1bGUgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShtb2R1bGUpfSBpbiAke3EodXJsKX1gKTtcblxuaWYocmV0YWluZWQhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihcbnJldGFpbmVkLFxuJ2Jvb2xlYW4nLFxuIGAke3BhdGh9LnJldGFpbmVkIG11c3QgYmUgYSBib29sZWFuLCBnb3QgJHtxKHJldGFpbmVkKX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0RmlsZU1vZHVsZT0oYWxsZWdlZE1vZHVsZSxwYXRoLHVybCk9PntcbmNvbnN0e2xvY2F0aW9uLHBhcnNlcixzaGE1MTIsLi4uZXh0cmF9PWFsbGVnZWRNb2R1bGU7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxubG9jYXRpb24sXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5sb2NhdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKGxvY2F0aW9uKX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5wYXJzZXIsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5wYXJzZXIgbXVzdCBiZSBhIHN0cmluZywgZ290ICR7cShwYXJzZXIpfSBpbiAke3EodXJsKX1gKTtcblxuXG5pZihzaGE1MTIhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihcbnNoYTUxMixcbidzdHJpbmcnLFxuIGAke3BhdGh9LnNoYTUxMiBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHtxKHNoYTUxMil9IGluICR7cSh1cmwpfWApO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydEV4aXRNb2R1bGU9KGFsbGVnZWRNb2R1bGUscGF0aCx1cmwpPT57XG5jb25zdHtleGl0LC4uLmV4dHJhfT1hbGxlZ2VkTW9kdWxlO1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmV4aXQsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS5leGl0IG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EoZXhpdCl9IGluICR7cSh1cmwpfWApO1xuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0TW9kdWxlPShhbGxlZ2VkTW9kdWxlLHBhdGgsdXJsKT0+e1xuY29uc3QgbW9kdWxlRGVzY3JpcHRvcj1PYmplY3QoYWxsZWdlZE1vZHVsZSk7XG5hc3NlcnQoXG5hbGxlZ2VkTW9kdWxlPT09bW9kdWxlRGVzY3JpcHRvciYmIUFycmF5LmlzQXJyYXkobW9kdWxlRGVzY3JpcHRvciksXG4gYCR7cGF0aH0gbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRNb2R1bGV9IGluICR7cSh1cmwpfWApO1xuXG5cbmNvbnN0e2NvbXBhcnRtZW50LG1vZHVsZSxsb2NhdGlvbixwYXJzZXIsZXhpdCxkZWZlcnJlZEVycm9yfT1cbm1vZHVsZURlc2NyaXB0b3I7XG5pZihjb21wYXJ0bWVudCE9PXVuZGVmaW5lZHx8bW9kdWxlIT09dW5kZWZpbmVkKXtcbmFzc2VydENvbXBhcnRtZW50TW9kdWxlKG1vZHVsZURlc2NyaXB0b3IscGF0aCx1cmwpO1xuIH1lbHNlIGlmKGxvY2F0aW9uIT09dW5kZWZpbmVkfHxwYXJzZXIhPT11bmRlZmluZWQpe1xuYXNzZXJ0RmlsZU1vZHVsZShtb2R1bGVEZXNjcmlwdG9yLHBhdGgsdXJsKTtcbiB9ZWxzZSBpZihleGl0IT09dW5kZWZpbmVkKXtcbmFzc2VydEV4aXRNb2R1bGUobW9kdWxlRGVzY3JpcHRvcixwYXRoLHVybCk7XG4gfWVsc2UgaWYoZGVmZXJyZWRFcnJvciE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKFxuZGVmZXJyZWRFcnJvcixcbidzdHJpbmcnLFxuIGAke3BhdGh9LmRlZmVycmVkRXJyb3IgbXVzdCBiZSBhIHN0cmluZyBjb250YWlpbmcgYW4gZXJyb3IgbWVzc2FnZWApO1xuXG4gfWVsc2V7XG5hc3NlcnQuZmFpbChcbiBgJHtwYXRofSBpcyBub3QgYSB2YWxpZCBtb2R1bGUgZGVzY3JpcHRvciwgZ290ICR7cShhbGxlZ2VkTW9kdWxlKX0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRNb2R1bGVzPShhbGxlZ2VkTW9kdWxlcyxwYXRoLHVybCk9PntcbmNvbnN0IG1vZHVsZXM9T2JqZWN0KGFsbGVnZWRNb2R1bGVzKTtcbmFzc2VydChcbmFsbGVnZWRNb2R1bGVzPT09bW9kdWxlc3x8IUFycmF5LmlzQXJyYXkobW9kdWxlcyksXG4gYG1vZHVsZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EoYWxsZWdlZE1vZHVsZXMpfSBpbiAke3EodXJsKX1gKTtcblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhtb2R1bGVzKSl7XG5hc3NlcnRNb2R1bGUodmFsdWUsIGAke3BhdGh9Lm1vZHVsZXNbJHtxKGtleSl9XWAsdXJsKTtcbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UGFyc2Vycz0oYWxsZWdlZFBhcnNlcnMscGF0aCx1cmwpPT57XG5pZihhbGxlZ2VkUGFyc2Vycz09PXVuZGVmaW5lZCl7XG5yZXR1cm47XG4gfVxuY29uc3QgcGFyc2Vycz1PYmplY3QoYWxsZWdlZFBhcnNlcnMpO1xuYXNzZXJ0KFxuYWxsZWdlZFBhcnNlcnM9PT1wYXJzZXJzJiYhQXJyYXkuaXNBcnJheShwYXJzZXJzKSxcbiBgJHtwYXRofS5wYXJzZXJzIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgJHthbGxlZ2VkUGFyc2Vyc30gaW4gJHtxKHVybCl9YCk7XG5cblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhwYXJzZXJzKSl7XG5hc3NlcnQudHlwZW9mKFxua2V5LFxuJ3N0cmluZycsXG4gYGFsbCBrZXlzIG9mICR7cGF0aH0ucGFyc2VycyBtdXN0IGJlIHN0cmluZ3MsIGdvdCAke2tleX0gaW4gJHtxKHVybCl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG52YWx1ZSxcbidzdHJpbmcnLFxuIGAke3BhdGh9LnBhcnNlcnNbJHtxKGtleSl9XSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt2YWx1ZX0gaW4gJHtxKHVybCl9YCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0U2NvcGU9KGFsbGVnZWRTY29wZSxwYXRoLHVybCk9PntcbmNvbnN0IHNjb3BlPU9iamVjdChhbGxlZ2VkU2NvcGUpO1xuYXNzZXJ0KFxuYWxsZWdlZFNjb3BlPT09c2NvcGUmJiFBcnJheS5pc0FycmF5KHNjb3BlKSxcbiBgJHtwYXRofSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZFNjb3BlfSBpbiAke3EodXJsKX1gKTtcblxuXG5jb25zdHtjb21wYXJ0bWVudCwuLi5leHRyYX09c2NvcGU7XG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5cbmFzc2VydC50eXBlb2YoXG5jb21wYXJ0bWVudCxcbidzdHJpbmcnLFxuIGAke3BhdGh9LmNvbXBhcnRtZW50IG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EoY29tcGFydG1lbnQpfSBpbiAke3EodXJsKX1gKTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFNjb3Blcz0oYWxsZWdlZFNjb3BlcyxwYXRoLHVybCk9PntcbmlmKGFsbGVnZWRTY29wZXM9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHNjb3Blcz1PYmplY3QoYWxsZWdlZFNjb3Blcyk7XG5hc3NlcnQoXG5hbGxlZ2VkU2NvcGVzPT09c2NvcGVzJiYhQXJyYXkuaXNBcnJheShzY29wZXMpLFxuIGAke3BhdGh9LnNjb3BlcyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShhbGxlZ2VkU2NvcGVzKX0gaW4gJHtxKHVybCl9YCk7XG5cblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhzY29wZXMpKXtcbmFzc2VydC50eXBlb2YoXG5rZXksXG4nc3RyaW5nJyxcbiBgYWxsIGtleXMgb2YgJHtwYXRofS5zY29wZXMgbXVzdCBiZSBzdHJpbmdzLCBnb3QgJHtrZXl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnRTY29wZSh2YWx1ZSwgYCR7cGF0aH0uc2NvcGVzWyR7cShrZXkpfV1gLHVybCk7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFR5cGVzPShhbGxlZ2VkVHlwZXMscGF0aCx1cmwpPT57XG5pZihhbGxlZ2VkVHlwZXM9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHR5cGVzPU9iamVjdChhbGxlZ2VkVHlwZXMpO1xuYXNzZXJ0KFxuYWxsZWdlZFR5cGVzPT09dHlwZXMmJiFBcnJheS5pc0FycmF5KHR5cGVzKSxcbiBgJHtwYXRofS50eXBlcyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZFR5cGVzfSBpbiAke3EodXJsKX1gKTtcblxuXG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHR5cGVzKSl7XG5hc3NlcnQudHlwZW9mKFxua2V5LFxuJ3N0cmluZycsXG4gYGFsbCBrZXlzIG9mICR7cGF0aH0udHlwZXMgbXVzdCBiZSBzdHJpbmdzLCBnb3QgJHtrZXl9IGluICR7cSh1cmwpfWApO1xuXG5hc3NlcnQudHlwZW9mKFxudmFsdWUsXG4nc3RyaW5nJyxcbiBgJHtwYXRofS50eXBlc1ske3Eoa2V5KX1dIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3ZhbHVlfSBpbiAke3EodXJsKX1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbmNvbnN0IGFzc2VydFBvbGljeT0oXG5hbGxlZ2VkUG9saWN5LFxucGF0aCxcbnVybD0nPHVua25vd24tY29tcGFydG1lbnQtbWFwLmpzb24+Jyk9Plxue1xuYXNzZXJ0UGFja2FnZVBvbGljeShhbGxlZ2VkUG9saWN5LCBgJHtwYXRofS5wb2xpY3lgLHVybCk7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0Q29tcGFydG1lbnQ9KGFsbGVnZWRDb21wYXJ0bWVudCxwYXRoLHVybCk9PntcbmNvbnN0IGNvbXBhcnRtZW50PU9iamVjdChhbGxlZ2VkQ29tcGFydG1lbnQpO1xuYXNzZXJ0KFxuYWxsZWdlZENvbXBhcnRtZW50PT09Y29tcGFydG1lbnQmJiFBcnJheS5pc0FycmF5KGNvbXBhcnRtZW50KSxcbiBgJHtwYXRofSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7YWxsZWdlZENvbXBhcnRtZW50fSBpbiAke3EodXJsKX1gKTtcblxuXG5jb25zdHtcbmxvY2F0aW9uLFxubmFtZSxcbmxhYmVsLFxucGFyc2VycyxcbnR5cGVzLFxuc2NvcGVzLFxubW9kdWxlcyxcbnBvbGljeSxcbi4uLmV4dHJhfT1cbmNvbXBhcnRtZW50O1xuXG5hc3NlcnRFbXB0eU9iamVjdChcbmV4dHJhLFxuIGAke3BhdGh9IG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcywgZ290ICR7cShcbk9iamVjdC5rZXlzKGV4dHJhKSlcbiB9IGluICR7cSh1cmwpfWApO1xuXG5cbmFzc2VydC50eXBlb2YoXG5sb2NhdGlvbixcbidzdHJpbmcnLFxuIGAke3BhdGh9LmxvY2F0aW9uIGluICR7cSh1cmwpfSBtdXN0IGJlIHN0cmluZywgZ290ICR7cShsb2NhdGlvbil9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5uYW1lLFxuJ3N0cmluZycsXG4gYCR7cGF0aH0ubmFtZSBpbiAke3EodXJsKX0gbXVzdCBiZSBzdHJpbmcsIGdvdCAke3EobmFtZSl9YCk7XG5cbmFzc2VydC50eXBlb2YoXG5sYWJlbCxcbidzdHJpbmcnLFxuIGAke3BhdGh9LmxhYmVsIGluICR7cSh1cmwpfSBtdXN0IGJlIHN0cmluZywgZ290ICR7cShsYWJlbCl9YCk7XG5cblxuYXNzZXJ0TW9kdWxlcyhtb2R1bGVzLHBhdGgsdXJsKTtcbmFzc2VydFBhcnNlcnMocGFyc2VycyxwYXRoLHVybCk7XG5hc3NlcnRTY29wZXMoc2NvcGVzLHBhdGgsdXJsKTtcbmFzc2VydFR5cGVzKHR5cGVzLHBhdGgsdXJsKTtcbmFzc2VydFBvbGljeShwb2xpY3kscGF0aCx1cmwpO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRDb21wYXJ0bWVudHM9KGFsbGVnZWRDb21wYXJ0bWVudHMsdXJsKT0+e1xuY29uc3QgY29tcGFydG1lbnRzPU9iamVjdChhbGxlZ2VkQ29tcGFydG1lbnRzKTtcbmFzc2VydChcbmFsbGVnZWRDb21wYXJ0bWVudHM9PT1jb21wYXJ0bWVudHN8fCFBcnJheS5pc0FycmF5KGNvbXBhcnRtZW50cyksXG4gYGNvbXBhcnRtZW50cyBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShhbGxlZ2VkQ29tcGFydG1lbnRzKX0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhjb21wYXJ0bWVudHMpKXtcbmFzc2VydENvbXBhcnRtZW50KHZhbHVlLCBgY29tcGFydG1lbnRzWyR7cShrZXkpfV1gLHVybCk7XG4gfVxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBhc3NlcnRFbnRyeT0oYWxsZWdlZEVudHJ5LHVybCk9PntcbmNvbnN0IGVudHJ5PU9iamVjdChhbGxlZ2VkRW50cnkpO1xuYXNzZXJ0KFxuYWxsZWdlZEVudHJ5PT09ZW50cnkmJiFBcnJheS5pc0FycmF5KGVudHJ5KSxcbiBgXCJlbnRyeVwiIG11c3QgYmUgYW4gb2JqZWN0IGluIGNvbXBhcnRtZW50IG1hcCwgZ290ICR7YWxsZWdlZEVudHJ5fSBpbiAke3EoXG51cmwpXG4gfWApO1xuXG5jb25zdHtjb21wYXJ0bWVudCxtb2R1bGUsLi4uZXh0cmF9PWVudHJ5O1xuYXNzZXJ0RW1wdHlPYmplY3QoXG5leHRyYSxcbiBgXCJlbnRyeVwiIG11c3Qgbm90IGhhdmUgZXh0cmEgcHJvcGVydGllcyBpbiBjb21wYXJ0bWVudCBtYXAsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbmNvbXBhcnRtZW50LFxuJ3N0cmluZycsXG4gYGVudHJ5LmNvbXBhcnRtZW50IG11c3QgYmUgYSBzdHJpbmcgaW4gY29tcGFydG1lbnQgbWFwLCBnb3QgJHtjb21wYXJ0bWVudH0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuYXNzZXJ0LnR5cGVvZihcbm1vZHVsZSxcbidzdHJpbmcnLFxuIGBlbnRyeS5tb2R1bGUgbXVzdCBiZSBhIHN0cmluZyBpbiBjb21wYXJ0bWVudCBtYXAsIGdvdCAke21vZHVsZX0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIGFzc2VydENvbXBhcnRtZW50TWFwPShcbmFsbGVnZWRDb21wYXJ0bWVudE1hcCxcbnVybD0nPHVua25vd24tY29tcGFydG1lbnQtbWFwLmpzb24+Jyk9Plxue1xuY29uc3QgY29tcGFydG1lbnRNYXA9T2JqZWN0KGFsbGVnZWRDb21wYXJ0bWVudE1hcCk7XG5hc3NlcnQoXG5hbGxlZ2VkQ29tcGFydG1lbnRNYXA9PT1jb21wYXJ0bWVudE1hcCYmIUFycmF5LmlzQXJyYXkoY29tcGFydG1lbnRNYXApLFxuIGBDb21wYXJ0bWVudCBtYXAgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRDb21wYXJ0bWVudE1hcH0gaW4gJHtxKFxudXJsKVxuIH1gKTtcblxuY29uc3R7XG4vL1xuLy9cbnRhZ3M6Y29uZGl0aW9ucyxcbmVudHJ5LFxuY29tcGFydG1lbnRzLFxuLi4uZXh0cmF9PVxuT2JqZWN0KGNvbXBhcnRtZW50TWFwKTtcbmFzc2VydEVtcHR5T2JqZWN0KFxuZXh0cmEsXG4gYENvbXBhcnRtZW50IG1hcCBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3EoXG5PYmplY3Qua2V5cyhleHRyYSkpXG4gfSBpbiAke3EodXJsKX1gKTtcblxuYXNzZXJ0Q29uZGl0aW9ucyhjb25kaXRpb25zLHVybCk7XG5hc3NlcnRFbnRyeShlbnRyeSx1cmwpO1xuYXNzZXJ0Q29tcGFydG1lbnRzKGNvbXBhcnRtZW50cyx1cmwpO1xuIH07JGjNj19vbmNlLmFzc2VydENvbXBhcnRtZW50TWFwKGFzc2VydENvbXBhcnRtZW50TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ0NvbXBhcmUiOlsic3RyaW5nQ29tcGFyZSJdLCJwYXRoQ29tcGFyZSI6WyJwYXRoQ29tcGFyZSJdLCJhc3NlcnRDb21wYXJ0bWVudE1hcCI6WyJhc3NlcnRDb21wYXJ0bWVudE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADGuu2vAQMAAAEDAAAwAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvZXh0ZW5zaW9uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJwYXJzZUV4dGVuc2lvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFyc2VFeHRlbnNpb249KGxvY2F0aW9uKT0+e1xuY29uc3QgbGFzdFNsYXNoPWxvY2F0aW9uLmxhc3RJbmRleE9mKCcvJyk7XG5pZihsYXN0U2xhc2g8MCl7XG5yZXR1cm4nJztcbiB9XG5jb25zdCBiYXNlPWxvY2F0aW9uLnNsaWNlKGxhc3RTbGFzaCsxKTtcbmNvbnN0IGxhc3REb3Q9YmFzZS5sYXN0SW5kZXhPZignLicpO1xuaWYobGFzdERvdDwwKXtcbnJldHVybicnO1xuIH1cbnJldHVybiBiYXNlLnNsaWNlKGxhc3REb3QrMSk7XG4gfTskaM2PX29uY2UucGFyc2VFeHRlbnNpb24ocGFyc2VFeHRlbnNpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicGFyc2VFeHRlbnNpb24iOlsicGFyc2VFeHRlbnNpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJkDyRM8kAADPJAAAOgAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1hcmNoaXZlLWxpdGUuanN7ImltcG9ydHMiOlsiQGVuZG8vemlwIiwiLi9saW5rLmpzIiwiLi9qc29uLmpzIiwiLi9wb3dlcnMuanMiLCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qcyIsIi4vY29tcGFydG1lbnQtbWFwLmpzIiwiLi9pbXBvcnQtaG9vay5qcyIsIi4vcG9saWN5LmpzIl0sImV4cG9ydHMiOlsiaW1wb3J0QXJjaGl2ZSIsImxvYWRBcmNoaXZlIiwicGFyc2VBcmNoaXZlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFppcFJlYWRlcixsaW5rLHBhcnNlTG9jYXRlZEpzb24sdW5wYWNrUmVhZFBvd2Vycyxqb2luLGFzc2VydENvbXBhcnRtZW50TWFwLGV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIsYXR0ZW51YXRlTW9kdWxlSG9vayxlbmZvcmNlTW9kdWxlUG9saWN5OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vemlwXCIsIFtbXCJaaXBSZWFkZXJcIiwgWyRozY9fYSA9PiAoWmlwUmVhZGVyID0gJGjNj19hKV1dXV0sW1wiLi9saW5rLmpzXCIsIFtbXCJsaW5rXCIsIFskaM2PX2EgPT4gKGxpbmsgPSAkaM2PX2EpXV1dXSxbXCIuL2pzb24uanNcIiwgW1tcInBhcnNlTG9jYXRlZEpzb25cIiwgWyRozY9fYSA9PiAocGFyc2VMb2NhdGVkSnNvbiA9ICRozY9fYSldXV1dLFtcIi4vcG93ZXJzLmpzXCIsIFtbXCJ1bnBhY2tSZWFkUG93ZXJzXCIsIFskaM2PX2EgPT4gKHVucGFja1JlYWRQb3dlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qc1wiLCBbW1wiam9pblwiLCBbJGjNj19hID0+IChqb2luID0gJGjNj19hKV1dXV0sW1wiLi9jb21wYXJ0bWVudC1tYXAuanNcIiwgW1tcImFzc2VydENvbXBhcnRtZW50TWFwXCIsIFskaM2PX2EgPT4gKGFzc2VydENvbXBhcnRtZW50TWFwID0gJGjNj19hKV1dXV0sW1wiLi9pbXBvcnQtaG9vay5qc1wiLCBbW1wiZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlclwiLCBbJGjNj19hID0+IChleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyID0gJGjNj19hKV1dXV0sW1wiLi9wb2xpY3kuanNcIiwgW1tcImF0dGVudWF0ZU1vZHVsZUhvb2tcIiwgWyRozY9fYSA9PiAoYXR0ZW51YXRlTW9kdWxlSG9vayA9ICRozY9fYSldXSxbXCJlbmZvcmNlTW9kdWxlUG9saWN5XCIsIFskaM2PX2EgPT4gKGVuZm9yY2VNb2R1bGVQb2xpY3kgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e0ZhaWwscXVvdGU6cX09YXNzZXJ0O1xuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuY29uc3R7YXNzaWduLGNyZWF0ZSxmcmVlemV9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBvc3Rwb25lRXJyb3JUb0V4ZWN1dGU9KGVycm9yTWVzc2FnZSk9Pntcbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IHJlY29yZD1mcmVlemUoe1xuaW1wb3J0czpbXSxcbmV4cG9ydHM6W10sXG5leGVjdXRlOigpPT57XG50aHJvdyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuIH19KTtcblxuXG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VBcmNoaXZlSW1wb3J0SG9va01ha2VyPShcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMj11bmRlZmluZWQsXG5jb21wdXRlU291cmNlTG9jYXRpb249dW5kZWZpbmVkLFxuZXhpdE1vZHVsZUltcG9ydEhvb2s9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uPXVuZGVmaW5lZCk9Plxue1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZUltcG9ydEhvb2s9KHtcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VOYW1lLFxuYXR0ZW51YXRvcnNcbi8vXG4vL1xufSk9Pntcbi8vXG5jb25zdCBjb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnRzW3BhY2thZ2VMb2NhdGlvbl07XG5jb25zdHttb2R1bGVzfT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbXBvcnRIb29rPWFzeW5jKG1vZHVsZVNwZWNpZmllcik9PntcbmF3YWl0IG51bGw7XG4vL1xuY29uc3QgbW9kdWxlPW1vZHVsZXNbbW9kdWxlU3BlY2lmaWVyXTtcbmlmKG1vZHVsZT09PXVuZGVmaW5lZCl7XG5pZihleGl0TW9kdWxlSW1wb3J0SG9vayl7XG4vL1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDp0cnVlLFxuZXJyb3JIaW50OiBgQmxvY2tlZCBpbiBsb2FkaW5nLiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSB3YXMgbm90IGluIHRoZSBhcmNoaXZlIGFuZCBhbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGxvYWQgaXQgYXMgYSBidWlsdGluYH0pO1xuXG5jb25zdCByZWNvcmQ9YXdhaXQgZXhpdE1vZHVsZUltcG9ydEhvb2soXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24pO1xuXG5pZihyZWNvcmQpe1xuLy9cbi8vXG4vL1xucmV0dXJue1xucmVjb3JkOmF3YWl0IGF0dGVudWF0ZU1vZHVsZUhvb2soXG5tb2R1bGVTcGVjaWZpZXIsXG5yZWNvcmQsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IucG9saWN5LFxuYXR0ZW51YXRvcnMpLFxuXG5zcGVjaWZpZXI6bW9kdWxlU3BlY2lmaWVyfTtcblxuIH1lbHNle1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIHBvc3Rwb25lRXJyb3JUb0V4ZWN1dGUoXG4gYENhbm5vdCBmaW5kIGV4dGVybmFsIG1vZHVsZSAke3EobW9kdWxlU3BlY2lmaWVyKX0gaW4gcGFja2FnZSAke3EoXG5wYWNrYWdlTG9jYXRpb24pXG4gfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTG9jYXRpb24pfWApO1xuXG4gfVxuIH1cbnRocm93IEVycm9yKFxuIGBDYW5ub3QgZmluZCBtb2R1bGUgJHtxKG1vZHVsZVNwZWNpZmllcil9IGluIHBhY2thZ2UgJHtxKFxucGFja2FnZUxvY2F0aW9uKVxuIH0gaW4gYXJjaGl2ZSAke3EoYXJjaGl2ZUxvY2F0aW9uKX1gKTtcblxuIH1cbmlmKG1vZHVsZS5kZWZlcnJlZEVycm9yIT09dW5kZWZpbmVkKXtcbnJldHVybiBwb3N0cG9uZUVycm9yVG9FeGVjdXRlKG1vZHVsZS5kZWZlcnJlZEVycm9yKTtcbiB9XG5pZihtb2R1bGUucGFyc2VyPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgcGFyc2UgbW9kdWxlICR7cShtb2R1bGVTcGVjaWZpZXIpfSBpbiBwYWNrYWdlICR7cShcbnBhY2thZ2VMb2NhdGlvbilcbiB9IGluIGFyY2hpdmUgJHtxKGFyY2hpdmVMb2NhdGlvbil9YCk7XG5cbiB9XG5jb25zdCBwYXJzZXI9cGFyc2VyRm9yTGFuZ3VhZ2VbbW9kdWxlLnBhcnNlcl07XG5pZihwYXJzZXI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBwYXJzZSAke3EobW9kdWxlLnBhcnNlcil9IG1vZHVsZSAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSBpbiBwYWNrYWdlICR7cShwYWNrYWdlTG9jYXRpb24pfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTG9jYXRpb24pfWApO1xuXG4gfVxuY29uc3R7cGFyc2V9PXBhcnNlcjtcbmNvbnN0IG1vZHVsZUxvY2F0aW9uPSBgJHtwYWNrYWdlTG9jYXRpb259LyR7bW9kdWxlLmxvY2F0aW9ufWA7XG5jb25zdCBtb2R1bGVCeXRlcz1nZXQobW9kdWxlTG9jYXRpb24pO1xuXG5pZihjb21wdXRlU2hhNTEyIT09dW5kZWZpbmVkJiZtb2R1bGUuc2hhNTEyIT09dW5kZWZpbmVkKXtcbmNvbnN0IHNoYTUxMj1jb21wdXRlU2hhNTEyKG1vZHVsZUJ5dGVzKTtcbmlmKHNoYTUxMiE9PW1vZHVsZS5zaGE1MTIpe1xudGhyb3cgRXJyb3IoXG4gYE1vZHVsZSAke3EobW9kdWxlLmxvY2F0aW9uKX0gb2YgcGFja2FnZSAke3EoXG5wYWNrYWdlTG9jYXRpb24pXG4gfSBpbiBhcmNoaXZlICR7cShcbmFyY2hpdmVMb2NhdGlvbilcbiB9IGZhaWxlZCBhIFNIQS01MTIgaW50ZWdyaXR5IGNoZWNrYCk7XG5cbiB9XG4gfVxuXG5sZXQgc291cmNlTG9jYXRpb249IGBmaWxlOi8vLyR7bW9kdWxlTG9jYXRpb259YDtcbmlmKHBhY2thZ2VOYW1lIT09dW5kZWZpbmVkKXtcbmNvbnN0IGJhc2U9cGFja2FnZU5hbWUuc3BsaXQoJy8nKS5zbGljZSgtMSkuam9pbignLycpO1xuc291cmNlTG9jYXRpb249IGAuLi4vJHtqb2luKGJhc2UsbW9kdWxlU3BlY2lmaWVyKX1gO1xuIH1cbmlmKGNvbXB1dGVTb3VyY2VMb2NhdGlvbiE9PXVuZGVmaW5lZCl7XG5zb3VyY2VMb2NhdGlvbj1cbmNvbXB1dGVTb3VyY2VMb2NhdGlvbihwYWNrYWdlTG9jYXRpb24sbW9kdWxlU3BlY2lmaWVyKXx8XG5zb3VyY2VMb2NhdGlvbjtcbiB9XG5cbmxldCBzb3VyY2VNYXBVcmw7XG5pZihcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbiE9PXVuZGVmaW5lZCYmXG5tb2R1bGUuc2hhNTEyIT09dW5kZWZpbmVkKVxue1xuc291cmNlTWFwVXJsPWNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbih7XG5jb21wYXJ0bWVudDpwYWNrYWdlTG9jYXRpb24sXG5tb2R1bGU6bW9kdWxlU3BlY2lmaWVyLFxubG9jYXRpb246c291cmNlTG9jYXRpb24sXG5zaGE1MTI6bW9kdWxlLnNoYTUxMn0pO1xuXG4gfVxuXG4vL1xuY29uc3R7cmVjb3JkfT1hd2FpdCBwYXJzZShcbm1vZHVsZUJ5dGVzLFxubW9kdWxlU3BlY2lmaWVyLFxuc291cmNlTG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG57XG5zb3VyY2VNYXBVcmwsXG5jb21wYXJ0bWVudERlc2NyaXB0b3J9KTtcblxuXG5yZXR1cm57cmVjb3JkLHNwZWNpZmllcjptb2R1bGVTcGVjaWZpZXJ9O1xuIH07XG5yZXR1cm4gaW1wb3J0SG9vaztcbiB9O1xucmV0dXJuIG1ha2VJbXBvcnRIb29rO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnNlQXJjaGl2ZT1hc3luYyhcbmFyY2hpdmVCeXRlcyxcbmFyY2hpdmVMb2NhdGlvbj0nPHVua25vd24+Jyxcbm9wdGlvbnM9e30pPT5cbntcbmF3YWl0IG51bGw7XG5jb25zdHtcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuZXhwZWN0ZWRTaGE1MTI9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbj11bmRlZmluZWQsXG5Db21wYXJ0bWVudDpDb21wYXJ0bWVudFBhcnNlT3B0aW9uPUNvbXBhcnRtZW50LFxubW9kdWxlcz11bmRlZmluZWQsXG5pbXBvcnRIb29rOmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZCxcbnBhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uPXt9fT1cbm9wdGlvbnM7XG5cbmNvbnN0IHBhcnNlckZvckxhbmd1YWdlPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCkscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxuXG5jb25zdCBhcmNoaXZlPW5ldyBaaXBSZWFkZXIoYXJjaGl2ZUJ5dGVzLHtuYW1lOmFyY2hpdmVMb2NhdGlvbn0pO1xuXG4vL1xuY29uc3QgdW5zZWVuPW5ldyBTZXQoYXJjaGl2ZS5maWxlcy5rZXlzKCkpO1xudW5zZWVuLnNpemU+PTJ8fFxuRmFpbCBgQXJjaGl2ZSBmYWlsZWQgc2FuaXR5IGNoZWNrOiBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBhIGNvbXBhcnRtZW50IG1hcCBmaWxlIGFuZCBvbmUgbW9kdWxlIGZpbGUgaW4gJHtxKFxuYXJjaGl2ZUxvY2F0aW9uKVxuIH1gO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZ2V0PShwYXRoKT0+e1xudW5zZWVuLmRlbGV0ZShwYXRoKTtcbnJldHVybiBhcmNoaXZlLnJlYWQocGF0aCk7XG4gfTtcblxuY29uc3QgY29tcGFydG1lbnRNYXBCeXRlcz1nZXQoJ2NvbXBhcnRtZW50LW1hcC5qc29uJyk7XG5cbmxldCBzaGE1MTI7XG5pZihjb21wdXRlU2hhNTEyIT09dW5kZWZpbmVkKXtcbnNoYTUxMj1jb21wdXRlU2hhNTEyKGNvbXBhcnRtZW50TWFwQnl0ZXMpO1xuIH1cbmlmKGV4cGVjdGVkU2hhNTEyIT09dW5kZWZpbmVkKXtcbmlmKHNoYTUxMj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IHZlcmlmeSBleHBlY3RlZFNoYTUxMiB3aXRob3V0IGFsc28gcHJvdmlkaW5nIGNvbXB1dGVTaGE1MTIsIGZvciBhcmNoaXZlICR7YXJjaGl2ZUxvY2F0aW9ufWApO1xuXG4gfVxuaWYoc2hhNTEyIT09ZXhwZWN0ZWRTaGE1MTIpe1xudGhyb3cgRXJyb3IoXG4gYEFyY2hpdmUgY29tcGFydG1lbnQgbWFwIGZhaWxlZCBhIFNIQS01MTIgaW50ZWdyaXR5IGNoZWNrLCBleHBlY3RlZCAke2V4cGVjdGVkU2hhNTEyfSwgZ290ICR7c2hhNTEyfSwgZm9yIGFyY2hpdmUgJHthcmNoaXZlTG9jYXRpb259YCk7XG5cbiB9XG4gfVxuY29uc3QgY29tcGFydG1lbnRNYXBUZXh0PXRleHREZWNvZGVyLmRlY29kZShjb21wYXJ0bWVudE1hcEJ5dGVzKTtcbmNvbnN0IGNvbXBhcnRtZW50TWFwPXBhcnNlTG9jYXRlZEpzb24oXG5jb21wYXJ0bWVudE1hcFRleHQsXG4nY29tcGFydG1lbnQtbWFwLmpzb24nKTtcblxuYXNzZXJ0Q29tcGFydG1lbnRNYXAoY29tcGFydG1lbnRNYXAsYXJjaGl2ZUxvY2F0aW9uKTtcblxuY29uc3R7XG5jb21wYXJ0bWVudHMsXG5lbnRyeTp7bW9kdWxlOmVudHJ5TW9kdWxlU3BlY2lmaWVyLGNvbXBhcnRtZW50OmVudHJ5Q29tcGFydG1lbnROYW1lfX09XG5jb21wYXJ0bWVudE1hcDtcblxuY29uc3QgY29tcGFydG1lbnRFeGl0TW9kdWxlSW1wb3J0SG9vaz1leGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKHtcbm1vZHVsZXMsXG5leGl0TW9kdWxlSW1wb3J0SG9vayxcbmVudHJ5Q29tcGFydG1lbnROYW1lfSk7XG5cblxuLy9cbi8vXG4vL1xuaWYoY29tcHV0ZVNoYTUxMiE9PXVuZGVmaW5lZCl7XG5jb25zdCBtYWtlSW1wb3J0SG9vaz1tYWtlQXJjaGl2ZUltcG9ydEhvb2tNYWtlcihcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMixcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbixcbmNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2ssXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24pO1xuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3R7Y29tcGFydG1lbnQscGVuZGluZ0pvYnNQcm9taXNlfT1saW5rKGNvbXBhcnRtZW50TWFwLHtcbm1ha2VJbXBvcnRIb29rLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVzOk9iamVjdC5mcm9tRW50cmllcyhcbk9iamVjdC5rZXlzKG1vZHVsZXN8fHt9KS5tYXAoKHNwZWNpZmllcik9PntcbnJldHVybltzcGVjaWZpZXIse25hbWVzcGFjZTp7fX1dO1xuIH0pKSxcblxuQ29tcGFydG1lbnQ6Q29tcGFydG1lbnRQYXJzZU9wdGlvbn0pO1xuXG5cbmF3YWl0IHBlbmRpbmdKb2JzUHJvbWlzZTtcblxuYXdhaXQgY29tcGFydG1lbnQubG9hZChlbnRyeU1vZHVsZVNwZWNpZmllcik7XG51bnNlZW4uc2l6ZT09PTB8fFxuRmFpbCBgQXJjaGl2ZSBjb250YWlucyBleHRyYW5lb3VzIGZpbGVzOiAke3EoWy4uLnVuc2Vlbl0pfSBpbiAke3EoXG5hcmNoaXZlTG9jYXRpb24pXG4gfWA7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4ZWN1dGU9YXN5bmMob3B0aW9ucyk9PntcbmNvbnN0e1xuZ2xvYmFscyxcbm1vZHVsZXMsXG50cmFuc2Zvcm1zLFxuX19zaGltVHJhbnNmb3Jtc19fLFxuQ29tcGFydG1lbnQ6Q29tcGFydG1lbnRPcHRpb249Q29tcGFydG1lbnRQYXJzZU9wdGlvbixcbmltcG9ydEhvb2s6ZXhpdE1vZHVsZUltcG9ydEhvb2t9PVxub3B0aW9uc3x8e307XG5cbmNvbnN0IGNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2s9ZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlcih7XG5tb2R1bGVzLFxuZXhpdE1vZHVsZUltcG9ydEhvb2ssXG5lbnRyeUNvbXBhcnRtZW50TmFtZX0pO1xuXG5jb25zdCBtYWtlSW1wb3J0SG9vaz1tYWtlQXJjaGl2ZUltcG9ydEhvb2tNYWtlcihcbmdldCxcbmNvbXBhcnRtZW50cyxcbmFyY2hpdmVMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlLFxuY29tcHV0ZVNoYTUxMixcbmNvbXB1dGVTb3VyY2VMb2NhdGlvbixcbmNvbXBhcnRtZW50RXhpdE1vZHVsZUltcG9ydEhvb2ssXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb24pO1xuXG5jb25zdHtjb21wYXJ0bWVudCxwZW5kaW5nSm9ic1Byb21pc2V9PWxpbmsoY29tcGFydG1lbnRNYXAse1xubWFrZUltcG9ydEhvb2ssXG5wYXJzZXJGb3JMYW5ndWFnZSxcbmdsb2JhbHMsXG5tb2R1bGVzLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50T3B0aW9ufSk7XG5cblxuYXdhaXQgcGVuZGluZ0pvYnNQcm9taXNlO1xuXG4vL1xucmV0dXJuIGNvbXBhcnRtZW50WydpbXBvcnQnXShlbnRyeU1vZHVsZVNwZWNpZmllcik7XG4gfTtcblxucmV0dXJue2ltcG9ydDpleGVjdXRlLHNoYTUxMn07XG4gfTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLnBhcnNlQXJjaGl2ZShwYXJzZUFyY2hpdmUpO1xuY29uc3QgICAgICAgIGxvYWRBcmNoaXZlPWFzeW5jKFxucmVhZFBvd2VycyxcbmFyY2hpdmVMb2NhdGlvbixcbm9wdGlvbnM9e30pPT5cbntcbmNvbnN0e3JlYWQsY29tcHV0ZVNoYTUxMn09dW5wYWNrUmVhZFBvd2VycyhyZWFkUG93ZXJzKTtcbmNvbnN0e1xuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5tb2R1bGVzLFxuY29tcHV0ZVNvdXJjZU1hcExvY2F0aW9uLFxucGFyc2VyRm9yTGFuZ3VhZ2V9PVxub3B0aW9ucztcbmNvbnN0IGFyY2hpdmVCeXRlcz1hd2FpdCByZWFkKGFyY2hpdmVMb2NhdGlvbik7XG5yZXR1cm4gcGFyc2VBcmNoaXZlKGFyY2hpdmVCeXRlcyxhcmNoaXZlTG9jYXRpb24se1xuY29tcHV0ZVNoYTUxMixcbmV4cGVjdGVkU2hhNTEyLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uLFxubW9kdWxlcyxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbixcbnBhcnNlckZvckxhbmd1YWdlfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubG9hZEFyY2hpdmUobG9hZEFyY2hpdmUpO1xuY29uc3QgICAgICAgIGltcG9ydEFyY2hpdmU9YXN5bmMocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk9PntcbmNvbnN0IGFyY2hpdmU9YXdhaXQgbG9hZEFyY2hpdmUocmVhZFBvd2VycyxhcmNoaXZlTG9jYXRpb24sb3B0aW9ucyk7XG5yZXR1cm4gYXJjaGl2ZS5pbXBvcnQob3B0aW9ucyk7XG4gfTskaM2PX29uY2UuaW1wb3J0QXJjaGl2ZShpbXBvcnRBcmNoaXZlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InBhcnNlQXJjaGl2ZSI6WyJwYXJzZUFyY2hpdmUiXSwibG9hZEFyY2hpdmUiOlsibG9hZEFyY2hpdmUiXSwiaW1wb3J0QXJjaGl2ZSI6WyJpbXBvcnRBcmNoaXZlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAC3OD8EFBQAABQUAAD0AAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9pbXBvcnQtYXJjaGl2ZS1wYXJzZXJzLmpzeyJpbXBvcnRzIjpbIi4vcGFyc2UtcHJlLWNqcy5qcyIsIi4vcGFyc2UtanNvbi5qcyIsIi4vcGFyc2UtdGV4dC5qcyIsIi4vcGFyc2UtYnl0ZXMuanMiLCIuL3BhcnNlLXByZS1tanMuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFyc2VyUHJlQ2pzLHBhcnNlckpzb24scGFyc2VyVGV4dCxwYXJzZXJCeXRlcyxwYXJzZXJQcmVNanM7JGjNj19pbXBvcnRzKFtbXCIuL3BhcnNlLXByZS1janMuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAocGFyc2VyUHJlQ2pzID0gJGjNj19hKV1dXV0sW1wiLi9wYXJzZS1qc29uLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHBhcnNlckpzb24gPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLXRleHQuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAocGFyc2VyVGV4dCA9ICRozY9fYSldXV1dLFtcIi4vcGFyc2UtYnl0ZXMuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAocGFyc2VyQnl0ZXMgPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLXByZS1tanMuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRozY9fYSA9PiAocGFyc2VyUHJlTWpzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZT1PYmplY3QuZnJlZXplKFxuLyogICAgICAgICAgICAgICAgKi97XG4ncHJlLWNqcy1qc29uJzpwYXJzZXJQcmVDanMsXG4ncHJlLW1qcy1qc29uJzpwYXJzZXJQcmVNanMsXG5qc29uOnBhcnNlckpzb24sXG50ZXh0OnBhcnNlclRleHQsXG5ieXRlczpwYXJzZXJCeXRlc30pOyRozY9fb25jZS5kZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UoZGVmYXVsdFBhcnNlckZvckxhbmd1YWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSI6WyJkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+d2GmVgIAABYCAAANQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1hcmNoaXZlLmpzeyJpbXBvcnRzIjpbIi4vaW1wb3J0LWFyY2hpdmUtcGFyc2Vycy5qcyIsIi4vaW1wb3J0LWFyY2hpdmUtbGl0ZS5qcyJdLCJleHBvcnRzIjpbImltcG9ydEFyY2hpdmUiLCJsb2FkQXJjaGl2ZSIsInBhcnNlQXJjaGl2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UscGFyc2VBcmNoaXZlTGl0ZSxsb2FkQXJjaGl2ZUxpdGUsaW1wb3J0QXJjaGl2ZUxpdGU7JGjNj19pbXBvcnRzKFtbXCIuL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanNcIiwgW1tcImRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZVwiLCBbJGjNj19hID0+IChkZWZhdWx0UGFyc2VyRm9yTGFuZ3VhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL2ltcG9ydC1hcmNoaXZlLWxpdGUuanNcIiwgW1tcInBhcnNlQXJjaGl2ZVwiLCBbJGjNj19hID0+IChwYXJzZUFyY2hpdmVMaXRlID0gJGjNj19hKV1dLFtcImxvYWRBcmNoaXZlXCIsIFskaM2PX2EgPT4gKGxvYWRBcmNoaXZlTGl0ZSA9ICRozY9fYSldXSxbXCJpbXBvcnRBcmNoaXZlXCIsIFskaM2PX2EgPT4gKGltcG9ydEFyY2hpdmVMaXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Fzc2lnbixjcmVhdGUsZnJlZXplfT1PYmplY3Q7XG5cbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2lnblBhcnNlckZvckxhbmd1YWdlPShvcHRpb25zPXt9KT0+e1xuY29uc3R7cGFyc2VyRm9yTGFuZ3VhZ2U6cGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24sLi4ucmVzdH09b3B0aW9ucztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXJzZXJGb3JMYW5ndWFnZT1mcmVlemUoXG5hc3NpZ24oY3JlYXRlKG51bGwpLGRlZmF1bHRQYXJzZXJGb3JMYW5ndWFnZSxwYXJzZXJGb3JMYW5ndWFnZU9wdGlvbikpO1xuXG5yZXR1cm57Li4ucmVzdCxwYXJzZXJGb3JMYW5ndWFnZX07XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFyc2VBcmNoaXZlPWFzeW5jKFxuYXJjaGl2ZUJ5dGVzLFxuYXJjaGl2ZUxvY2F0aW9uPSc8dW5rbm93bj4nLFxub3B0aW9ucz17fSk9PlxuXG5wYXJzZUFyY2hpdmVMaXRlKFxuYXJjaGl2ZUJ5dGVzLFxuYXJjaGl2ZUxvY2F0aW9uLFxuYXNzaWduUGFyc2VyRm9yTGFuZ3VhZ2Uob3B0aW9ucykpO1xuXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5wYXJzZUFyY2hpdmUocGFyc2VBcmNoaXZlKTtcbmNvbnN0ICAgICAgICBsb2FkQXJjaGl2ZT1hc3luYyhyZWFkUG93ZXJzLGFyY2hpdmVMb2NhdGlvbixvcHRpb25zKT0+XG5sb2FkQXJjaGl2ZUxpdGUoXG5yZWFkUG93ZXJzLFxuYXJjaGl2ZUxvY2F0aW9uLFxuYXNzaWduUGFyc2VyRm9yTGFuZ3VhZ2Uob3B0aW9ucykpO1xuXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5sb2FkQXJjaGl2ZShsb2FkQXJjaGl2ZSk7XG5jb25zdCAgICAgICAgaW1wb3J0QXJjaGl2ZT1hc3luYyhyZWFkUG93ZXJzLGFyY2hpdmVMb2NhdGlvbixvcHRpb25zKT0+XG5pbXBvcnRBcmNoaXZlTGl0ZShcbnJlYWRQb3dlcnMsXG5hcmNoaXZlTG9jYXRpb24sXG5hc3NpZ25QYXJzZXJGb3JMYW5ndWFnZShvcHRpb25zKSk7JGjNj19vbmNlLmltcG9ydEFyY2hpdmUoaW1wb3J0QXJjaGl2ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYXJzZUFyY2hpdmUiOlsicGFyc2VBcmNoaXZlIl0sImxvYWRBcmNoaXZlIjpbImxvYWRBcmNoaXZlIl0sImltcG9ydEFyY2hpdmUiOlsiaW1wb3J0QXJjaGl2ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD+JQfs3DgAANw4AAAyAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvaW1wb3J0LWhvb2suanN7ImltcG9ydHMiOlsiQGVuZG8vdHJhbXBvbGluZSIsIi4vbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzIiwiLi9wb2xpY3kuanMiLCIuL3Bvd2Vycy5qcyJdLCJleHBvcnRzIjpbImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIiLCJtYWtlSW1wb3J0SG9va01ha2VyIiwibWFrZUltcG9ydE5vd0hvb2tNYWtlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3luY1RyYW1wb2xpbmUsc3luY1RyYW1wb2xpbmUscmVzb2x2ZSxhdHRlbnVhdGVNb2R1bGVIb29rLEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5ULGVuZm9yY2VNb2R1bGVQb2xpY3ksdW5wYWNrUmVhZFBvd2VyczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3RyYW1wb2xpbmVcIiwgW1tcImFzeW5jVHJhbXBvbGluZVwiLCBbJGjNj19hID0+IChhc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV0sW1wic3luY1RyYW1wb2xpbmVcIiwgWyRozY9fYSA9PiAoc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV1dXSxbXCIuL25vZGUtbW9kdWxlLXNwZWNpZmllci5qc1wiLCBbW1wicmVzb2x2ZVwiLCBbJGjNj19hID0+IChyZXNvbHZlID0gJGjNj19hKV1dXV0sW1wiLi9wb2xpY3kuanNcIiwgW1tcImF0dGVudWF0ZU1vZHVsZUhvb2tcIiwgWyRozY9fYSA9PiAoYXR0ZW51YXRlTW9kdWxlSG9vayA9ICRozY9fYSldXSxbXCJBVFRFTlVBVE9SU19DT01QQVJUTUVOVFwiLCBbJGjNj19hID0+IChBVFRFTlVBVE9SU19DT01QQVJUTUVOVCA9ICRozY9fYSldXSxbXCJlbmZvcmNlTW9kdWxlUG9saWN5XCIsIFskaM2PX2EgPT4gKGVuZm9yY2VNb2R1bGVQb2xpY3kgPSAkaM2PX2EpXV1dXSxbXCIuL3Bvd2Vycy5qc1wiLCBbW1widW5wYWNrUmVhZFBvd2Vyc1wiLCBbJGjNj19hID0+ICh1bnBhY2tSZWFkUG93ZXJzID0gJGjNj19hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZUltcG9ydE5vd0hvb2tNYWtlciwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUltcG9ydE5vd0hvb2tNYWtlclwifSk7JGjNj19vbmNlLm1ha2VJbXBvcnROb3dIb29rTWFrZXIobWFrZUltcG9ydE5vd0hvb2tNYWtlcik7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3R7ZW50cmllcyxrZXlzLGFzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuY29uc3R7aGFzT3duUHJvcGVydHl9PU9iamVjdC5wcm90b3R5cGU7XG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzPShoYXlzdGFjayxuZWVkbGUpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxoYXlzdGFjayxbbmVlZGxlXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHJlc29sdmVMb2NhdGlvbj0ocmVsLGFicyk9Pm5ldyBVUkwocmVsLGFicykudG9TdHJpbmcoKTtcblxuLy9cbmZ1bmN0aW9uIGdldEltcG9ydHNGcm9tUmVjb3JkKHJlY29yZCl7XG5yZXR1cm4oaGFzKHJlY29yZCwncmVjb3JkJyk/cmVjb3JkLnJlY29yZC5pbXBvcnRzOnJlY29yZC5pbXBvcnRzKXx8W107XG4gfVxuXG4vL1xuLy9cbmNvbnN0IG5vZGVqc0NvbnZlbnRpb25TZWFyY2hTdWZmaXhlcz1bXG4vL1xuJy5qcycsXG4nLmpzb24nLFxuJy5ub2RlJyxcbi8vXG4nL2luZGV4LmpzJyxcbicvaW5kZXguanNvbicsXG4nL2luZGV4Lm5vZGUnXTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBmaW5kUmVkaXJlY3Q9KHtcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbn0pPT5cbntcbmNvbnN0IG1vZHVsZVNwZWNpZmllckxvY2F0aW9uPW5ldyBVUkwoXG5hYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbikuXG5ocmVmO1xuXG4vL1xubGV0IHNvbWVMb2NhdGlvbj1uZXcgVVJMKCcuLycsbW9kdWxlU3BlY2lmaWVyTG9jYXRpb24pLmhyZWY7XG5cbi8vXG4vL1xuXG4vL1xuZm9yKDs7KXtcbmlmKFxuc29tZUxvY2F0aW9uIT09QVRURU5VQVRPUlNfQ09NUEFSVE1FTlQmJlxuc29tZUxvY2F0aW9uIGluIGNvbXBhcnRtZW50cylcbntcbmNvbnN0IGxvY2F0aW9uPXNvbWVMb2NhdGlvbjtcbmNvbnN0IHNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnREZXNjcmlwdG9yc1tsb2NhdGlvbl07XG5pZihjb21wYXJ0bWVudERlc2NyaXB0b3I9PT1zb21lQ29tcGFydG1lbnREZXNjcmlwdG9yKXtcbi8vXG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8vXG4vL1xuaWYoY29tcGFydG1lbnREZXNjcmlwdG9yLmNvbXBhcnRtZW50cy5oYXMobG9jYXRpb24pKXtcbnJldHVybntcbnNwZWNpZmllcjphYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OmNvbXBhcnRtZW50c1tsb2NhdGlvbl19O1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5pZihcbnNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3IuY29tcGFydG1lbnRzLmhhcyhcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5sb2NhdGlvbikpXG5cbntcbmVuZm9yY2VNb2R1bGVQb2xpY3koXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubmFtZSxcbnNvbWVDb21wYXJ0bWVudERlc2NyaXB0b3IsXG57XG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGltcG9ydCBob29rLiAke3EoYWJzb2x1dGVNb2R1bGVTcGVjaWZpZXIpfSBpcyBwYXJ0IG9mIHRoZSBjb21wYXJ0bWVudCBtYXAgYW5kIHJlc29sdmVzIHRvICR7bG9jYXRpb259YH0pO1xuXG5cbnJldHVybntcbnNwZWNpZmllcjphYnNvbHV0ZU1vZHVsZVNwZWNpZmllcixcbmNvbXBhcnRtZW50OmNvbXBhcnRtZW50c1tsb2NhdGlvbl19O1xuXG4gfVxuXG50aHJvdyBuZXcgRXJyb3IoIGBDb3VsZCBub3QgaW1wb3J0IG1vZHVsZTogJHtxKGFic29sdXRlTW9kdWxlU3BlY2lmaWVyKX1gKTtcbiB9ZWxzZXtcbi8vXG5jb25zdCBwYXJlbnRMb2NhdGlvbj1uZXcgVVJMKCcuLi8nLHNvbWVMb2NhdGlvbikuaHJlZjtcblxuLy9cbmlmKHBhcmVudExvY2F0aW9uPT09c29tZUxvY2F0aW9uKXtcbnRocm93IG5ldyBFcnJvcihcbiBgQ291bGQgbm90IGltcG9ydCB1bmtub3duIG1vZHVsZTogJHtxKGFic29sdXRlTW9kdWxlU3BlY2lmaWVyKX1gKTtcblxuIH1cblxuc29tZUxvY2F0aW9uPXBhcmVudExvY2F0aW9uO1xuIH1cbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBleGl0TW9kdWxlSW1wb3J0SG9va01ha2VyPSh7XG5tb2R1bGVzPXVuZGVmaW5lZCxcbmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZCxcbmVudHJ5Q29tcGFydG1lbnROYW1lfSk9Plxue1xuaWYoIW1vZHVsZXMmJiFleGl0TW9kdWxlSW1wb3J0SG9vayl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbnJldHVybiBhc3luYyhzcGVjaWZpZXIpPT57XG5pZihtb2R1bGVzJiZoYXMobW9kdWxlcyxzcGVjaWZpZXIpKXtcbmNvbnN0IG5zPW1vZHVsZXNbc3BlY2lmaWVyXTtcbnJldHVybiBmcmVlemUoe1xuaW1wb3J0czpbXSxcbmV4cG9ydHM6bnM/a2V5cyhucyk6W10sXG5leGVjdXRlOihtb2R1bGVFeHBvcnRzKT0+e1xubW9kdWxlRXhwb3J0cy5kZWZhdWx0PW5zO1xuYXNzaWduKG1vZHVsZUV4cG9ydHMsbnMpO1xuIH19KTtcblxuIH1cbmlmKGV4aXRNb2R1bGVJbXBvcnRIb29rKXtcbi8vXG4vL1xuLy9cbnJldHVybiBleGl0TW9kdWxlSW1wb3J0SG9vayhzcGVjaWZpZXIsZW50cnlDb21wYXJ0bWVudE5hbWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5leGl0TW9kdWxlSW1wb3J0SG9va01ha2VyKGV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIpO1xuY29uc3Qgbm9taW5hdGVDYW5kaWRhdGVzPShtb2R1bGVTcGVjaWZpZXIsc2VhcmNoU3VmZml4ZXMpPT57XG4vL1xuLy9cbmNvbnN0IGNhbmRpZGF0ZXM9W21vZHVsZVNwZWNpZmllcl07XG5mb3IoY29uc3QgY2FuZGlkYXRlU3VmZml4IG9mIHNlYXJjaFN1ZmZpeGVzKXtcbmNhbmRpZGF0ZXMucHVzaCggYCR7bW9kdWxlU3BlY2lmaWVyfSR7Y2FuZGlkYXRlU3VmZml4fWApO1xuIH1cbnJldHVybiBjYW5kaWRhdGVzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbipjaG9vc2VNb2R1bGVEZXNjcmlwdG9yKFxue1xuY2FuZGlkYXRlcyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5jb21wdXRlU2hhNTEyLFxubW9kdWxlRGVzY3JpcHRvcnMsXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlU291cmNlcyxcbnJlYWRQb3dlcnMsXG5zb3VyY2VNYXBIb29rLFxuc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50fSxcblxue21heWJlUmVhZCxwYXJzZSxzaG91bGREZWZlckVycm9yPSgpPT5mYWxzZX0pXG57XG5mb3IoY29uc3QgY2FuZGlkYXRlU3BlY2lmaWVyIG9mIGNhbmRpZGF0ZXMpe1xuY29uc3QgY2FuZGlkYXRlTW9kdWxlRGVzY3JpcHRvcj1tb2R1bGVEZXNjcmlwdG9yc1tjYW5kaWRhdGVTcGVjaWZpZXJdO1xuaWYoY2FuZGlkYXRlTW9kdWxlRGVzY3JpcHRvciE9PXVuZGVmaW5lZCl7XG5jYW5kaWRhdGVNb2R1bGVEZXNjcmlwdG9yLnJldGFpbmVkPXRydWU7XG5jb25zdHtjb21wYXJ0bWVudDpjYW5kaWRhdGVDb21wYXJ0bWVudE5hbWU9cGFja2FnZUxvY2F0aW9ufT1cbmNhbmRpZGF0ZU1vZHVsZURlc2NyaXB0b3I7XG5jb25zdCBjYW5kaWRhdGVDb21wYXJ0bWVudD1jb21wYXJ0bWVudHNbY2FuZGlkYXRlQ29tcGFydG1lbnROYW1lXTtcbmlmKGNhbmRpZGF0ZUNvbXBhcnRtZW50PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBjb21wYXJ0bWVudCBtaXNzaW5nIGZvciBjYW5kaWRhdGUgJHtjYW5kaWRhdGVTcGVjaWZpZXJ9IGluICR7Y2FuZGlkYXRlQ29tcGFydG1lbnROYW1lfWApO1xuXG4gfVxuLy9cbmNvbnN0IGNhbmRpZGF0ZUNvbXBhcnRtZW50RGVzY3JpcHRvcj1cbmNvbXBhcnRtZW50RGVzY3JpcHRvcnNbY2FuZGlkYXRlQ29tcGFydG1lbnROYW1lXTtcbmlmKGNhbmRpZGF0ZUNvbXBhcnRtZW50RGVzY3JpcHRvcj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgY29tcGFydG1lbnREZXNjcmlwdG9yIG1pc3NpbmcgZm9yIGNhbmRpZGF0ZSAke2NhbmRpZGF0ZVNwZWNpZmllcn0gaW4gJHtjYW5kaWRhdGVDb21wYXJ0bWVudE5hbWV9YCk7XG5cbiB9XG5jYW5kaWRhdGVDb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlc1ttb2R1bGVTcGVjaWZpZXJdPVxuY2FuZGlkYXRlTW9kdWxlRGVzY3JpcHRvcjtcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVjb3JkPXtcbnNwZWNpZmllcjpjYW5kaWRhdGVTcGVjaWZpZXIsXG5jb21wYXJ0bWVudDpjYW5kaWRhdGVDb21wYXJ0bWVudH07XG5cbnJldHVybiByZWNvcmQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbW9kdWxlTG9jYXRpb249cmVzb2x2ZUxvY2F0aW9uKGNhbmRpZGF0ZVNwZWNpZmllcixwYWNrYWdlTG9jYXRpb24pO1xuXG4vL1xuLy9cbmNvbnN0IG1vZHVsZUJ5dGVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG55aWVsZCBtYXliZVJlYWQobW9kdWxlTG9jYXRpb24pO1xuXG5cbmlmKG1vZHVsZUJ5dGVzIT09dW5kZWZpbmVkKXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHNvdXJjZU1hcDtcbi8vXG5jb25zdCBlbnZlbG9wZT0vKiAgICAgICAgICAgICAgICAgICAgICAqL1xueWllbGQgcGFyc2UoXG5tb2R1bGVCeXRlcyxcbmNhbmRpZGF0ZVNwZWNpZmllcixcbm1vZHVsZUxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxue1xucmVhZFBvd2VycyxcbnNvdXJjZU1hcEhvb2s6XG5zb3VyY2VNYXBIb29rJiYoXG4obmV4dFNvdXJjZU1hcE9iamVjdCk9PntcbnNvdXJjZU1hcD1KU09OLnN0cmluZ2lmeShuZXh0U291cmNlTWFwT2JqZWN0KTtcbiB9KSxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcn0pO1xuXG5cblxuY29uc3R7XG5wYXJzZXIsXG5ieXRlczp0cmFuc2Zvcm1lZEJ5dGVzLFxucmVjb3JkOmNvbmNyZXRlUmVjb3JkfT1cbmVudmVsb3BlO1xuXG4vL1xuLy9cbmlmKGNhbmRpZGF0ZVNwZWNpZmllciE9PW1vZHVsZVNwZWNpZmllcil7XG5tb2R1bGVEZXNjcmlwdG9yc1ttb2R1bGVTcGVjaWZpZXJdPXtcbnJldGFpbmVkOnRydWUsXG5tb2R1bGU6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuY29tcGFydG1lbnQ6cGFja2FnZUxvY2F0aW9ufTtcblxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY29yZD17XG5yZWNvcmQ6Y29uY3JldGVSZWNvcmQsXG5zcGVjaWZpZXI6Y2FuZGlkYXRlU3BlY2lmaWVyLFxuaW1wb3J0TWV0YTp7dXJsOm1vZHVsZUxvY2F0aW9ufX07XG5cblxubGV0IHNoYTUxMjtcbmlmKGNvbXB1dGVTaGE1MTIhPT11bmRlZmluZWQpe1xuc2hhNTEyPWNvbXB1dGVTaGE1MTIodHJhbnNmb3JtZWRCeXRlcyk7XG5cbmlmKHNvdXJjZU1hcEhvb2shPT11bmRlZmluZWQmJnNvdXJjZU1hcCE9PXVuZGVmaW5lZCl7XG5zb3VyY2VNYXBIb29rKHNvdXJjZU1hcCx7XG5jb21wYXJ0bWVudDpwYWNrYWdlTG9jYXRpb24sXG5tb2R1bGU6Y2FuZGlkYXRlU3BlY2lmaWVyLFxubG9jYXRpb246bW9kdWxlTG9jYXRpb24sXG5zaGE1MTJ9KTtcblxuIH1cbiB9XG5cbmNvbnN0IHBhY2thZ2VSZWxhdGl2ZUxvY2F0aW9uPW1vZHVsZUxvY2F0aW9uLnNsaWNlKFxucGFja2FnZUxvY2F0aW9uLmxlbmd0aCk7XG5cbnBhY2thZ2VTb3VyY2VzW2NhbmRpZGF0ZVNwZWNpZmllcl09e1xubG9jYXRpb246cGFja2FnZVJlbGF0aXZlTG9jYXRpb24sXG5zb3VyY2VMb2NhdGlvbjptb2R1bGVMb2NhdGlvbixcbnBhcnNlcixcbmJ5dGVzOnRyYW5zZm9ybWVkQnl0ZXMsXG5yZWNvcmQ6Y29uY3JldGVSZWNvcmQsXG5zaGE1MTJ9O1xuXG5pZighc2hvdWxkRGVmZXJFcnJvcihwYXJzZXIpKXtcbmZvcihjb25zdCBpbXBvcnRTcGVjaWZpZXIgb2YgZ2V0SW1wb3J0c0Zyb21SZWNvcmQocmVjb3JkKSl7XG5zdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQocGFja2FnZUxvY2F0aW9uKS5hZGQoXG5yZXNvbHZlKGltcG9ydFNwZWNpZmllcixtb2R1bGVTcGVjaWZpZXIpKTtcblxuIH1cbiB9XG5cbnJldHVybiByZWNvcmQ7XG4gfVxuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW1wb3J0SG9va01ha2VyPShcbnJlYWRQb3dlcnMsXG5iYXNlTG9jYXRpb24sXG57XG5zb3VyY2VzPWNyZWF0ZShudWxsKSxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnM9Y3JlYXRlKG51bGwpLFxuYXJjaGl2ZU9ubHk9ZmFsc2UsXG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbnNlYXJjaFN1ZmZpeGVzPW5vZGVqc0NvbnZlbnRpb25TZWFyY2hTdWZmaXhlcyxcbnNvdXJjZU1hcEhvb2s9dW5kZWZpbmVkLFxuZW50cnlDb21wYXJ0bWVudE5hbWUsXG5lbnRyeU1vZHVsZVNwZWNpZmllcixcbmV4aXRNb2R1bGVJbXBvcnRIb29rPXVuZGVmaW5lZH0pPT5cblxue1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaWN0bHlSZXF1aXJlZD1uZXcgTWFwKFtcbltlbnRyeUNvbXBhcnRtZW50TmFtZSxuZXcgU2V0KFtlbnRyeU1vZHVsZVNwZWNpZmllcl0pXV0pO1xuXG5cbi8qXG5cbiAgICovXG5jb25zdCBzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQ9KGNvbXBhcnRtZW50TmFtZSk9PntcbmxldCBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ9c3RyaWN0bHlSZXF1aXJlZC5nZXQoY29tcGFydG1lbnROYW1lKTtcbmlmKGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkO1xuIH1cbmNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZD1uZXcgU2V0KCk7XG5zdHJpY3RseVJlcXVpcmVkLnNldChjb21wYXJ0bWVudE5hbWUsY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkKTtcbnJldHVybiBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ7XG4gfTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZUltcG9ydEhvb2s9KHtcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VOYW1lOl9wYWNrYWdlTmFtZSxcbmF0dGVudWF0b3JzLFxucGFyc2UsXG5zaG91bGREZWZlckVycm9yLFxuY29tcGFydG1lbnRzfSk9Plxue1xuLy9cbnBhY2thZ2VMb2NhdGlvbj1yZXNvbHZlTG9jYXRpb24ocGFja2FnZUxvY2F0aW9uLGJhc2VMb2NhdGlvbik7XG5jb25zdCBwYWNrYWdlU291cmNlcz1zb3VyY2VzW3BhY2thZ2VMb2NhdGlvbl18fGNyZWF0ZShudWxsKTtcbnNvdXJjZXNbcGFja2FnZUxvY2F0aW9uXT1wYWNrYWdlU291cmNlcztcbmNvbnN0IGNvbXBhcnRtZW50RGVzY3JpcHRvcj1jb21wYXJ0bWVudERlc2NyaXB0b3JzW3BhY2thZ2VMb2NhdGlvbl18fHt9O1xuY29uc3R7bW9kdWxlczptb2R1bGVEZXNjcmlwdG9ycz1jcmVhdGUobnVsbCl9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzPW1vZHVsZURlc2NyaXB0b3JzO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgZGVmZXJFcnJvcj0oc3BlY2lmaWVyLGVycm9yKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5pZihzdHJpY3RseVJlcXVpcmVkRm9yQ29tcGFydG1lbnQocGFja2FnZUxvY2F0aW9uKS5oYXMoc3BlY2lmaWVyKSl7XG50aHJvdyBlcnJvcjtcbiB9XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcmVjb3JkPWZyZWV6ZSh7XG5pbXBvcnRzOltdLFxuZXhwb3J0czpbXSxcbmV4ZWN1dGU6KCk9PntcbnRocm93IGVycm9yO1xuIH19KTtcblxucGFja2FnZVNvdXJjZXNbc3BlY2lmaWVyXT17XG5kZWZlcnJlZEVycm9yOmVycm9yLm1lc3NhZ2V9O1xuXG5cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0SG9vaz1hc3luYyhtb2R1bGVTcGVjaWZpZXIpPT57XG5jb21wYXJ0bWVudERlc2NyaXB0b3IucmV0YWluZWQ9dHJ1ZTtcblxuLy9cbmF3YWl0IG51bGw7XG5cbi8vXG4vL1xudHJ5e1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbmlmKG1vZHVsZVNwZWNpZmllciE9PScuJyYmIW1vZHVsZVNwZWNpZmllci5zdGFydHNXaXRoKCcuLycpKXtcbmlmKGV4aXRNb2R1bGVJbXBvcnRIb29rKXtcbmNvbnN0IHJlY29yZD1hd2FpdCBleGl0TW9kdWxlSW1wb3J0SG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbik7XG5cbmlmKHJlY29yZCl7XG4vL1xuLy9cbmVuZm9yY2VNb2R1bGVQb2xpY3kobW9kdWxlU3BlY2lmaWVyLGNvbXBhcnRtZW50RGVzY3JpcHRvcix7XG5leGl0OnRydWUsXG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGxvYWRpbmcuICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IHdhcyBub3QgaW4gdGhlIGNvbXBhcnRtZW50IG1hcCBhbmQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBsb2FkIGl0IGFzIGEgYnVpbHRpbmB9KTtcblxuaWYoYXJjaGl2ZU9ubHkpe1xuLy9cbi8vXG5yZXR1cm4gZnJlZXplKHtpbXBvcnRzOltdLGV4cG9ydHM6W10sZXhlY3V0ZSgpeyB9fSk7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgYXR0ZW51YXRlZFJlY29yZD1hd2FpdCBhdHRlbnVhdGVNb2R1bGVIb29rKFxubW9kdWxlU3BlY2lmaWVyLFxucmVjb3JkLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzKTtcblxucmV0dXJuIGF0dGVudWF0ZWRSZWNvcmQ7XG4gfVxuIH1cbnRocm93IEVycm9yKFxuIGBDYW5ub3QgZmluZCBleHRlcm5hbCBtb2R1bGUgJHtxKFxubW9kdWxlU3BlY2lmaWVyKVxuIH0gaW4gcGFja2FnZSAke3BhY2thZ2VMb2NhdGlvbn1gKTtcblxuIH1cblxuY29uc3R7bWF5YmVSZWFkfT11bnBhY2tSZWFkUG93ZXJzKHJlYWRQb3dlcnMpO1xuXG5jb25zdCBjYW5kaWRhdGVzPW5vbWluYXRlQ2FuZGlkYXRlcyhtb2R1bGVTcGVjaWZpZXIsc2VhcmNoU3VmZml4ZXMpO1xuXG5jb25zdCByZWNvcmQ9YXdhaXQgYXN5bmNUcmFtcG9saW5lKFxuY2hvb3NlTW9kdWxlRGVzY3JpcHRvcixcbntcbmNhbmRpZGF0ZXMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzLFxuY29tcGFydG1lbnRzLFxuY29tcHV0ZVNoYTUxMixcbm1vZHVsZURlc2NyaXB0b3JzLFxubW9kdWxlU3BlY2lmaWVyLFxucGFja2FnZUxvY2F0aW9uLFxucGFja2FnZVNvdXJjZXMsXG5yZWFkUG93ZXJzLFxuc291cmNlTWFwSG9vayxcbnN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudH0sXG5cbnttYXliZVJlYWQscGFyc2Usc2hvdWxkRGVmZXJFcnJvcn0pO1xuXG5cbmlmKHJlY29yZCl7XG5yZXR1cm4gcmVjb3JkO1xuIH1cblxudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBmaW5kIGZpbGUgZm9yIGludGVybmFsIG1vZHVsZSAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfSAod2l0aCBjYW5kaWRhdGVzICR7Y2FuZGlkYXRlcy5cbm1hcCgoeCk9PnEoeCkpLlxuam9pbignLCAnKSB9KSBpbiBwYWNrYWdlICR7cGFja2FnZUxvY2F0aW9ufWApO1xuXG4gfWNhdGNoKGVycm9yKXtcbnJldHVybiBkZWZlckVycm9yKG1vZHVsZVNwZWNpZmllcixlcnJvcik7XG4gfVxuIH07XG5yZXR1cm4gaW1wb3J0SG9vaztcbiB9O1xucmV0dXJuIG1ha2VJbXBvcnRIb29rO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUltcG9ydEhvb2tNYWtlcihtYWtlSW1wb3J0SG9va01ha2VyKTtcbmZ1bmN0aW9uICAgICAgICBtYWtlSW1wb3J0Tm93SG9va01ha2VyKFxucmVhZFBvd2VycyxcbmJhc2VMb2NhdGlvbixcbntcbnNvdXJjZXM9Y3JlYXRlKG51bGwpLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycz1jcmVhdGUobnVsbCksXG5jb21wdXRlU2hhNTEyPXVuZGVmaW5lZCxcbnNlYXJjaFN1ZmZpeGVzPW5vZGVqc0NvbnZlbnRpb25TZWFyY2hTdWZmaXhlcyxcbnNvdXJjZU1hcEhvb2s9dW5kZWZpbmVkLFxuZXhpdE1vZHVsZUltcG9ydE5vd0hvb2t9KVxuXG57XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpY3RseVJlcXVpcmVkPW5ldyBNYXAoKTtcblxuLypcblxuICAgKi9cbmNvbnN0IHN0cmljdGx5UmVxdWlyZWRGb3JDb21wYXJ0bWVudD0oY29tcGFydG1lbnROYW1lKT0+e1xubGV0IGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZD1zdHJpY3RseVJlcXVpcmVkLmdldChjb21wYXJ0bWVudE5hbWUpO1xuaWYoY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkIT09dW5kZWZpbmVkKXtcbnJldHVybiBjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQ7XG4gfVxuY29tcGFydG1lbnRTdHJpY3RseVJlcXVpcmVkPW5ldyBTZXQoKTtcbnN0cmljdGx5UmVxdWlyZWQuc2V0KGNvbXBhcnRtZW50TmFtZSxjb21wYXJ0bWVudFN0cmljdGx5UmVxdWlyZWQpO1xucmV0dXJuIGNvbXBhcnRtZW50U3RyaWN0bHlSZXF1aXJlZDtcbiB9O1xuXG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUltcG9ydE5vd0hvb2s9KHtcbnBhY2thZ2VMb2NhdGlvbixcbnBhY2thZ2VOYW1lOl9wYWNrYWdlTmFtZSxcbnBhcnNlLFxuY29tcGFydG1lbnRzfSk9Plxue1xuaWYoISgnaXNTeW5jUGFyc2VyJ2luIHBhcnNlKSl7XG5yZXR1cm4gZnVuY3Rpb24gaW1wb3NzaWJsZVRyYW5zZm9ybUltcG9ydE5vd0hvb2soKXtcbnRocm93IG5ldyBFcnJvcihcbidEeW5hbWljIHJlcXVpcmVzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggc3luY2hyb25vdXMgcGFyc2VycyBhbmQgbm8gYXN5bmNocm9ub3VzIG1vZHVsZSB0cmFuc2Zvcm1zIGluIG9wdGlvbnMnKTtcblxuIH07XG4gfVxuXG5jb25zdCBjb21wYXJ0bWVudERlc2NyaXB0b3I9Y29tcGFydG1lbnREZXNjcmlwdG9yc1twYWNrYWdlTG9jYXRpb25dfHx7fTtcblxucGFja2FnZUxvY2F0aW9uPXJlc29sdmVMb2NhdGlvbihwYWNrYWdlTG9jYXRpb24sYmFzZUxvY2F0aW9uKTtcbmNvbnN0IHBhY2thZ2VTb3VyY2VzPXNvdXJjZXNbcGFja2FnZUxvY2F0aW9uXXx8Y3JlYXRlKG51bGwpO1xuc291cmNlc1twYWNrYWdlTG9jYXRpb25dPXBhY2thZ2VTb3VyY2VzO1xuY29uc3R7XG5tb2R1bGVzOlxubW9kdWxlRGVzY3JpcHRvcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNyZWF0ZShudWxsKX09XG5cbmNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzPW1vZHVsZURlc2NyaXB0b3JzO1xuXG5sZXR7cG9saWN5fT1jb21wYXJ0bWVudERlc2NyaXB0b3I7XG5wb2xpY3k9cG9saWN5fHxjcmVhdGUobnVsbCk7XG5cbi8vXG4vL1xuLy9cbmlmKCdwYWNrYWdlcydpbiBwb2xpY3kmJnR5cGVvZiBwb2xpY3kucGFja2FnZXM9PT0nb2JqZWN0Jyl7XG5mb3IoY29uc3RbcGFja2FnZU5hbWUscGFja2FnZVBvbGljeUl0ZW1db2YgZW50cmllcyhwb2xpY3kucGFja2FnZXMpKXtcbmlmKFxuIShwYWNrYWdlTmFtZSBpbiBjb21wYXJ0bWVudERlc2NyaXB0b3IubW9kdWxlcykmJlxucGFja2FnZU5hbWUgaW4gY29tcGFydG1lbnREZXNjcmlwdG9yLnNjb3BlcyYmXG5wYWNrYWdlUG9saWN5SXRlbSlcbntcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5tb2R1bGVzW3BhY2thZ2VOYW1lXT1cbmNvbXBhcnRtZW50RGVzY3JpcHRvci5zY29wZXNbcGFja2FnZU5hbWVdO1xuIH1cbiB9XG4gfVxuXG5jb25zdHttYXliZVJlYWROb3csaXNBYnNvbHV0ZX09cmVhZFBvd2VycztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0Tm93SG9vaz0obW9kdWxlU3BlY2lmaWVyKT0+e1xuaWYoaXNBYnNvbHV0ZShtb2R1bGVTcGVjaWZpZXIpKXtcbmNvbnN0IHJlY29yZD1maW5kUmVkaXJlY3Qoe1xuY29tcGFydG1lbnREZXNjcmlwdG9yLFxuY29tcGFydG1lbnREZXNjcmlwdG9ycyxcbmNvbXBhcnRtZW50cyxcbmFic29sdXRlTW9kdWxlU3BlY2lmaWVyOm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbn0pO1xuXG5pZihyZWNvcmQpe1xucmV0dXJuIHJlY29yZDtcbiB9XG4gfVxuXG5jb25zdCBjYW5kaWRhdGVzPW5vbWluYXRlQ2FuZGlkYXRlcyhtb2R1bGVTcGVjaWZpZXIsc2VhcmNoU3VmZml4ZXMpO1xuXG5jb25zdCByZWNvcmQ9c3luY1RyYW1wb2xpbmUoXG5jaG9vc2VNb2R1bGVEZXNjcmlwdG9yLFxue1xuY2FuZGlkYXRlcyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcixcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMsXG5jb21wYXJ0bWVudHMsXG5jb21wdXRlU2hhNTEyLFxubW9kdWxlRGVzY3JpcHRvcnMsXG5tb2R1bGVTcGVjaWZpZXIsXG5wYWNrYWdlTG9jYXRpb24sXG5wYWNrYWdlU291cmNlcyxcbnJlYWRQb3dlcnMsXG5zb3VyY2VNYXBIb29rLFxuc3RyaWN0bHlSZXF1aXJlZEZvckNvbXBhcnRtZW50fSxcblxue1xubWF5YmVSZWFkOm1heWJlUmVhZE5vdyxcbnBhcnNlfSk7XG5cblxuXG5pZihyZWNvcmQpe1xucmV0dXJuIHJlY29yZDtcbiB9XG5cbmlmKGV4aXRNb2R1bGVJbXBvcnROb3dIb29rKXtcbi8vXG4vL1xuY29uc3QgZXhpdFJlY29yZD1leGl0TW9kdWxlSW1wb3J0Tm93SG9vayhcbm1vZHVsZVNwZWNpZmllcixcbnBhY2thZ2VMb2NhdGlvbik7XG5cblxuaWYoIWV4aXRSZWNvcmQpe1xudGhyb3cgbmV3IEVycm9yKCBgQ291bGQgbm90IGltcG9ydCBtb2R1bGU6ICR7cShtb2R1bGVTcGVjaWZpZXIpfWApO1xuIH1cblxucmV0dXJuIGV4aXRSZWNvcmQ7XG4gfVxuXG50aHJvdyBuZXcgRXJyb3IoXG4gYENvdWxkIG5vdCBpbXBvcnQgbW9kdWxlOiAke3EoXG5tb2R1bGVTcGVjaWZpZXIpXG4gfTsgdHJ5IHByb3ZpZGluZyBhbiBpbXBvcnROb3dIb29rYCk7XG5cbiB9O1xuXG5yZXR1cm4gaW1wb3J0Tm93SG9vaztcbiB9O1xucmV0dXJuIG1ha2VJbXBvcnROb3dIb29rO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImV4aXRNb2R1bGVJbXBvcnRIb29rTWFrZXIiOlsiZXhpdE1vZHVsZUltcG9ydEhvb2tNYWtlciJdLCJtYWtlSW1wb3J0SG9va01ha2VyIjpbIm1ha2VJbXBvcnRIb29rTWFrZXIiXSwibWFrZUltcG9ydE5vd0hvb2tNYWtlciI6WyJtYWtlSW1wb3J0Tm93SG9va01ha2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEhJcrj+AgAA/gIAACsAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9qc29uLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJwYXJzZUxvY2F0ZWRKc29uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFyc2VMb2NhdGVkSnNvbj0oc291cmNlLGxvY2F0aW9uKT0+e1xudHJ5e1xucmV0dXJuIEpTT04ucGFyc2Uoc291cmNlKTtcbiB9Y2F0Y2goZXJyb3Ipe1xuaWYoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcil7XG50aHJvdyBTeW50YXhFcnJvciggYENhbm5vdCBwYXJzZSBKU09OIGZyb20gJHtsb2NhdGlvbn0sICR7ZXJyb3J9YCk7XG4gfVxudGhyb3cgZXJyb3I7XG4gfVxuIH07JGjNj19vbmNlLnBhcnNlTG9jYXRlZEpzb24ocGFyc2VMb2NhdGVkSnNvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwYXJzZUxvY2F0ZWRKc29uIjpbInBhcnNlTG9jYXRlZEpzb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZhRgzkEeAABBHgAAKwAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2xpbmsuanN7ImltcG9ydHMiOlsiLi9tYXAtcGFyc2VyLmpzIiwiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanMiLCIuL3BvbGljeS5qcyJdLCJleHBvcnRzIjpbImFzc2VtYmxlIiwibGluayJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWFwUGFyc2VycyxyZXNvbHZlRmFsbGJhY2ssQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQsYXR0ZW51YXRlR2xvYmFscyxlbmZvcmNlTW9kdWxlUG9saWN5LG1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXI7JGjNj19pbXBvcnRzKFtbXCIuL21hcC1wYXJzZXIuanNcIiwgW1tcIm1ha2VNYXBQYXJzZXJzXCIsIFskaM2PX2EgPT4gKG1ha2VNYXBQYXJzZXJzID0gJGjNj19hKV1dXV0sW1wiLi9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanNcIiwgW1tcInJlc29sdmVcIiwgWyRozY9fYSA9PiAocmVzb2x2ZUZhbGxiYWNrID0gJGjNj19hKV1dXV0sW1wiLi9wb2xpY3kuanNcIiwgW1tcIkFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UXCIsIFskaM2PX2EgPT4gKEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UID0gJGjNj19hKV1dLFtcImF0dGVudWF0ZUdsb2JhbHNcIiwgWyRozY9fYSA9PiAoYXR0ZW51YXRlR2xvYmFscyA9ICRozY9fYSldXSxbXCJlbmZvcmNlTW9kdWxlUG9saWN5XCIsIFskaM2PX2EgPT4gKGVuZm9yY2VNb2R1bGVQb2xpY3kgPSAkaM2PX2EpXV0sW1wibWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlclwiLCBbJGjNj19hID0+IChtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHthc3NpZ24sY3JlYXRlLGVudHJpZXMsZnJlZXplfT1PYmplY3Q7XG5jb25zdHtoYXNPd25Qcm9wZXJ0eX09T2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7YWxsU2V0dGxlZH09UHJvbWlzZTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHByb21pc2VBbGxTZXR0bGVkPWFsbFNldHRsZWQuYmluZChQcm9taXNlKTtcblxuY29uc3QgZGVmYXVsdENvbXBhcnRtZW50PUNvbXBhcnRtZW50O1xuXG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaGFzPShvYmplY3Qsa2V5KT0+YXBwbHkoaGFzT3duUHJvcGVydHksb2JqZWN0LFtrZXldKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHRyaW1Nb2R1bGVTcGVjaWZpZXJQcmVmaXg9KG1vZHVsZVNwZWNpZmllcixwcmVmaXgpPT57XG5pZihtb2R1bGVTcGVjaWZpZXI9PT1wcmVmaXgpe1xucmV0dXJuJy4nO1xuIH1cbmlmKG1vZHVsZVNwZWNpZmllci5zdGFydHNXaXRoKCBgJHtwcmVmaXh9L2ApKXtcbnJldHVybiBgLi8ke21vZHVsZVNwZWNpZmllci5zbGljZShwcmVmaXgubGVuZ3RoKzEpfWA7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTW9kdWxlTWFwSG9vaz0oXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudE5hbWUsXG5tb2R1bGVEZXNjcmlwdG9ycyxcbnNjb3BlRGVzY3JpcHRvcnMpPT5cbntcbi8qXG5cblxuICAgKi9cbmNvbnN0IG1vZHVsZU1hcEhvb2s9KG1vZHVsZVNwZWNpZmllcik9PntcbmNvbXBhcnRtZW50RGVzY3JpcHRvci5yZXRhaW5lZD10cnVlO1xuXG5jb25zdCBtb2R1bGVEZXNjcmlwdG9yPW1vZHVsZURlc2NyaXB0b3JzW21vZHVsZVNwZWNpZmllcl07XG5pZihtb2R1bGVEZXNjcmlwdG9yIT09dW5kZWZpbmVkKXtcbm1vZHVsZURlc2NyaXB0b3IucmV0YWluZWQ9dHJ1ZTtcblxuLy9cbi8vXG5jb25zdHtcbmNvbXBhcnRtZW50OmZvcmVpZ25Db21wYXJ0bWVudE5hbWU9Y29tcGFydG1lbnROYW1lLFxubW9kdWxlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXIsXG5leGl0fT1cbm1vZHVsZURlc2NyaXB0b3I7XG5pZihleGl0IT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7Ly9cbiB9XG5pZihmb3JlaWduTW9kdWxlU3BlY2lmaWVyIT09dW5kZWZpbmVkKXtcbi8vXG5pZighbW9kdWxlU3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4vJykpe1xuLy9cbi8vXG5lbmZvcmNlTW9kdWxlUG9saWN5KG1vZHVsZVNwZWNpZmllcixjb21wYXJ0bWVudERlc2NyaXB0b3Ise1xuZXhpdDpmYWxzZSxcbmVycm9ySGludDpcbidUaGlzIGNoZWNrIHNob3VsZCBub3QgYmUgcmVhY2hhYmxlLiBJZiB5b3Ugc2VlIHRoaXMgZXJyb3IsIHBsZWFzZSBmaWxlIGFuIGlzc3VlLid9KTtcblxuIH1cblxuY29uc3QgZm9yZWlnbkNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tmb3JlaWduQ29tcGFydG1lbnROYW1lXTtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIG1pc3NpbmcgY29tcGFydG1lbnQgJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9fWApO1xuXG4gfVxucmV0dXJue1xuY29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50LFxubmFtZXNwYWNlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXJ9O1xuXG4gfVxuIH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5mb3IoY29uc3Rbc2NvcGVQcmVmaXgsc2NvcGVEZXNjcmlwdG9yXW9mIGVudHJpZXMoc2NvcGVEZXNjcmlwdG9ycykpe1xuY29uc3QgZm9yZWlnbk1vZHVsZVNwZWNpZmllcj10cmltTW9kdWxlU3BlY2lmaWVyUHJlZml4KFxubW9kdWxlU3BlY2lmaWVyLFxuc2NvcGVQcmVmaXgpO1xuXG5cbmlmKGZvcmVpZ25Nb2R1bGVTcGVjaWZpZXIhPT11bmRlZmluZWQpe1xuY29uc3R7Y29tcGFydG1lbnQ6Zm9yZWlnbkNvbXBhcnRtZW50TmFtZX09c2NvcGVEZXNjcmlwdG9yO1xuaWYoZm9yZWlnbkNvbXBhcnRtZW50TmFtZT09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIHNjb3BlICR7c2NvcGVQcmVmaXh9IGR1ZSB0byBtaXNzaW5nIFwiY29tcGFydG1lbnRcIiBwcm9wZXJ0eWApO1xuXG4gfVxuY29uc3QgZm9yZWlnbkNvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tmb3JlaWduQ29tcGFydG1lbnROYW1lXTtcbmlmKGZvcmVpZ25Db21wYXJ0bWVudD09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcihcbiBgQ2Fubm90IGltcG9ydCBmcm9tIG1pc3NpbmcgY29tcGFydG1lbnQgJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9YCk7XG5cbiB9XG5cbmVuZm9yY2VNb2R1bGVQb2xpY3koc2NvcGVQcmVmaXgsY29tcGFydG1lbnREZXNjcmlwdG9yLHtcbmV4aXQ6ZmFsc2UsXG5lcnJvckhpbnQ6IGBCbG9ja2VkIGluIGxpbmtpbmcuICR7cShcbm1vZHVsZVNwZWNpZmllcilcbiB9IGlzIHBhcnQgb2YgdGhlIGNvbXBhcnRtZW50IG1hcCBhbmQgcmVzb2x2ZXMgdG8gJHtxKFxuZm9yZWlnbkNvbXBhcnRtZW50TmFtZSlcbiB9LmB9KTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5tb2R1bGVEZXNjcmlwdG9yc1ttb2R1bGVTcGVjaWZpZXJdPXtcbnJldGFpbmVkOnRydWUsXG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnROYW1lLFxubW9kdWxlOmZvcmVpZ25Nb2R1bGVTcGVjaWZpZXJ9O1xuXG5yZXR1cm57XG5jb21wYXJ0bWVudDpmb3JlaWduQ29tcGFydG1lbnQsXG5uYW1lc3BhY2U6Zm9yZWlnbk1vZHVsZVNwZWNpZmllcn07XG5cbiB9XG4gfVxuXG4vL1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcblxucmV0dXJuIG1vZHVsZU1hcEhvb2s7XG4gfTtcblxuLypcblxuICovXG5jb25zdCBpbXBvc3NpYmxlSW1wb3J0Tm93SG9va01ha2VyPSgpPT57XG5yZXR1cm4gZnVuY3Rpb24gaW1wb3NzaWJsZUltcG9ydE5vd0hvb2soKXtcbnRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgcmVhZCBwb3dlcnMgZG8gbm90IHN1cHBvcnQgZHluYW1pYyByZXF1aXJlcycpO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGluaz0oXG57ZW50cnksY29tcGFydG1lbnRzOmNvbXBhcnRtZW50RGVzY3JpcHRvcnN9LFxub3B0aW9ucyk9Plxue1xuY29uc3R7XG5yZXNvbHZlPXJlc29sdmVGYWxsYmFjayxcbm1ha2VJbXBvcnRIb29rLFxubWFrZUltcG9ydE5vd0hvb2s9aW1wb3NzaWJsZUltcG9ydE5vd0hvb2tNYWtlcixcbnBhcnNlckZvckxhbmd1YWdlOnBhcnNlckZvckxhbmd1YWdlT3B0aW9uPXt9LFxuZ2xvYmFscz17fSxcbnRyYW5zZm9ybXM9W10sXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXMsXG5fX3NoaW1UcmFuc2Zvcm1zX189W10sXG5hcmNoaXZlT25seT1mYWxzZSxcbkNvbXBhcnRtZW50PWRlZmF1bHRDb21wYXJ0bWVudH09XG5vcHRpb25zO1xuXG5jb25zdHtjb21wYXJ0bWVudDplbnRyeUNvbXBhcnRtZW50TmFtZX09ZW50cnk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29tcGFydG1lbnRzPWNyZWF0ZShudWxsKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGF0dGVudWF0b3JzPW1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIoXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3JzKTtcblxuXG5jb25zdCBwZW5kaW5nSm9icz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhcnNlckZvckxhbmd1YWdlPWZyZWV6ZShcbmFzc2lnbihjcmVhdGUobnVsbCkscGFyc2VyRm9yTGFuZ3VhZ2VPcHRpb24pKTtcblxuXG5jb25zdCBtYXBQYXJzZXJzPW1ha2VNYXBQYXJzZXJzKHtcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zfSk7XG5cblxuZm9yKGNvbnN0W2NvbXBhcnRtZW50TmFtZSxjb21wYXJ0bWVudERlc2NyaXB0b3Jdb2YgZW50cmllcyhcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMpKVxue1xuY29uc3R7XG5sb2NhdGlvbixcbm5hbWUsXG5wYXJzZXJzOmxhbmd1YWdlRm9yRXh0ZW5zaW9uPXt9LFxudHlwZXM6bGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXI9e319PVxuY29tcGFydG1lbnREZXNjcmlwdG9yO1xuXG4vL1xuLy9cbmNvbnN0e3Njb3Blczpfc2NvcGVzLG1vZHVsZXM6X21vZHVsZXN9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmNvbnN0IG1vZHVsZXM9X21vZHVsZXN8fGNyZWF0ZShudWxsKTtcbmNvbnN0IHNjb3Blcz1fc2NvcGVzfHxjcmVhdGUobnVsbCk7XG5cbi8vXG4vL1xuY29tcGFydG1lbnREZXNjcmlwdG9yLm1vZHVsZXM9bW9kdWxlcztcblxuLy9cbi8vXG5jb25zdCBwYXJzZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFwUGFyc2VycyhsYW5ndWFnZUZvckV4dGVuc2lvbixsYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcik7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2hvdWxkRGVmZXJFcnJvcj0obGFuZ3VhZ2UpPT57XG5pZihsYW5ndWFnZSYmaGFzKHBhcnNlckZvckxhbmd1YWdlLGxhbmd1YWdlKSl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcGFyc2VyRm9yTGFuZ3VhZ2VbbGFuZ3VhZ2VdLlxuaGV1cmlzdGljSW1wb3J0cyk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfTtcblxuLy9cbi8vXG5jb25zdCByZXNvbHZlSG9vaz1yZXNvbHZlO1xuY29uc3QgaW1wb3J0SG9vaz1tYWtlSW1wb3J0SG9vayh7XG5wYWNrYWdlTG9jYXRpb246bG9jYXRpb24sXG5wYWNrYWdlTmFtZTpuYW1lLFxuYXR0ZW51YXRvcnMsXG5wYXJzZSxcbnNob3VsZERlZmVyRXJyb3IsXG5jb21wYXJ0bWVudHN9KTtcblxuXG5jb25zdCBpbXBvcnROb3dIb29rPW1ha2VJbXBvcnROb3dIb29rKHtcbnBhY2thZ2VMb2NhdGlvbjpsb2NhdGlvbixcbnBhY2thZ2VOYW1lOm5hbWUsXG5wYXJzZSxcbmNvbXBhcnRtZW50c30pO1xuXG5cbmNvbnN0IG1vZHVsZU1hcEhvb2s9bWFrZU1vZHVsZU1hcEhvb2soXG5jb21wYXJ0bWVudERlc2NyaXB0b3IsXG5jb21wYXJ0bWVudHMsXG5jb21wYXJ0bWVudE5hbWUsXG5tb2R1bGVzLFxuc2NvcGVzKTtcblxuXG5jb25zdCBjb21wYXJ0bWVudD1uZXcgQ29tcGFydG1lbnQoe1xubmFtZTpsb2NhdGlvbixcbnJlc29sdmVIb29rLFxuaW1wb3J0SG9vayxcbmltcG9ydE5vd0hvb2ssXG5tb2R1bGVNYXBIb29rLFxudHJhbnNmb3Jtcyxcbl9fc2hpbVRyYW5zZm9ybXNfXyxcbl9fb3B0aW9uc19fOnRydWV9KTtcblxuXG5pZighYXJjaGl2ZU9ubHkpe1xuYXR0ZW51YXRlR2xvYmFscyhcbmNvbXBhcnRtZW50Lmdsb2JhbFRoaXMsXG5nbG9iYWxzLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLnBvbGljeSxcbmF0dGVudWF0b3JzLFxucGVuZGluZ0pvYnMsXG5jb21wYXJ0bWVudERlc2NyaXB0b3IubmFtZSk7XG5cbiB9XG5cbmNvbXBhcnRtZW50c1tjb21wYXJ0bWVudE5hbWVdPWNvbXBhcnRtZW50O1xuIH1cblxuY29uc3QgY29tcGFydG1lbnQ9Y29tcGFydG1lbnRzW2VudHJ5Q29tcGFydG1lbnROYW1lXTtcbmlmKGNvbXBhcnRtZW50PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgYXNzZW1ibGUgY29tcGFydG1lbnQgZ3JhcGggYmVjYXVzZSB0aGUgcm9vdCBjb21wYXJ0bWVudCBuYW1lZCAke3EoXG5lbnRyeUNvbXBhcnRtZW50TmFtZSlcbiB9IGlzIG1pc3NpbmcgZnJvbSB0aGUgY29tcGFydG1lbnQgbWFwYCk7XG5cbiB9XG5jb25zdCBhdHRlbnVhdG9yc0NvbXBhcnRtZW50PWNvbXBhcnRtZW50c1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF07XG5cbnJldHVybntcbmNvbXBhcnRtZW50LFxuY29tcGFydG1lbnRzLFxuYXR0ZW51YXRvcnNDb21wYXJ0bWVudCxcbnBlbmRpbmdKb2JzUHJvbWlzZTpwcm9taXNlQWxsU2V0dGxlZChwZW5kaW5nSm9icykudGhlbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8ocmVzdWx0cyk9PntcbmNvbnN0IGVycm9ycz1yZXN1bHRzLlxuZmlsdGVyKChyZXN1bHQpPT5yZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJykuXG5tYXAoXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhyZXN1bHQpPT5cbnJlc3VsdC5yZWFzb24pO1xuXG5pZihlcnJvcnMubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYEdsb2JhbHMgYXR0ZW51YXRpb24gZXJyb3JzOiAke2Vycm9ycy5cbm1hcCgoZXJyb3IpPT5lcnJvci5tZXNzYWdlKS5cbmpvaW4oJywgJykgfWApO1xuXG4gfVxuIH0pfTtcblxuXG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5saW5rKGxpbmspO1xuY29uc3QgICAgICAgIGFzc2VtYmxlPShjb21wYXJ0bWVudE1hcCxvcHRpb25zKT0+XG5saW5rKGNvbXBhcnRtZW50TWFwLG9wdGlvbnMpLmNvbXBhcnRtZW50OyRozY9fb25jZS5hc3NlbWJsZShhc3NlbWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJsaW5rIjpbImxpbmsiXSwiYXNzZW1ibGUiOlsiYXNzZW1ibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAz9NvFkTAABZEwAAMQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL21hcC1wYXJzZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vdHJhbXBvbGluZSIsIi4vZXh0ZW5zaW9uLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcFBhcnNlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgc3luY1RyYW1wb2xpbmUsYXN5bmNUcmFtcG9saW5lLHBhcnNlRXh0ZW5zaW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vdHJhbXBvbGluZVwiLCBbW1wic3luY1RyYW1wb2xpbmVcIiwgWyRozY9fYSA9PiAoc3luY1RyYW1wb2xpbmUgPSAkaM2PX2EpXV0sW1wiYXN5bmNUcmFtcG9saW5lXCIsIFskaM2PX2EgPT4gKGFzeW5jVHJhbXBvbGluZSA9ICRozY9fYSldXV1dLFtcIi4vZXh0ZW5zaW9uLmpzXCIsIFtbXCJwYXJzZUV4dGVuc2lvblwiLCBbJGjNj19hID0+IChwYXJzZUV4dGVuc2lvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLGtleXMsaGFzT3duUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcbi8vXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBoYXM9KG9iamVjdCxrZXkpPT5hcHBseShoYXNPd25Qcm9wZXJ0eSxvYmplY3QsW2tleV0pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGV4dGVuc2lvbkltcGxpZXNMYW5ndWFnZT0oZXh0ZW5zaW9uKT0+ZXh0ZW5zaW9uIT09J2pzJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFeHRlbnNpb25QYXJzZXI9KFxucHJlZmVyU3luY2hyb25vdXMsXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXMpPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdHJhbnNmb3JtcztcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbipnZXRQYXJzZXJHZW5lcmF0b3IoXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucylcbntcbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IGxhbmd1YWdlO1xuY29uc3QgZXh0ZW5zaW9uPXBhcnNlRXh0ZW5zaW9uKGxvY2F0aW9uKTtcblxuaWYoXG4hZXh0ZW5zaW9uSW1wbGllc0xhbmd1YWdlKGV4dGVuc2lvbikmJlxuaGFzKGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLHNwZWNpZmllcikpXG57XG5sYW5ndWFnZT1sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcltzcGVjaWZpZXJdO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5sYW5ndWFnZT1sYW5ndWFnZUZvckV4dGVuc2lvbltleHRlbnNpb25dfHxleHRlbnNpb247XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgc291cmNlTWFwO1xuXG5pZihoYXModHJhbnNmb3JtcyxsYW5ndWFnZSkpe1xudHJ5e1xuKHtcbmJ5dGVzLFxucGFyc2VyOmxhbmd1YWdlLFxuc291cmNlTWFwfT1cbnlpZWxkIHRyYW5zZm9ybXNbbGFuZ3VhZ2VdKFxuYnl0ZXMsXG5zcGVjaWZpZXIsXG5sb2NhdGlvbixcbnBhY2thZ2VMb2NhdGlvbixcbntcbi8vXG4vL1xuLy9cbnNvdXJjZU1hcH0pKTtcblxuXG4gfWNhdGNoKGVycil7XG50aHJvdyBFcnJvcihcbiBgRXJyb3IgdHJhbnNmb3JtaW5nICR7cShsYW5ndWFnZSl9IHNvdXJjZSBpbiAke3EobG9jYXRpb24pfTogJHtlcnIubWVzc2FnZX1gLFxue2NhdXNlOmVycn0pO1xuXG4gfVxuIH1cbmlmKCFoYXMocGFyc2VyRm9yTGFuZ3VhZ2UsbGFuZ3VhZ2UpKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgcGFyc2UgbW9kdWxlICR7c3BlY2lmaWVyfSBhdCAke2xvY2F0aW9ufSwgbm8gcGFyc2VyIGNvbmZpZ3VyZWQgZm9yIHRoZSBsYW5ndWFnZSAke2xhbmd1YWdlfWApO1xuXG4gfVxuY29uc3R7cGFyc2V9PXBhcnNlckZvckxhbmd1YWdlW2xhbmd1YWdlXTtcbnJldHVybiBwYXJzZShieXRlcyxzcGVjaWZpZXIsbG9jYXRpb24scGFja2FnZUxvY2F0aW9uLHtcbnNvdXJjZU1hcCxcbi4uLm9wdGlvbnN9KTtcblxuIH1cblxuLypcblxuICAgKi9cbmNvbnN0IHN5bmNQYXJzZXI9KGJ5dGVzLHNwZWNpZmllcixsb2NhdGlvbixwYWNrYWdlTG9jYXRpb24sb3B0aW9ucyk9PntcbmNvbnN0IHJlc3VsdD1zeW5jVHJhbXBvbGluZShcbmdldFBhcnNlckdlbmVyYXRvcixcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG5vcHRpb25zKTtcblxuaWYoJ3RoZW4naW4gcmVzdWx0JiZ0eXBlb2YgcmVzdWx0LnRoZW49PT0nZnVuY3Rpb24nKXtcbnRocm93IG5ldyBUeXBlRXJyb3IoXG4nU3luYyBwYXJzZXIgY2Fubm90IHJldHVybiBhIFRoZW5hYmxlOyBlbnN1cmUgcGFyc2VyIGlzIGFjdHVhbGx5IHN5bmNocm9ub3VzJyk7XG5cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5zeW5jUGFyc2VyLmlzU3luY1BhcnNlcj10cnVlO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXN5bmNQYXJzZXI9YXN5bmMoXG5ieXRlcyxcbnNwZWNpZmllcixcbmxvY2F0aW9uLFxucGFja2FnZUxvY2F0aW9uLFxub3B0aW9ucyk9Plxue1xucmV0dXJuIGFzeW5jVHJhbXBvbGluZShcbmdldFBhcnNlckdlbmVyYXRvcixcbmJ5dGVzLFxuc3BlY2lmaWVyLFxubG9jYXRpb24sXG5wYWNrYWdlTG9jYXRpb24sXG5vcHRpb25zKTtcblxuIH07XG5cbi8vXG4vL1xuLy9cbmlmKHByZWZlclN5bmNocm9ub3VzKXtcbnRyYW5zZm9ybXM9c3luY01vZHVsZVRyYW5zZm9ybXM7XG5yZXR1cm4gc3luY1BhcnNlcjtcbiB9ZWxzZXtcbi8vXG4vL1xudHJhbnNmb3Jtcz17XG4uLi5zeW5jTW9kdWxlVHJhbnNmb3Jtcyxcbi4uLm1vZHVsZVRyYW5zZm9ybXN9O1xuXG5cbnJldHVybiBhc3luY1BhcnNlcjtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIG1hcFBhcnNlcnMoXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zPXt9LFxuc3luY01vZHVsZVRyYW5zZm9ybXM9e30sXG5wcmVmZXJTeW5jaHJvbm91cz1mYWxzZSlcbntcbmNvbnN0IGxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcz1bXTtcbmNvbnN0IHByb2JsZW1zPVtdO1xuZm9yKGNvbnN0W2V4dGVuc2lvbixsYW5ndWFnZV1vZiBlbnRyaWVzKGxhbmd1YWdlRm9yRXh0ZW5zaW9uKSl7XG5pZihoYXMocGFyc2VyRm9yTGFuZ3VhZ2UsbGFuZ3VhZ2UpKXtcbmxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcy5wdXNoKFtleHRlbnNpb24sbGFuZ3VhZ2VdKTtcbiB9ZWxzZXtcbnByb2JsZW1zLnB1c2goIGAke3EobGFuZ3VhZ2UpfSBmb3IgZXh0ZW5zaW9uICR7cShleHRlbnNpb24pfWApO1xuIH1cbiB9XG5pZihwcm9ibGVtcy5sZW5ndGg+MCl7XG50aHJvdyBFcnJvciggYE5vIHBhcnNlciBhdmFpbGFibGUgZm9yIGxhbmd1YWdlOiAke3Byb2JsZW1zLmpvaW4oJywgJyl9YCk7XG4gfVxucmV0dXJuIG1ha2VFeHRlbnNpb25QYXJzZXIoXG5wcmVmZXJTeW5jaHJvbm91cyxcbmZyb21FbnRyaWVzKGxhbmd1YWdlRm9yRXh0ZW5zaW9uRW50cmllcyksXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKTtcblxuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBQYXJzZXJzPSh7XG5wYXJzZXJGb3JMYW5ndWFnZSxcbm1vZHVsZVRyYW5zZm9ybXMsXG5zeW5jTW9kdWxlVHJhbnNmb3Jtc30pPT5cbntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBhc3luY1BhcnNlRm49KGxhbmd1YWdlRm9yRXh0ZW5zaW9uLGxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyKT0+XG5tYXBQYXJzZXJzKFxubGFuZ3VhZ2VGb3JFeHRlbnNpb24sXG5sYW5ndWFnZUZvck1vZHVsZVNwZWNpZmllcixcbnBhcnNlckZvckxhbmd1YWdlLFxubW9kdWxlVHJhbnNmb3JtcyxcbnN5bmNNb2R1bGVUcmFuc2Zvcm1zKTtcblxuXG5pZihtb2R1bGVUcmFuc2Zvcm1zJiZrZXlzKG1vZHVsZVRyYW5zZm9ybXMpLmxlbmd0aD4wKXtcbnJldHVybiBhc3luY1BhcnNlRm47XG4gfVxuXG4vL1xuLy9cbmlmKHZhbHVlcyhwYXJzZXJGb3JMYW5ndWFnZSkuc29tZSgoe3N5bmNocm9ub3VzfSk9PiFzeW5jaHJvbm91cykpe1xucmV0dXJuIGFzeW5jUGFyc2VGbjtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5yZXR1cm4obGFuZ3VhZ2VGb3JFeHRlbnNpb24sbGFuZ3VhZ2VGb3JNb2R1bGVTcGVjaWZpZXIpPT5cbm1hcFBhcnNlcnMoXG5sYW5ndWFnZUZvckV4dGVuc2lvbixcbmxhbmd1YWdlRm9yTW9kdWxlU3BlY2lmaWVyLFxucGFyc2VyRm9yTGFuZ3VhZ2UsXG5tb2R1bGVUcmFuc2Zvcm1zLFxuc3luY01vZHVsZVRyYW5zZm9ybXMsXG50cnVlKTtcblxuIH07JGjNj19vbmNlLm1ha2VNYXBQYXJzZXJzKG1ha2VNYXBQYXJzZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXBQYXJzZXJzIjpbIm1ha2VNYXBQYXJzZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACpLzuR1CgAAdQoAADwAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9ub2RlLW1vZHVsZS1zcGVjaWZpZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImpvaW4iLCJyZWxhdGl2aXplIiwicmVzb2x2ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cbiAqL1xuXG4vL1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNvbHZlPShzb2x1dGlvbixwcm9ibGVtKT0+e1xuZm9yKGNvbnN0IHBhcnQgb2YgcHJvYmxlbSl7XG5pZihwYXJ0PT09Jy4nfHxwYXJ0PT09Jycpe1xuLy9cbiB9ZWxzZSBpZihwYXJ0PT09Jy4uJyl7XG5pZihzb2x1dGlvbi5sZW5ndGg9PT0wKXtcbnJldHVybiBmYWxzZTtcbiB9XG5zb2x1dGlvbi5wb3AoKTtcbiB9ZWxzZXtcbnNvbHV0aW9uLnB1c2gocGFydCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlc29sdmU9KHNwZWMscmVmZXJyZXIpPT57XG5zcGVjPVN0cmluZyhzcGVjfHwnJyk7XG5yZWZlcnJlcj1TdHJpbmcocmVmZXJyZXJ8fCcnKTtcblxuaWYoc3BlYy5zdGFydHNXaXRoKCcvJykpe1xudGhyb3cgRXJyb3IoIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gbXVzdCBub3QgYmVnaW4gd2l0aCBcIi9cImApO1xuIH1cbmlmKCFyZWZlcnJlci5zdGFydHNXaXRoKCcuLycpKXtcbnRocm93IEVycm9yKCBgTW9kdWxlIHJlZmVycmVyICR7cShyZWZlcnJlcil9IG11c3QgYmVnaW4gd2l0aCBcIi4vXCJgKTtcbiB9XG5cbmNvbnN0IHNwZWNQYXJ0cz1zcGVjLnNwbGl0KCcvJyk7XG5jb25zdCBzb2x1dGlvbj1bXTtcbmNvbnN0IHByb2JsZW09W107XG5pZihzcGVjUGFydHNbMF09PT0nLid8fHNwZWNQYXJ0c1swXT09PScuLicpe1xuY29uc3QgcmVmZXJyZXJQYXJ0cz1yZWZlcnJlci5zcGxpdCgnLycpO1xucHJvYmxlbS5wdXNoKC4uLnJlZmVycmVyUGFydHMpO1xucHJvYmxlbS5wb3AoKTtcbnNvbHV0aW9uLnB1c2goJy4nKTtcbiB9XG5wcm9ibGVtLnB1c2goLi4uc3BlY1BhcnRzKTtcblxuaWYoIXNvbHZlKHNvbHV0aW9uLHByb2JsZW0pKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gdmlhIHJlZmVycmVyICR7cShcbnJlZmVycmVyKVxuIH0gbXVzdCBub3QgdHJhdmVyc2UgYmVoaW5kIGFuIGVtcHR5IHBhdGhgKTtcblxuIH1cblxucmV0dXJuIHNvbHV0aW9uLmpvaW4oJy8nKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5yZXNvbHZlKHJlc29sdmUpO1xuY29uc3QgICAgICAgIGpvaW49KGJhc2Usc3BlYyk9PntcbnNwZWM9U3RyaW5nKHNwZWN8fCcnKTtcbmJhc2U9U3RyaW5nKGJhc2V8fCcnKTtcblxuY29uc3Qgc3BlY1BhcnRzPXNwZWMuc3BsaXQoJy8nKTtcbmNvbnN0IGJhc2VQYXJ0cz1iYXNlLnNwbGl0KCcvJyk7XG5cbmlmKHNwZWNQYXJ0cy5sZW5ndGg+MSYmc3BlY1BhcnRzWzBdPT09Jycpe1xudGhyb3cgRXJyb3IoIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gbXVzdCBub3Qgc3RhcnQgd2l0aCBcIi9cImApO1xuIH1cbmlmKGJhc2VQYXJ0c1swXT09PScuJ3x8YmFzZVBhcnRzWzBdPT09Jy4uJyl7XG50aHJvdyBFcnJvciggYEV4dGVybmFsIG1vZHVsZSBzcGVjaWZpZXIgJHtxKGJhc2UpfSBtdXN0IGJlIGFic29sdXRlYCk7XG4gfVxuaWYoc3BlY1BhcnRzWzBdIT09Jy4nKXtcbnRocm93IEVycm9yKCBgSW50ZXJuYWwgbW9kdWxlIHNwZWNpZmllciAke3Eoc3BlYyl9IG11c3QgYmUgcmVsYXRpdmVgKTtcbiB9XG5cbmNvbnN0IHNvbHV0aW9uPVtdO1xuaWYoIXNvbHZlKHNvbHV0aW9uLHNwZWNQYXJ0cykpe1xudGhyb3cgRXJyb3IoXG4gYE1vZHVsZSBzcGVjaWZpZXIgJHtxKHNwZWMpfSB2aWEgYmFzZSAke3EoXG5iYXNlKVxuIH0gbXVzdCBub3QgcmVmZXIgdG8gYSBtb2R1bGUgb3V0c2lkZSBvZiB0aGUgYmFzZWApO1xuXG4gfVxuXG5yZXR1cm5bYmFzZSwuLi5zb2x1dGlvbl0uam9pbignLycpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuam9pbihqb2luKTtcbmNvbnN0ICAgICAgICByZWxhdGl2aXplPShzcGVjKT0+e1xuc3BlYz1TdHJpbmcoc3BlY3x8JycpO1xuXG5jb25zdCBzb2x1dGlvbj1bXTtcbmlmKCFzb2x2ZShzb2x1dGlvbixzcGVjLnNwbGl0KCcvJykpKXtcbnRocm93IEVycm9yKFxuIGBNb2R1bGUgc3BlY2lmaWVyICR7cShzcGVjKX0gbXVzdCBub3QgdHJhdmVyc2UgYmVoaW5kIGFuIGVtcHR5IHBhdGhgKTtcblxuIH1cblxucmV0dXJuWycuJywuLi5zb2x1dGlvbl0uam9pbignLycpO1xuIH07JGjNj19vbmNlLnJlbGF0aXZpemUocmVsYXRpdml6ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZXNvbHZlIjpbInJlc29sdmUiXSwiam9pbiI6WyJqb2luIl0sInJlbGF0aXZpemUiOlsicmVsYXRpdml6ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABPTL0h4AQAAOAEAAAyAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtYnl0ZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImRlZmF1bHQiLCJwYXJzZUJ5dGVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIHBhcnNlQnl0ZXM9KGJ5dGVzLF9zcGVjaWZpZXIsX2xvY2F0aW9uLF9wYWNrYWdlTG9jYXRpb24pPT57XG4vL1xuY29uc3QgYnVmZmVyPW5ldyBBcnJheUJ1ZmZlcihieXRlcy5sZW5ndGgpO1xuY29uc3QgYnl0ZXNWaWV3PW5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5ieXRlc1ZpZXcuc2V0KGJ5dGVzKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0cz1mcmVlemUoW10pO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZXhlY3V0ZT0oZXhwb3J0cyk9PntcbmV4cG9ydHMuZGVmYXVsdD1idWZmZXI7XG4gfTtcblxucmV0dXJue1xucGFyc2VyOidieXRlcycsXG5ieXRlcyxcbnJlY29yZDpmcmVlemUoe1xuaW1wb3J0cyxcbmV4cG9ydHM6ZnJlZXplKFsnZGVmYXVsdCddKSxcbmV4ZWN1dGU6ZnJlZXplKGV4ZWN1dGUpfSl9O1xuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZUJ5dGVzKHBhcnNlQnl0ZXMpO1xuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0OntcbnBhcnNlOnBhcnNlQnl0ZXMsXG5oZXVyaXN0aWNJbXBvcnRzOmZhbHNlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VCeXRlcyI6WyJwYXJzZUJ5dGVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAN0SwojIEAAAyBAAAEYAAABAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wYXJzZS1janMtc2hhcmVkLWV4cG9ydC13cmFwcGVyLmpzeyJpbXBvcnRzIjpbIi4vcG93ZXJzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TW9kdWxlUGF0aHMiLCJ3cmFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzLGlzUmVhZE5vd1Bvd2VyczskaM2PX2ltcG9ydHMoW1tcIi4vcG93ZXJzLmpzXCIsIFtbXCJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wc1wiLCBbJGjNj19hID0+IChmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyA9ICRozY9fYSldXSxbXCJpc1JlYWROb3dQb3dlcnNcIiwgWyRozY9fYSA9PiAoaXNSZWFkTm93UG93ZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7ZnJlZXplLGtleXMsY3JlYXRlLGhhc093blByb3BlcnR5LGRlZmluZVByb3BlcnR5fT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGhhcz0ob2JqZWN0LGtleSk9PmFwcGx5KGhhc093blByb3BlcnR5LG9iamVjdCxba2V5XSk7XG5cbi8qXG5cbiAqL1xuY29uc3Qgbm9UcmFpbGluZ1NsYXNoPShwYXRoKT0+e1xuY29uc3QgbD1wYXRoLmxlbmd0aC0xO1xucmV0dXJuIHBhdGhbbF09PT0nXFxcXCd8fHBhdGhbbF09PT0nLyc/cGF0aC5zbGljZSgwLC0xKTpwYXRoO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1vZHVsZVBhdGhzPShyZWFkUG93ZXJzLGxvY2F0aW9uKT0+e1xuaWYoXG5yZWFkUG93ZXJzJiZcbnR5cGVvZiByZWFkUG93ZXJzIT09J2Z1bmN0aW9uJyYmXG5yZWFkUG93ZXJzLmZpbGVVUkxUb1BhdGgpXG57XG5sZXQgZmlsZW5hbWU9bG9jYXRpb247XG5sZXQgZGlybmFtZTtcbnRyeXtcbmRpcm5hbWU9bmV3IFVSTCgnLi8nLGZpbGVuYW1lKS5ocmVmO1xuIH1jYXRjaChfKXtcbnJldHVybntcbmZpbGVuYW1lOm51bGwsXG5kaXJuYW1lOm51bGx9O1xuXG4gfVxuXG5maWxlbmFtZT1yZWFkUG93ZXJzLmZpbGVVUkxUb1BhdGgoZmlsZW5hbWUpLnRvU3RyaW5nKCk7XG5kaXJuYW1lPW5vVHJhaWxpbmdTbGFzaChyZWFkUG93ZXJzLmZpbGVVUkxUb1BhdGgoZGlybmFtZSkudG9TdHJpbmcoKSk7XG5cbnJldHVybntcbmZpbGVuYW1lLFxuZGlybmFtZX07XG5cbiB9ZWxzZXtcbnJldHVybntcbmZpbGVuYW1lOm51bGwsXG5kaXJuYW1lOm51bGx9O1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZ2V0TW9kdWxlUGF0aHMoZ2V0TW9kdWxlUGF0aHMpO1xuY29uc3QgICAgICAgIHdyYXA9KHtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkLFxuY29tcGFydG1lbnQsXG5yZXNvbHZlZEltcG9ydHMsXG5sb2NhdGlvbixcbnJlYWRQb3dlcnN9KT0+XG57XG4vL1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdD1jcmVhdGUoXG5jb21wYXJ0bWVudC5nbG9iYWxUaGlzLk9iamVjdC5wcm90b3R5cGUpO1xuXG5cbi8vXG4vL1xuY29uc3QgcHJvbW90ZVRvTmFtZWRFeHBvcnQ9KHByb3AsdmFsdWUpPT57XG4vL1xuaWYocHJvcCE9PSdkZWZhdWx0Jyl7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZFtwcm9wXT12YWx1ZTtcbiB9XG4gfTtcblxuY29uc3QgcmVkZWZpbmVkPW5ldyBTZXQoKTtcblxuY29uc3Qgb3JpZ2luYWxFeHBvcnRzPW5ldyBQcm94eShtb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0LHtcbnNldChfdGFyZ2V0LHByb3AsdmFsdWUpe1xucHJvbW90ZVRvTmFtZWRFeHBvcnQocHJvcCx2YWx1ZSk7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0W3Byb3BdPXZhbHVlO1xucmV0dXJuIHRydWU7XG4gfSxcbmRlZmluZVByb3BlcnR5KHRhcmdldCxwcm9wLGRlc2NyaXB0b3Ipe1xuaWYoaGFzKGRlc2NyaXB0b3IsJ3ZhbHVlJykpe1xuLy9cbi8vXG5wcm9tb3RlVG9OYW1lZEV4cG9ydChwcm9wLGRlc2NyaXB0b3IudmFsdWUpO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZGVmaW5lUHJvcGVydHkodGFyZ2V0LHByb3AsZGVzY3JpcHRvcik7XG4vL1xuLy9cbnJlZGVmaW5lZC5hZGQocHJvcCk7XG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cblxubGV0IGZpbmFsRXhwb3J0cz1vcmlnaW5hbEV4cG9ydHM7XG5cbmNvbnN0IG1vZHVsZT1mcmVlemUoe1xuZ2V0IGV4cG9ydHMoKXtcbnJldHVybiBmaW5hbEV4cG9ydHM7XG4gfSxcbnNldCBleHBvcnRzKHZhbHVlKXtcbmZpbmFsRXhwb3J0cz12YWx1ZTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlcXVpcmU9KGltcG9ydFNwZWNpZmllcik9Pntcbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG5hbWVzcGFjZTtcblxuaWYoIWhhcyhyZXNvbHZlZEltcG9ydHMsaW1wb3J0U3BlY2lmaWVyKSl7XG5pZihpc1JlYWROb3dQb3dlcnMocmVhZFBvd2Vycykpe1xubmFtZXNwYWNlPWNvbXBhcnRtZW50LmltcG9ydE5vdyhpbXBvcnRTcGVjaWZpZXIpO1xuIH1lbHNle1xuY29uc3QgaW52YWxpZFByb3BzPWZpbmRJbnZhbGlkUmVhZE5vd1Bvd2Vyc1Byb3BzKHJlYWRQb3dlcnMpLnNvcnQoKTtcbnRocm93IG5ldyBFcnJvcihcbiBgU3luY2hyb25vdXMgcmVhZFBvd2VycyByZXF1aXJlZCBmb3IgZHluYW1pYyBpbXBvcnQgb2YgJHthc3NlcnQucXVvdGUoaW1wb3J0U3BlY2lmaWVyKX07IG1pc3Npbmcgb3IgaW52YWxpZCBwcm9wKHMpOiAke2ludmFsaWRQcm9wcy5qb2luKCcsICcpfWApO1xuXG4gfVxuIH1lbHNle1xubmFtZXNwYWNlPWNvbXBhcnRtZW50LmltcG9ydE5vdyhyZXNvbHZlZEltcG9ydHNbaW1wb3J0U3BlY2lmaWVyXSk7XG4gfVxuXG4vL1xuLy9cbmlmKGhhcyhuYW1lc3BhY2UsJ2RlZmF1bHQnKSl7XG5yZXR1cm4gbmFtZXNwYWNlLmRlZmF1bHQ7XG4gfWVsc2V7XG5yZXR1cm4gbmFtZXNwYWNlO1xuIH1cbiB9O1xuaWYodHlwZW9mIHJlYWRQb3dlcnM9PT0nb2JqZWN0JyYmcmVhZFBvd2Vycy5yZXF1aXJlUmVzb2x2ZSl7XG5jb25zdHtyZXF1aXJlUmVzb2x2ZX09cmVhZFBvd2VycztcbnJlcXVpcmUucmVzb2x2ZT1mcmVlemUoKHNwZWNpZmllcixvcHRpb25zKT0+XG5yZXF1aXJlUmVzb2x2ZShsb2NhdGlvbixzcGVjaWZpZXIsb3B0aW9ucykpO1xuXG4gfWVsc2V7XG5yZXF1aXJlLnJlc29sdmU9ZnJlZXplKChzcGVjaWZpZXIpPT57XG5jb25zdCBlcnJvcj1FcnJvcihcbiBgQ2Fubm90IGZpbmQgbW9kdWxlICcke3NwZWNpZmllcn0nXFxuQWRkIHJlcXVpcmVSZXNvbHZlIHRvIEVuZG8gQ29tcGFydG1lbnQgTWFwcGVyIHJlYWRQb3dlcnMuYCk7XG5cbmRlZmluZVByb3BlcnR5KGVycm9yLCdjb2RlJyx7dmFsdWU6J01PRFVMRV9OT1RfRk9VTkQnfSk7XG50aHJvdyBlcnJvcjtcbiB9KTtcbiB9XG5cbmZyZWV6ZShyZXF1aXJlKTtcblxuY29uc3QgYWZ0ZXJFeGVjdXRlPSgpPT57XG5jb25zdCBleHBvcnRzSGF2ZUJlZW5PdmVyd3JpdHRlbj1maW5hbEV4cG9ydHMhPT1vcmlnaW5hbEV4cG9ydHM7XG4vL1xuLy9cbi8vXG5pZihleHBvcnRzSGF2ZUJlZW5PdmVyd3JpdHRlbil7XG5tb2R1bGVFbnZpcm9ubWVudFJlY29yZC5kZWZhdWx0PWZpbmFsRXhwb3J0cztcbmZvcihjb25zdCBwcm9wIG9mIGtleXMobW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdHx8e30pKXtcbmlmKHByb3AhPT0nZGVmYXVsdCcpe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmRbcHJvcF09bW9kdWxlRW52aXJvbm1lbnRSZWNvcmQuZGVmYXVsdFtwcm9wXTtcbiB9XG4gfVxuIH1lbHNle1xuZm9yKGNvbnN0IHByb3Agb2YgcmVkZWZpbmVkKXtcbm1vZHVsZUVudmlyb25tZW50UmVjb3JkW3Byb3BdPW1vZHVsZUVudmlyb25tZW50UmVjb3JkLmRlZmF1bHRbcHJvcF07XG4gfVxuIH1cbiB9O1xuXG5yZXR1cm57XG5tb2R1bGUsXG5tb2R1bGVFeHBvcnRzOm9yaWdpbmFsRXhwb3J0cyxcbmFmdGVyRXhlY3V0ZSxcbnJlcXVpcmV9O1xuXG4gfTskaM2PX29uY2Uud3JhcCh3cmFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldE1vZHVsZVBhdGhzIjpbImdldE1vZHVsZVBhdGhzIl0sIndyYXAiOlsid3JhcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD3b88+3AQAANwEAAAxAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtanNvbi5qc3siaW1wb3J0cyI6WyIuL2pzb24uanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VKc29uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlTG9jYXRlZEpzb247JGjNj19pbXBvcnRzKFtbXCIuL2pzb24uanNcIiwgW1tcInBhcnNlTG9jYXRlZEpzb25cIiwgWyRozY9fYSA9PiAocGFyc2VMb2NhdGVkSnNvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZUpzb249KGJ5dGVzLF9zcGVjaWZpZXIsbG9jYXRpb24sX3BhY2thZ2VMb2NhdGlvbik9PntcbmNvbnN0IHNvdXJjZT10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW1wb3J0cz1mcmVlemUoW10pO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgZXhlY3V0ZT0oZXhwb3J0cyk9PntcbmV4cG9ydHMuZGVmYXVsdD1wYXJzZUxvY2F0ZWRKc29uKHNvdXJjZSxsb2NhdGlvbik7XG4gfTtcbnJldHVybntcbnBhcnNlcjonanNvbicsXG5ieXRlcyxcbnJlY29yZDpmcmVlemUoe1xuaW1wb3J0cyxcbmV4cG9ydHM6ZnJlZXplKFsnZGVmYXVsdCddKSxcbmV4ZWN1dGU6ZnJlZXplKGV4ZWN1dGUpfSl9O1xuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZUpzb24ocGFyc2VKc29uKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZUpzb24sXG5oZXVyaXN0aWNJbXBvcnRzOmZhbHNlLFxuc3luY2hyb25vdXM6dHJ1ZX19OyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXSwicGFyc2VKc29uIjpbInBhcnNlSnNvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC1zG8YKwcAACsHAAA0AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtcHJlLWNqcy5qc3siaW1wb3J0cyI6WyIuL2pzb24uanMiLCIuL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VQcmVDanMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFyc2VMb2NhdGVkSnNvbix3cmFwLGdldE1vZHVsZVBhdGhzOyRozY9faW1wb3J0cyhbW1wiLi9qc29uLmpzXCIsIFtbXCJwYXJzZUxvY2F0ZWRKc29uXCIsIFskaM2PX2EgPT4gKHBhcnNlTG9jYXRlZEpzb24gPSAkaM2PX2EpXV1dXSxbXCIuL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanNcIiwgW1tcIndyYXBcIiwgWyRozY9fYSA9PiAod3JhcCA9ICRozY9fYSldXSxbXCJnZXRNb2R1bGVQYXRoc1wiLCBbJGjNj19hID0+IChnZXRNb2R1bGVQYXRocyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCB0ZXh0RGVjb2Rlcj1uZXcgVGV4dERlY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIHBhcnNlUHJlQ2pzPShcbmJ5dGVzLFxuX3NwZWNpZmllcixcbmxvY2F0aW9uLFxuX3BhY2thZ2VMb2NhdGlvbixcbntyZWFkUG93ZXJzfT17fSk9Plxue1xuY29uc3QgdGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuY29uc3R7c291cmNlLGltcG9ydHMsZXhwb3J0cyxyZWV4cG9ydHN9PXBhcnNlTG9jYXRlZEpzb24oXG50ZXh0LFxubG9jYXRpb24pO1xuXG5cbmNvbnN0e2ZpbGVuYW1lLGRpcm5hbWV9PWdldE1vZHVsZVBhdGhzKHJlYWRQb3dlcnMsbG9jYXRpb24pO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KG1vZHVsZUVudmlyb25tZW50UmVjb3JkLGNvbXBhcnRtZW50LHJlc29sdmVkSW1wb3J0cyk9PntcbmNvbnN0IGZ1bmN0b3I9Y29tcGFydG1lbnQuZXZhbHVhdGUoc291cmNlKTtcblxuY29uc3R7cmVxdWlyZSxtb2R1bGVFeHBvcnRzLG1vZHVsZSxhZnRlckV4ZWN1dGV9PXdyYXAoe1xubW9kdWxlRW52aXJvbm1lbnRSZWNvcmQsXG5jb21wYXJ0bWVudCxcbnJlc29sdmVkSW1wb3J0cyxcbmxvY2F0aW9uLFxucmVhZFBvd2Vyc30pO1xuXG5cbi8vXG5mdW5jdG9yLmNhbGwoXG5tb2R1bGVFeHBvcnRzLFxucmVxdWlyZSxcbm1vZHVsZUV4cG9ydHMsXG5tb2R1bGUsXG5maWxlbmFtZSxcbmRpcm5hbWUpO1xuXG5cbmFmdGVyRXhlY3V0ZSgpO1xuIH07XG5cbnJldHVybntcbnBhcnNlcjoncHJlLWNqcy1qc29uJyxcbmJ5dGVzLFxucmVjb3JkOntcbmltcG9ydHMsXG5yZWV4cG9ydHMsXG5leHBvcnRzLFxuZXhlY3V0ZX19O1xuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wYXJzZVByZUNqcyhwYXJzZVByZUNqcyk7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VQcmVDanMsXG5oZXVyaXN0aWNJbXBvcnRzOnRydWUsXG5zeW5jaHJvbm91czp0cnVlfX07JGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJwYXJzZVByZUNqcyI6WyJwYXJzZVByZUNqcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADpWxIY7gQAAO4EAAA0AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtcHJlLW1qcy5qc3siaW1wb3J0cyI6WyIuL2pzb24uanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0IiwicGFyc2VQcmVNanMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFyc2VMb2NhdGVkSnNvbjskaM2PX2ltcG9ydHMoW1tcIi4vanNvbi5qc1wiLCBbW1wicGFyc2VMb2NhdGVkSnNvblwiLCBbJGjNj19hID0+IChwYXJzZUxvY2F0ZWRKc29uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZVByZU1qcz0oXG5ieXRlcyxcbl9zcGVjaWZpZXIsXG5sb2NhdGlvbixcbl9wYWNrYWdlTG9jYXRpb24sXG57c291cmNlTWFwVXJsfT17fSk9Plxue1xuY29uc3QgdGV4dD10ZXh0RGVjb2Rlci5kZWNvZGUoYnl0ZXMpO1xuY29uc3QgcmVjb3JkPXBhcnNlTG9jYXRlZEpzb24odGV4dCxsb2NhdGlvbik7XG5pZihzb3VyY2VNYXBVcmwpe1xuLy9cbnJlY29yZC5fX3N5bmNNb2R1bGVQcm9ncmFtX18rPSBgLy8jIHNvdXJjZU1hcHBpbmdVUkw9JHtzb3VyY2VNYXBVcmx9XFxuYDtcbiB9ZWxzZXtcbi8vXG5yZWNvcmQuX19zeW5jTW9kdWxlUHJvZ3JhbV9fKz0gYC8vIyBzb3VyY2VVUkw9JHtsb2NhdGlvbn1cXG5gO1xuIH1cbnJldHVybntcbnBhcnNlcjoncHJlLW1qcy1qc29uJyxcbmJ5dGVzLFxucmVjb3JkfTtcblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnBhcnNlUHJlTWpzKHBhcnNlUHJlTWpzKTtcbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDp7XG5wYXJzZTpwYXJzZVByZU1qcyxcbmhldXJpc3RpY0ltcG9ydHM6ZmFsc2UsXG5zeW5jaHJvbm91czp0cnVlfX07JGjNj19vbmNlLmRlZmF1bHQoJGPNj19kZWZhdWx0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJwYXJzZVByZU1qcyI6WyJwYXJzZVByZU1qcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC5PBE0kgQAAJIEAAAxAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtdGV4dC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCIsInBhcnNlVGV4dCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmcmVlemU9T2JqZWN0LmZyZWV6ZTtcblxuY29uc3QgdGV4dERlY29kZXI9bmV3IFRleHREZWNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBwYXJzZVRleHQ9KGJ5dGVzLF9zcGVjaWZpZXIsX2xvY2F0aW9uLF9wYWNrYWdlTG9jYXRpb24pPT57XG5jb25zdCB0ZXh0PXRleHREZWNvZGVyLmRlY29kZShieXRlcyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGltcG9ydHM9ZnJlZXplKFtdKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGV4ZWN1dGU9KGV4cG9ydHMpPT57XG5leHBvcnRzLmRlZmF1bHQ9dGV4dDtcbiB9O1xuXG5yZXR1cm57XG5wYXJzZXI6J3RleHQnLFxuYnl0ZXMsXG5yZWNvcmQ6ZnJlZXplKHtcbmltcG9ydHMsXG5leHBvcnRzOmZyZWV6ZShbJ2RlZmF1bHQnXSksXG5leGVjdXRlOmZyZWV6ZShleGVjdXRlKX0pfTtcblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucGFyc2VUZXh0KHBhcnNlVGV4dCk7XG5jb25zdHtkZWZhdWx0OiRjzY9fZGVmYXVsdH09e2RlZmF1bHQ6e1xucGFyc2U6cGFyc2VUZXh0LFxuaGV1cmlzdGljSW1wb3J0czpmYWxzZSxcbnN5bmNocm9ub3VzOnRydWV9fTskaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sInBhcnNlVGV4dCI6WyJwYXJzZVRleHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm8DSNy4WAAAuFgAANAAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BvbGljeS1mb3JtYXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzc2VydFBhY2thZ2VQb2xpY3kiLCJhc3NlcnRQb2xpY3kiLCJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24iLCJpc0FsbG93aW5nRXZlcnl0aGluZyIsImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIiwicG9saWN5TG9va3VwSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2VudHJpZXMsa2V5c309T2JqZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBBVFRFTlVBVE9SX0tFWT0nYXR0ZW51YXRlJztcbmNvbnN0IEFUVEVOVUFUT1JfUEFSQU1TX0tFWT0ncGFyYW1zJztcbmNvbnN0IFdJTERDQVJEX1BPTElDWV9WQUxVRT0nYW55JztcbmNvbnN0IFBPTElDWV9GSUVMRFNfTE9PS1VQPS8qICAgICAgICAgICAgICAgICovW1xuJ2J1aWx0aW5zJyxcbidnbG9iYWxzJyxcbidwYWNrYWdlcyddO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcG9saWN5TG9va3VwSGVscGVyPShwYWNrYWdlUG9saWN5LGZpZWxkLGl0ZW1OYW1lKT0+e1xuaWYoIVBPTElDWV9GSUVMRFNfTE9PS1VQLmluY2x1ZGVzKGZpZWxkKSl7XG50aHJvdyBFcnJvciggYEludmFsaWQgZmllbGQgJHtxKGZpZWxkKX1gKTtcbiB9XG5pZihcbnR5cGVvZiBwYWNrYWdlUG9saWN5IT09J29iamVjdCd8fFxucGFja2FnZVBvbGljeT09PW51bGx8fFxuIXBhY2thZ2VQb2xpY3lbZmllbGRdKVxue1xucmV0dXJuIGZhbHNlO1xuIH1cblxuaWYocGFja2FnZVBvbGljeVtmaWVsZF09PT1XSUxEQ0FSRF9QT0xJQ1lfVkFMVUUpe1xucmV0dXJuIHRydWU7XG4gfVxuXG5jb25zdCB2YWx1ZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBhY2thZ2VQb2xpY3lbZmllbGRdO1xuXG5pZihpdGVtTmFtZSBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbaXRlbU5hbWVdO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UucG9saWN5TG9va3VwSGVscGVyKHBvbGljeUxvb2t1cEhlbHBlcik7XG5jb25zdCAgICAgICAgaXNBbGxvd2luZ0V2ZXJ5dGhpbmc9KHBvbGljeVZhbHVlKT0+XG5wb2xpY3lWYWx1ZT09PVdJTERDQVJEX1BPTElDWV9WQUxVRTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5pc0FsbG93aW5nRXZlcnl0aGluZyhpc0FsbG93aW5nRXZlcnl0aGluZyk7XG5jb25zdCAgICAgICAgaXNBdHRlbnVhdGlvbkRlZmluaXRpb249KGFsbGVnZWREZWZpbml0aW9uKT0+e1xucmV0dXJuIEJvb2xlYW4oXG5hbGxlZ2VkRGVmaW5pdGlvbiYmXG50eXBlb2YgYWxsZWdlZERlZmluaXRpb249PT0nb2JqZWN0JyYmXG50eXBlb2YgYWxsZWdlZERlZmluaXRpb25bQVRURU5VQVRPUl9LRVldPT09J3N0cmluZyd8fC8vXG5pc0FycmF5KGFsbGVnZWREZWZpbml0aW9uKS8vXG4pO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuaXNBdHRlbnVhdGlvbkRlZmluaXRpb24oaXNBdHRlbnVhdGlvbkRlZmluaXRpb24pO1xuY29uc3QgICAgICAgIGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbj0oYXR0ZW51YXRpb25EZWZpbml0aW9uKT0+e1xuaWYoIWlzQXR0ZW51YXRpb25EZWZpbml0aW9uKGF0dGVudWF0aW9uRGVmaW5pdGlvbikpe1xudGhyb3cgRXJyb3IoXG4gYEludmFsaWQgYXR0ZW51YXRpb24gJHtxKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uKVxuIH0sIG11c3QgYmUgYW4gYXJyYXkgb2YgcGFyYW1zIGZvciBkZWZhdWx0IGF0dGVudWF0b3Igb3IgYW4gb2JqZWN0IHdpdGggYW4gYXR0ZW51YXRvciBrZXlgKTtcblxuIH1cbmlmKGlzQXJyYXkoYXR0ZW51YXRpb25EZWZpbml0aW9uKSl7XG5yZXR1cm57XG5kaXNwbGF5TmFtZTonPGRlZmF1bHQgYXR0ZW51YXRvcj4nLFxuc3BlY2lmaWVyOm51bGwsXG5wYXJhbXM6YXR0ZW51YXRpb25EZWZpbml0aW9ufTtcblxuIH1lbHNle1xucmV0dXJue1xuZGlzcGxheU5hbWU6YXR0ZW51YXRpb25EZWZpbml0aW9uW0FUVEVOVUFUT1JfS0VZXSxcbnNwZWNpZmllcjphdHRlbnVhdGlvbkRlZmluaXRpb25bQVRURU5VQVRPUl9LRVldLFxucGFyYW1zOmF0dGVudWF0aW9uRGVmaW5pdGlvbltBVFRFTlVBVE9SX1BBUkFNU19LRVldfTtcblxuIH1cbiB9O1xuXG4vL1xuJGjNj19vbmNlLmdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbihnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24pO2NvbnN0IGlzUmVjb3JkT2Y9KGl0ZW0scHJlZGljYXRlKT0+e1xuaWYodHlwZW9mIGl0ZW0hPT0nb2JqZWN0J3x8aXRlbT09PW51bGx8fGlzQXJyYXkoaXRlbSkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiBlbnRyaWVzKGl0ZW0pLmV2ZXJ5KChba2V5LHZhbHVlXSk9PnByZWRpY2F0ZSh2YWx1ZSxrZXkpKTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc0Jvb2xlYW49KGl0ZW0pPT50eXBlb2YgaXRlbT09PSdib29sZWFuJztcblxuLy9cbmNvbnN0IHByZWRpY2F0ZU9yPVxuKC4uLnByZWRpY2F0ZXMpPT5cbihpdGVtKT0+XG5wcmVkaWNhdGVzLnNvbWUoKHApPT5wKGl0ZW0pKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGlzUG9saWN5SXRlbT0oaXRlbSk9PlxuaXRlbT09PXVuZGVmaW5lZHx8XG5pdGVtPT09V0lMRENBUkRfUE9MSUNZX1ZBTFVFfHxcbmlzUmVjb3JkT2YoaXRlbSxpc0Jvb2xlYW4pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhY2thZ2VQb2xpY3k9KGFsbGVnZWRQYWNrYWdlUG9saWN5LHBhdGgsdXJsKT0+e1xuaWYoYWxsZWdlZFBhY2thZ2VQb2xpY3k9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IGluVXJsPXVybD8gYCBpbiAke3EodXJsKX1gOicnO1xuXG5jb25zdCBwYWNrYWdlUG9saWN5PU9iamVjdChhbGxlZ2VkUGFja2FnZVBvbGljeSk7XG5hc3NlcnQoXG5hbGxlZ2VkUGFja2FnZVBvbGljeT09PXBhY2thZ2VQb2xpY3kmJiFpc0FycmF5KGFsbGVnZWRQYWNrYWdlUG9saWN5KSxcbiBgJHtwYXRofSBtdXN0IGJlIGFuIG9iamVjdCwgZ290ICR7cShhbGxlZ2VkUGFja2FnZVBvbGljeSl9JHtpblVybH1gKTtcblxuY29uc3R7XG5wYWNrYWdlcyxcbmJ1aWx0aW5zLFxuZ2xvYmFscyxcbm5vR2xvYmFsRnJlZXplLFxuZGVmYXVsdEF0dGVudWF0b3I6X2lnbm9yZSwvL1xuLy9cbm9wdGlvbnMsLy9cbi4uLmV4dHJhfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcGFja2FnZVBvbGljeTtcblxuYXNzZXJ0KFxua2V5cyhleHRyYSkubGVuZ3RoPT09MCxcbiBgJHtwYXRofSBtdXN0IG5vdCBoYXZlIGV4dHJhIHByb3BlcnRpZXMsIGdvdCAke3Eoa2V5cyhleHRyYSkpfSR7aW5Vcmx9YCk7XG5cblxuYXNzZXJ0KFxubm9HbG9iYWxGcmVlemU9PT11bmRlZmluZWR8fHR5cGVvZiBub0dsb2JhbEZyZWV6ZT09PSdib29sZWFuJyxcbiBgJHtwYXRofS5ub0dsb2JhbEZyZWV6ZSBtdXN0IGJlIGEgYm9vbGVhbiwgZ290ICR7cSh7XG5ub0dsb2JhbEZyZWV6ZX0pXG4gfSR7aW5Vcmx9YCk7XG5cblxuaXNQb2xpY3lJdGVtKHBhY2thZ2VzKXx8XG5hc3NlcnQuZmFpbChcbiBgJHtwYXRofS5wYWNrYWdlcyBtdXN0IGJlIGEgcmVjb3JkIG9mIGJvb2xlYW5zLCBnb3QgJHtxKHtcbnBhY2thZ2VzfSlcbiB9JHtpblVybH1gKTtcblxuXG5pc1BvbGljeUl0ZW0oZ2xvYmFscyl8fFxuaXNBdHRlbnVhdGlvbkRlZmluaXRpb24oZ2xvYmFscyl8fFxuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0uZ2xvYmFscyBtdXN0IGJlIGEgcmVjb3JkIG9mIGJvb2xlYW5zIG9yIGEgc2luZ2xlIGF0dGVudWF0aW9uLCBnb3QgJHtxKFxue1xuZ2xvYmFsc30pXG5cbiB9JHtpblVybH1gKTtcblxuXG5pc1BvbGljeUl0ZW0oYnVpbHRpbnMpfHxcbmlzUmVjb3JkT2YoYnVpbHRpbnMscHJlZGljYXRlT3IoaXNCb29sZWFuLGlzQXR0ZW51YXRpb25EZWZpbml0aW9uKSl8fFxuYXNzZXJ0LmZhaWwoXG4gYCR7cGF0aH0uYnVpbHRpbnMgbXVzdCBiZSBhIHJlY29yZCBvZiBib29sZWFucyBvciBhdHRlbnVhdGlvbnMsIGdvdCAke3Eoe1xuYnVpbHRpbnN9KVxuIH0ke2luVXJsfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnRQYWNrYWdlUG9saWN5KGFzc2VydFBhY2thZ2VQb2xpY3kpO1xuY29uc3QgICAgICAgIGFzc2VydFBvbGljeT0oYWxsZWdlZFBvbGljeSk9PntcbmlmKGFsbGVnZWRQb2xpY3k9PT11bmRlZmluZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHBvbGljeT1PYmplY3QoYWxsZWdlZFBvbGljeSk7XG5hc3NlcnQoXG5hbGxlZ2VkUG9saWN5PT09cG9saWN5JiYhQXJyYXkuaXNBcnJheShwb2xpY3kpLFxuIGBwb2xpY3kgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke2FsbGVnZWRQb2xpY3l9YCk7XG5cblxuY29uc3R7cmVzb3VyY2VzLGVudHJ5LGRlZmF1bHRBdHRlbnVhdG9yLC4uLmV4dHJhfT1wb2xpY3k7XG5hc3NlcnQoXG5rZXlzKGV4dHJhKS5sZW5ndGg9PT0wLFxuIGBwb2xpY3kgbXVzdCBub3QgaGF2ZSBleHRyYSBwcm9wZXJ0aWVzLCBnb3QgJHtxKGtleXMoZXh0cmEpKX1gKTtcblxuXG5hc3NlcnQoXG50eXBlb2YgcmVzb3VyY2VzPT09J29iamVjdCcmJnJlc291cmNlcyE9PW51bGwmJiFpc0FycmF5KHJlc291cmNlcyksXG4gYHBvbGljeS5yZXNvdXJjZXMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCAke3EocmVzb3VyY2VzKX1gKTtcblxuYXNzZXJ0KFxuIWRlZmF1bHRBdHRlbnVhdG9yfHx0eXBlb2YgZGVmYXVsdEF0dGVudWF0b3I9PT0nc3RyaW5nJyxcbiBgcG9saWN5LmRlZmF1bHRBdHRlbnVhdG9yIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAke3EoZGVmYXVsdEF0dGVudWF0b3IpfWApO1xuXG5cbmFzc2VydFBhY2thZ2VQb2xpY3koZW50cnksIGBwb2xpY3kuZW50cnlgKTtcblxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBlbnRyaWVzKHJlc291cmNlcykpe1xuYXNzZXJ0UGFja2FnZVBvbGljeSh2YWx1ZSwgYHBvbGljeS5yZXNvdXJjZXNbXCIke2tleX1cIl1gKTtcbiB9XG4gfTskaM2PX29uY2UuYXNzZXJ0UG9saWN5KGFzc2VydFBvbGljeSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwb2xpY3lMb29rdXBIZWxwZXIiOlsicG9saWN5TG9va3VwSGVscGVyIl0sImlzQWxsb3dpbmdFdmVyeXRoaW5nIjpbImlzQWxsb3dpbmdFdmVyeXRoaW5nIl0sImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIjpbImlzQXR0ZW51YXRpb25EZWZpbml0aW9uIl0sImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbiI6WyJnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24iXSwiYXNzZXJ0UGFja2FnZVBvbGljeSI6WyJhc3NlcnRQYWNrYWdlUG9saWN5Il0sImFzc2VydFBvbGljeSI6WyJhc3NlcnRQb2xpY3kiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATfBc8BklAAAZJQAALQAAAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BvbGljeS5qc3siaW1wb3J0cyI6WyIuL3BvbGljeS1mb3JtYXQuanMiXSwiZXhwb3J0cyI6WyJBVFRFTlVBVE9SU19DT01QQVJUTUVOVCIsImF0dGVudWF0ZUdsb2JhbHMiLCJhdHRlbnVhdGVNb2R1bGVIb29rIiwiZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeSIsImRldGVjdEF0dGVudWF0b3JzIiwiZW5mb3JjZU1vZHVsZVBvbGljeSIsImdldFBvbGljeUZvclBhY2thZ2UiLCJtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvbixpc0FsbG93aW5nRXZlcnl0aGluZyxpc0F0dGVudWF0aW9uRGVmaW5pdGlvbixwb2xpY3lMb29rdXBIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCIuL3BvbGljeS1mb3JtYXQuanNcIiwgW1tcImdldEF0dGVudWF0b3JGcm9tRGVmaW5pdGlvblwiLCBbJGjNj19hID0+IChnZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24gPSAkaM2PX2EpXV0sW1wiaXNBbGxvd2luZ0V2ZXJ5dGhpbmdcIiwgWyRozY9fYSA9PiAoaXNBbGxvd2luZ0V2ZXJ5dGhpbmcgPSAkaM2PX2EpXV0sW1wiaXNBdHRlbnVhdGlvbkRlZmluaXRpb25cIiwgWyRozY9fYSA9PiAoaXNBdHRlbnVhdGlvbkRlZmluaXRpb24gPSAkaM2PX2EpXV0sW1wicG9saWN5TG9va3VwSGVscGVyXCIsIFskaM2PX2EgPT4gKHBvbGljeUxvb2t1cEhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLGVudHJpZXMsdmFsdWVzLGFzc2lnbixmcmVlemUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgQVRURU5VQVRPUlNfQ09NUEFSVE1FTlQ9JzxBVFRFTlVBVE9SUz4nO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5BVFRFTlVBVE9SU19DT01QQVJUTUVOVChBVFRFTlVBVE9SU19DT01QQVJUTUVOVCk7XG5jb25zdCBzZWxlY3RpdmVDb3B5PShmcm9tLHRvLGxpc3QpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHByb3BzO1xuaWYoIWxpc3Qpe1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhmcm9tKTtcbnByb3BzPW93bktleXMoZnJvbSkuZmlsdGVyKChrZXkpPT5kZXNjc1trZXldLmVudW1lcmFibGUpO1xuIH1lbHNle1xucHJvcHM9bGlzdDtcbiB9XG5mb3IobGV0IGluZGV4PTA7aW5kZXg8cHJvcHMubGVuZ3RoO2luZGV4Kz0xKXtcbmNvbnN0IGtleT1wcm9wc1tpbmRleF07XG4vL1xuLy9cbnRvW2tleV09ZnJvbVtrZXldO1xuIH1cbnJldHVybiB0bztcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29sbGVjdEF0dGVudWF0b3JzPShhdHRlbnVhdG9ycyxwb2xpY3lGcmFnbWVudCk9PntcbmlmKCdhdHRlbnVhdGUnaW4gcG9saWN5RnJhZ21lbnQpe1xuYXR0ZW51YXRvcnMucHVzaChwb2xpY3lGcmFnbWVudC5hdHRlbnVhdGUpO1xuIH1cbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMocG9saWN5RnJhZ21lbnQpKXtcbmlmKHR5cGVvZiB2YWx1ZT09PSdvYmplY3QnJiZ2YWx1ZSE9PW51bGwpe1xuY29sbGVjdEF0dGVudWF0b3JzKGF0dGVudWF0b3JzLHZhbHVlKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IGF0dGVudWF0b3JzQ2FjaGU9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZXRlY3RBdHRlbnVhdG9ycz0ocG9saWN5KT0+e1xuaWYoIXBvbGljeSl7XG5yZXR1cm5bXTtcbiB9XG5pZighYXR0ZW51YXRvcnNDYWNoZS5oYXMocG9saWN5KSl7XG5jb25zdCBhdHRlbnVhdG9ycz1bXTtcbmlmKHBvbGljeS5kZWZhdWx0QXR0ZW51YXRvcil7XG5hdHRlbnVhdG9ycy5wdXNoKHBvbGljeS5kZWZhdWx0QXR0ZW51YXRvcik7XG4gfVxuY29sbGVjdEF0dGVudWF0b3JzKGF0dGVudWF0b3JzLHBvbGljeSk7XG5hdHRlbnVhdG9yc0NhY2hlLnNldChwb2xpY3ksYXR0ZW51YXRvcnMpO1xuIH1cbnJldHVybiBhdHRlbnVhdG9yc0NhY2hlLmdldChwb2xpY3kpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZXRlY3RBdHRlbnVhdG9ycyhkZXRlY3RBdHRlbnVhdG9ycyk7XG5jb25zdCBnZW5lcmF0ZUNhbm9uaWNhbE5hbWU9KHtpc0VudHJ5PWZhbHNlLG5hbWUscGF0aH0pPT57XG5pZihpc0VudHJ5KXtcbnRocm93IEVycm9yKCdFbnRyeSBtb2R1bGUgY2Fubm90IGJlIGlkZW50aWZpZWQgd2l0aCBhIGNhbm9uaWNhbE5hbWUnKTtcbiB9XG5pZihuYW1lPT09QVRURU5VQVRPUlNfQ09NUEFSVE1FTlQpe1xucmV0dXJuIEFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UO1xuIH1cbnJldHVybiBwYXRoLmpvaW4oJz4nKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVwZW5kZW5jeUFsbG93ZWRCeVBvbGljeT0obmFtaW5nS2l0LHBhY2thZ2VQb2xpY3kpPT57XG5pZihuYW1pbmdLaXQuaXNFbnRyeSl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNhbm9uaWNhbE5hbWU9Z2VuZXJhdGVDYW5vbmljYWxOYW1lKG5hbWluZ0tpdCk7XG5yZXR1cm4hIXBvbGljeUxvb2t1cEhlbHBlcihwYWNrYWdlUG9saWN5LCdwYWNrYWdlcycsY2Fub25pY2FsTmFtZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5KGRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3kpO1xuY29uc3QgICAgICAgIGdldFBvbGljeUZvclBhY2thZ2U9KG5hbWluZ0tpdCxwb2xpY3kpPT57XG5pZighcG9saWN5KXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaWYobmFtaW5nS2l0LmlzRW50cnkpe1xucmV0dXJuIHBvbGljeS5lbnRyeTtcbiB9XG5jb25zdCBjYW5vbmljYWxOYW1lPWdlbmVyYXRlQ2Fub25pY2FsTmFtZShuYW1pbmdLaXQpO1xuaWYoY2Fub25pY2FsTmFtZT09PUFUVEVOVUFUT1JTX0NPTVBBUlRNRU5UKXtcbnJldHVybntcbmRlZmF1bHRBdHRlbnVhdG9yOnBvbGljeS5kZWZhdWx0QXR0ZW51YXRvcixcbnBhY2thZ2VzOidhbnknfTtcblxuIH1cbmlmKHBvbGljeS5yZXNvdXJjZXMmJnBvbGljeS5yZXNvdXJjZXNbY2Fub25pY2FsTmFtZV0hPT11bmRlZmluZWQpe1xucmV0dXJuIHBvbGljeS5yZXNvdXJjZXNbY2Fub25pY2FsTmFtZV07XG4gfWVsc2V7XG4vL1xucmV0dXJuIGNyZWF0ZShudWxsKTtcbiB9XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5nZXRQb2xpY3lGb3JQYWNrYWdlKGdldFBvbGljeUZvclBhY2thZ2UpO1xuY29uc3QgZ2V0R2xvYmFsc0xpc3Q9KHBhY2thZ2VQb2xpY3kpPT57XG5pZighcGFja2FnZVBvbGljeXx8IXBhY2thZ2VQb2xpY3kuZ2xvYmFscyl7XG5yZXR1cm5bXTtcbiB9XG5yZXR1cm4gZW50cmllcyhwYWNrYWdlUG9saWN5Lmdsb2JhbHMpLlxuZmlsdGVyKChbX2tleSx2YWx1ZV0pPT52YWx1ZSkuXG5tYXAoKFtrZXksX3Z2YWx1ZV0pPT5rZXkpO1xuIH07XG5cbmNvbnN0IEdMT0JBTF9BVFRFTlVBVE9SPSdhdHRlbnVhdGVHbG9iYWxzJztcbmNvbnN0IE1PRFVMRV9BVFRFTlVBVE9SPSdhdHRlbnVhdGVNb2R1bGUnO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaW1wb3J0QXR0ZW51YXRvckZvckRlZmluaXRpb249YXN5bmMoXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5hdHRlbnVhdG9yc1Byb3ZpZGVyLFxuYXR0ZW51YXRvckV4cG9ydE5hbWUpPT5cbntcbmlmKCFhdHRlbnVhdG9yc1Byb3ZpZGVyKXtcbnRocm93IEVycm9yKCBgYXR0ZW51YXRvcnNQcm92aWRlciBpcyByZXF1aXJlZCB0byBpbXBvcnQgYXR0ZW51YXRvcnNgKTtcbiB9XG5jb25zdHtzcGVjaWZpZXIscGFyYW1zLGRpc3BsYXlOYW1lfT1nZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24oXG5hdHRlbnVhdGlvbkRlZmluaXRpb24pO1xuXG5jb25zdCBhdHRlbnVhdG9yPWF3YWl0IGF0dGVudWF0b3JzUHJvdmlkZXIuaW1wb3J0KHNwZWNpZmllcik7XG5pZighYXR0ZW51YXRvclthdHRlbnVhdG9yRXhwb3J0TmFtZV0pe1xudGhyb3cgRXJyb3IoXG4gYEF0dGVudWF0b3IgJHtxKGRpc3BsYXlOYW1lKX0gZG9lcyBub3QgZXhwb3J0ICR7cShhdHRlbnVhdG9yRXhwb3J0TmFtZSl9YCk7XG5cbiB9XG4vL1xuY29uc3QgYXR0ZW51YXRlPWF0dGVudWF0b3JbYXR0ZW51YXRvckV4cG9ydE5hbWVdLmJpbmQoYXR0ZW51YXRvcixwYXJhbXMpO1xucmV0dXJuIGF0dGVudWF0ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVmZXJyZWRBdHRlbnVhdG9yc1Byb3ZpZGVyPShcbmNvbXBhcnRtZW50cyxcbmNvbXBhcnRtZW50RGVzY3JpcHRvcnMpPT5cbntcbmxldCBpbXBvcnRBdHRlbnVhdG9yO1xubGV0IGRlZmF1bHRBdHRlbnVhdG9yO1xuLy9cbi8vXG5pZighY29tcGFydG1lbnREZXNjcmlwdG9yc1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF0pe1xuaW1wb3J0QXR0ZW51YXRvcj1hc3luYygpPT57XG50aHJvdyBFcnJvciggYE5vIGF0dGVudWF0b3JzIHNwZWNpZmllZCBpbiBwb2xpY3lgKTtcbiB9O1xuIH1lbHNle1xuZGVmYXVsdEF0dGVudWF0b3I9XG5jb21wYXJ0bWVudERlc2NyaXB0b3JzW0FUVEVOVUFUT1JTX0NPTVBBUlRNRU5UXS5wb2xpY3kuZGVmYXVsdEF0dGVudWF0b3I7XG5cbi8vXG4vL1xuLy9cbi8qXG5cblxuXG4gICAgICovXG5pbXBvcnRBdHRlbnVhdG9yPWFzeW5jKGF0dGVudWF0b3JTcGVjaWZpZXIpPT57XG5pZighYXR0ZW51YXRvclNwZWNpZmllcil7XG5pZighZGVmYXVsdEF0dGVudWF0b3Ipe1xudGhyb3cgRXJyb3IoIGBObyBkZWZhdWx0IGF0dGVudWF0b3Igc3BlY2lmaWVkIGluIHBvbGljeWApO1xuIH1cbmF0dGVudWF0b3JTcGVjaWZpZXI9ZGVmYXVsdEF0dGVudWF0b3I7XG4gfVxuY29uc3R7bmFtZXNwYWNlfT1cbmF3YWl0IGNvbXBhcnRtZW50c1tBVFRFTlVBVE9SU19DT01QQVJUTUVOVF0uaW1wb3J0KGF0dGVudWF0b3JTcGVjaWZpZXIpO1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9O1xuIH1cblxucmV0dXJue1xuaW1wb3J0OmltcG9ydEF0dGVudWF0b3J9O1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIobWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlcik7XG5hc3luYyBmdW5jdGlvbiBhdHRlbnVhdGVHbG9iYWxUaGlzKHtcbmF0dGVudWF0b3JzLFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuZ2xvYmFsVGhpcyxcbmdsb2JhbHN9KVxue1xuY29uc3QgYXR0ZW51YXRlPWF3YWl0IGltcG9ydEF0dGVudWF0b3JGb3JEZWZpbml0aW9uKFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuYXR0ZW51YXRvcnMsXG5HTE9CQUxfQVRURU5VQVRPUik7XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cblxuY29uc3QgcmVzdWx0PS8qICAgICAgICovYXR0ZW51YXRlKGdsb2JhbHMsZ2xvYmFsVGhpcyk7XG5pZih0eXBlb2YgcmVzdWx0PT09J29iamVjdCcmJnJlc3VsdCE9PW51bGwpe1xuYXNzaWduKGdsb2JhbFRoaXMscmVzdWx0KTtcbiB9XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXR0ZW51YXRlR2xvYmFscz0oXG5nbG9iYWxUaGlzLFxuZ2xvYmFscyxcbnBhY2thZ2VQb2xpY3ksXG5hdHRlbnVhdG9ycyxcbnBlbmRpbmdKb2JzLFxubmFtZT0nPHVua25vd24+Jyk9Plxue1xubGV0IGZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dD0oKT0+e1xuZnJlZXplKGdsb2JhbFRoaXMpO1xuIH07XG5pZihwYWNrYWdlUG9saWN5JiZwYWNrYWdlUG9saWN5Lm5vR2xvYmFsRnJlZXplKXtcbmZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dD0oKT0+eyB9O1xuIH1cbmlmKCFwYWNrYWdlUG9saWN5fHxpc0FsbG93aW5nRXZlcnl0aGluZyhwYWNrYWdlUG9saWN5Lmdsb2JhbHMpKXtcbnNlbGVjdGl2ZUNvcHkoZ2xvYmFscyxnbG9iYWxUaGlzKTtcbmZyZWV6ZUdsb2JhbFRoaXNVbmxlc3NPcHRlZE91dCgpO1xucmV0dXJuO1xuIH1cbmlmKGlzQXR0ZW51YXRpb25EZWZpbml0aW9uKHBhY2thZ2VQb2xpY3kuZ2xvYmFscykpe1xuY29uc3QgYXR0ZW51YXRpb25EZWZpbml0aW9uPXBhY2thZ2VQb2xpY3kuZ2xvYmFscztcbmNvbnN0e2Rpc3BsYXlOYW1lfT1nZXRBdHRlbnVhdG9yRnJvbURlZmluaXRpb24oYXR0ZW51YXRpb25EZWZpbml0aW9uKTtcbmNvbnN0IGF0dGVudWF0aW9uUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoKS8vXG4udGhlbigoKT0+XG5hdHRlbnVhdGVHbG9iYWxUaGlzKHtcbmF0dGVudWF0b3JzLFxuYXR0ZW51YXRpb25EZWZpbml0aW9uLFxuZ2xvYmFsVGhpcyxcbmdsb2JhbHN9KSkuXG5cblxudGhlbihmcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQsKGVycm9yKT0+e1xuZnJlZXplR2xvYmFsVGhpc1VubGVzc09wdGVkT3V0KCk7XG50aHJvdyBFcnJvcihcbiBgRXJyb3Igd2hpbGUgYXR0ZW51YXRpbmcgZ2xvYmFscyBmb3IgJHtxKG5hbWUpfSB3aXRoICR7cShcbmRpc3BsYXlOYW1lKVxuIH06ICR7cShlcnJvci5tZXNzYWdlKX1gLy9cbik7XG4gfSk7XG5wZW5kaW5nSm9icy5wdXNoKGF0dGVudWF0aW9uUHJvbWlzZSk7XG5cbnJldHVybjtcbiB9XG5jb25zdCBsaXN0PWdldEdsb2JhbHNMaXN0KHBhY2thZ2VQb2xpY3kpO1xuc2VsZWN0aXZlQ29weShnbG9iYWxzLGdsb2JhbFRoaXMsbGlzdCk7XG5mcmVlemVHbG9iYWxUaGlzVW5sZXNzT3B0ZWRPdXQoKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5hdHRlbnVhdGVHbG9iYWxzKGF0dGVudWF0ZUdsb2JhbHMpO1xuY29uc3QgZGlhZ25vc2VNb2R1bGVQb2xpY3k9KGVycm9ySGludCk9PntcbmlmKCFlcnJvckhpbnQpe1xucmV0dXJuJyc7XG4gfVxucmV0dXJuIGAgKGluZm86ICR7ZXJyb3JIaW50fSlgO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGVuZm9yY2VNb2R1bGVQb2xpY3k9KFxuc3BlY2lmaWVyLFxuY29tcGFydG1lbnREZXNjcmlwdG9yLFxue2V4aXQsZXJyb3JIaW50fT17fSk9Plxue1xuY29uc3R7cG9saWN5LG1vZHVsZXMsbGFiZWx9PWNvbXBhcnRtZW50RGVzY3JpcHRvcjtcbmlmKCFwb2xpY3kpe1xucmV0dXJuO1xuIH1cblxuaWYoIWV4aXQpe1xuaWYoIW1vZHVsZXNbc3BlY2lmaWVyXSl7XG50aHJvdyBFcnJvcihcbiBgSW1wb3J0aW5nICR7cShzcGVjaWZpZXIpfSBpbiAke3EoXG5sYWJlbClcbiB9IHdhcyBub3QgYWxsb3dlZCBieSBwYWNrYWdlcyBwb2xpY3kgJHtxKFxucG9saWN5LnBhY2thZ2VzKVxuIH0ke2RpYWdub3NlTW9kdWxlUG9saWN5KGVycm9ySGludCl9YCk7XG5cbiB9XG5yZXR1cm47XG4gfVxuXG5pZighcG9saWN5TG9va3VwSGVscGVyKHBvbGljeSwnYnVpbHRpbnMnLHNwZWNpZmllcikpe1xudGhyb3cgRXJyb3IoXG4gYEltcG9ydGluZyAke3Eoc3BlY2lmaWVyKX0gd2FzIG5vdCBhbGxvd2VkIGJ5IHBvbGljeSBidWlsdGluczoke3EoXG5wb2xpY3kuYnVpbHRpbnMpXG4gfSR7ZGlhZ25vc2VNb2R1bGVQb2xpY3koZXJyb3JIaW50KX1gKTtcblxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmVuZm9yY2VNb2R1bGVQb2xpY3koZW5mb3JjZU1vZHVsZVBvbGljeSk7XG5hc3luYyBmdW5jdGlvbiBhdHRlbnVhdGVNb2R1bGUoe1xuYXR0ZW51YXRvcnMsXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5vcmlnaW5hbE1vZHVsZVJlY29yZH0pXG57XG5jb25zdCBhdHRlbnVhdGU9YXdhaXQgaW1wb3J0QXR0ZW51YXRvckZvckRlZmluaXRpb24oXG5hdHRlbnVhdGlvbkRlZmluaXRpb24sXG5hdHRlbnVhdG9ycyxcbk1PRFVMRV9BVFRFTlVBVE9SKTtcblxuXG4vL1xuLy9cblxucmV0dXJuIGZyZWV6ZSh7XG5pbXBvcnRzOm9yaWdpbmFsTW9kdWxlUmVjb3JkLmltcG9ydHMsXG4vL1xuLy9cbmV4cG9ydHM6b3JpZ2luYWxNb2R1bGVSZWNvcmQuZXhwb3J0cyxcbmV4ZWN1dGU6KG1vZHVsZUV4cG9ydHMsY29tcGFydG1lbnQscmVzb2x2ZWRJbXBvcnRzKT0+e1xuY29uc3QgbnM9e307XG5vcmlnaW5hbE1vZHVsZVJlY29yZC5leGVjdXRlKG5zLGNvbXBhcnRtZW50LHJlc29sdmVkSW1wb3J0cyk7XG5jb25zdCBhdHRlbnVhdGVkPWF0dGVudWF0ZShucyk7XG5tb2R1bGVFeHBvcnRzLmRlZmF1bHQ9YXR0ZW51YXRlZDtcbmFzc2lnbihtb2R1bGVFeHBvcnRzLGF0dGVudWF0ZWQpO1xuIH19KTtcblxuIH1cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXR0ZW51YXRlTW9kdWxlSG9vaz1hc3luYyhcbnNwZWNpZmllcixcbm9yaWdpbmFsTW9kdWxlUmVjb3JkLFxucG9saWN5LFxuYXR0ZW51YXRvcnMpPT5cbntcbmNvbnN0IHBvbGljeVZhbHVlPXBvbGljeUxvb2t1cEhlbHBlcihwb2xpY3ksJ2J1aWx0aW5zJyxzcGVjaWZpZXIpO1xuaWYoIXBvbGljeXx8cG9saWN5VmFsdWU9PT10cnVlKXtcbnJldHVybiBvcmlnaW5hbE1vZHVsZVJlY29yZDtcbiB9XG5cbmlmKCFwb2xpY3lWYWx1ZSl7XG50aHJvdyBFcnJvcihcbiBgQXR0ZW51YXRpb24gZmFpbGVkICcke3NwZWNpZmllcn0nIHdhcyBub3QgaW4gcG9saWN5IGJ1aWx0aW5zOiR7cShcbnBvbGljeS5idWlsdGlucylcbiB9YCk7XG5cbiB9XG5yZXR1cm4gYXR0ZW51YXRlTW9kdWxlKHtcbmF0dGVudWF0b3JzLFxuYXR0ZW51YXRpb25EZWZpbml0aW9uOnBvbGljeVZhbHVlLFxub3JpZ2luYWxNb2R1bGVSZWNvcmR9KTtcblxuIH07JGjNj19vbmNlLmF0dGVudWF0ZU1vZHVsZUhvb2soYXR0ZW51YXRlTW9kdWxlSG9vayk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJBVFRFTlVBVE9SU19DT01QQVJUTUVOVCI6WyJBVFRFTlVBVE9SU19DT01QQVJUTUVOVCJdLCJkZXRlY3RBdHRlbnVhdG9ycyI6WyJkZXRlY3RBdHRlbnVhdG9ycyJdLCJkZXBlbmRlbmN5QWxsb3dlZEJ5UG9saWN5IjpbImRlcGVuZGVuY3lBbGxvd2VkQnlQb2xpY3kiXSwiZ2V0UG9saWN5Rm9yUGFja2FnZSI6WyJnZXRQb2xpY3lGb3JQYWNrYWdlIl0sIm1ha2VEZWZlcnJlZEF0dGVudWF0b3JzUHJvdmlkZXIiOlsibWFrZURlZmVycmVkQXR0ZW51YXRvcnNQcm92aWRlciJdLCJhdHRlbnVhdGVHbG9iYWxzIjpbImF0dGVudWF0ZUdsb2JhbHMiXSwiZW5mb3JjZU1vZHVsZVBvbGljeSI6WyJlbmZvcmNlTW9kdWxlUG9saWN5Il0sImF0dGVudWF0ZU1vZHVsZUhvb2siOlsiYXR0ZW51YXRlTW9kdWxlSG9vayJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABNzEJuDQgAAA0IAAAtAAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcG93ZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyIsImlzUmVhZE5vd1Bvd2VycyIsInVucGFja1JlYWRQb3dlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYW5vbmljYWxTaGltPWFzeW5jKHBhdGgpPT5wYXRoO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVucGFja1JlYWRQb3dlcnM9KHBvd2Vycyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlYWQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1heWJlUmVhZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgY2Fub25pY2FsO1xuXG5pZih0eXBlb2YgcG93ZXJzPT09J2Z1bmN0aW9uJyl7XG5yZWFkPXBvd2VycztcbiB9ZWxzZXtcbih7cmVhZCxtYXliZVJlYWQsY2Fub25pY2FsfT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9wb3dlcnMpO1xuIH1cblxuaWYoY2Fub25pY2FsPT09dW5kZWZpbmVkKXtcbmNhbm9uaWNhbD1jYW5vbmljYWxTaGltO1xuIH1cblxuaWYobWF5YmVSZWFkPT09dW5kZWZpbmVkKXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubWF5YmVSZWFkPShwYXRoKT0+XG4vKiAgICAgICAgICAgICAgICAgKi9yZWFkKHBhdGgpLmNhdGNoKChfZXJyb3IpPT51bmRlZmluZWQpO1xuIH1cblxucmV0dXJue1xuLi4ucG93ZXJzLFxucmVhZCxcbm1heWJlUmVhZCxcbmNhbm9uaWNhbH07XG5cbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnVucGFja1JlYWRQb3dlcnModW5wYWNrUmVhZFBvd2Vycyk7XG5jb25zdCByZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wcz1mcmVlemUoXG4vKiAgICAgICAgICAgICAgICAqL1snZmlsZVVSTFRvUGF0aCcsJ2lzQWJzb2x1dGUnLCdtYXliZVJlYWROb3cnXSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNSZWFkTm93UG93ZXJzPSh2YWx1ZSk9PlxuQm9vbGVhbihcbnZhbHVlJiZcbnR5cGVvZiB2YWx1ZT09PSdvYmplY3QnJiZcbnJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzLmV2ZXJ5KFxuKHByb3ApPT5wcm9wIGluIHZhbHVlJiZ0eXBlb2YgdmFsdWVbcHJvcF09PT0nZnVuY3Rpb24nKSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaXNSZWFkTm93UG93ZXJzKGlzUmVhZE5vd1Bvd2Vycyk7XG5jb25zdCAgICAgICAgZmluZEludmFsaWRSZWFkTm93UG93ZXJzUHJvcHM9KHZhbHVlKT0+e1xuaWYoIXZhbHVlfHx0eXBlb2YgdmFsdWU9PT0nZnVuY3Rpb24nKXtcbnJldHVyblsuLi5yZXF1aXJlZFJlYWROb3dQb3dlcnNQcm9wc107XG4gfVxucmV0dXJuIHJlcXVpcmVkUmVhZE5vd1Bvd2Vyc1Byb3BzLmZpbHRlcihcbihwcm9wKT0+IShwcm9wIGluIHZhbHVlKXx8dHlwZW9mIHZhbHVlW3Byb3BdIT09J2Z1bmN0aW9uJyk7XG5cbiB9OyRozY9fb25jZS5maW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyhmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1bnBhY2tSZWFkUG93ZXJzIjpbInVucGFja1JlYWRQb3dlcnMiXSwiaXNSZWFkTm93UG93ZXJzIjpbImlzUmVhZE5vd1Bvd2VycyJdLCJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyI6WyJmaW5kSW52YWxpZFJlYWROb3dQb3dlcnNQcm9wcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAA1AAAAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvdHlwZXMtZXh0ZXJuYWwuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb24oZ2V0RW52aXJvbm1lbnRPcHRpb24pOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRozY9fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAABAZW5kby9lcnJvcnMtdjEuMi44L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH5dVSulEAAApRAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0cmFja1R1cm5zLG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRozY9fYSA9PiAodHJhY2tUdXJucyA9ICRozY9fYSldXV1dLFtcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuLypcblxuICovXG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALFYNphSAgAAUgIAABkAAABAZW5kby9leG8tdjEuNS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2V4by1tYWtlcnMuanMiLCIuL3NyYy90eXBlcy5qcyIsIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9leG8tbWFrZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiLi9zcmMvZ2V0LWludGVyZmFjZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2dldC1pbnRlcmZhY2UuanMiOltbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiLCJHRVRfSU5URVJGQUNFX0dVQVJEIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA+gd+91xQAANcUAAAiAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLW1ha2Vycy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vudi1vcHRpb25zIiwiQGVuZG8vZXJyb3JzIiwiLi9leG8tdG9vbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzS2l0IiwiaW5pdEVtcHR5IiwibWFrZUV4byJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjNj19hKV1dLFtcImRlZmVuZFByb3RvdHlwZUtpdFwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzKGRlZmluZUV4b0NsYXNzKTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxubWV0aG9kc0tpdCxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzS2l0KTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgY29udGV4dE1hcEtpdD1vYmplY3RNYXAobWV0aG9kc0tpdCwoKT0+bmV3IFdlYWtNYXAoKSk7XG5jb25zdCBnZXRDb250ZXh0S2l0PW9iamVjdE1hcChcbmNvbnRleHRNYXBLaXQsXG4oY29udGV4dE1hcCk9PihmYWNldCk9PmNvbnRleHRNYXAuZ2V0KGZhY2V0KSk7XG5cbmNvbnN0IHByb3RvdHlwZUtpdD1kZWZlbmRQcm90b3R5cGVLaXQoXG50YWcsXG5nZXRDb250ZXh0S2l0LFxubWV0aG9kc0tpdCxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlS2l0PSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD17c3RhdGUsZmFjZXRzOm51bGx9O1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IGZhY2V0cz1vYmplY3RNYXAocHJvdG90eXBlS2l0LChwcm90byxmYWNldE5hbWUpPT57XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuY29udGV4dE1hcEtpdFtmYWNldE5hbWVdLnNldChzZWxmLGNvbnRleHQpO1xucmV0dXJuIHNlbGY7XG4gfSk7XG5jb250ZXh0LmZhY2V0cz1mYWNldHM7XG4vL1xuZnJlZXplKGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9jb250ZXh0LmZhY2V0cyk7XG4gfTtcblxuaWYocmVjZWl2ZUFtcGxpZmllcil7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbXBsaWZ5PShleG9GYWNldCk9PntcbmZvcihjb25zdCBjb250ZXh0TWFwIG9mIHZhbHVlcyhjb250ZXh0TWFwS2l0KSl7XG5pZihjb250ZXh0TWFwLmhhcyhleG9GYWNldCkpe1xuY29uc3R7ZmFjZXRzfT1jb250ZXh0TWFwLmdldChleG9GYWNldCk7XG5yZXR1cm4gZmFjZXRzO1xuIH1cbiB9XG50aHJvdyBGYWlsIGBNdXN0IGJlIGEgZmFjZXQgb2YgJHtxKHRhZyl9OiAke2V4b0ZhY2V0fWA7XG4gfTtcbmhhcmRlbihhbXBsaWZ5KTtcbnJlY2VpdmVBbXBsaWZpZXIoYW1wbGlmeSk7XG4gfVxuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvRmFjZXQsZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmlmKGZhY2V0TmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdmFsdWVzKGNvbnRleHRNYXBLaXQpLnNvbWUoKGNvbnRleHRNYXApPT5cbmNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSk7XG5cbiB9XG5hc3NlcnQudHlwZW9mKGZhY2V0TmFtZSwnc3RyaW5nJyk7XG5jb25zdCBjb250ZXh0TWFwPWNvbnRleHRNYXBLaXRbZmFjZXROYW1lXTtcbmNvbnRleHRNYXAhPT11bmRlZmluZWR8fFxuRmFpbCBgZXhvIGNsYXNzIGtpdCAke3EodGFnKX0gaGFzIG5vIGZhY2V0IG5hbWVkICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZUtpdCk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaM2PX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7uWwbmLwAA5i8AACEAAABAZW5kby9leG8tdjEuNS43L3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRNZXRob2ROYW1lcyxoYXNPd25Qcm9wZXJ0eU9mLHRvVGhyb3dhYmxlLEUsRmFyLG11c3RNYXRjaCxNLGlzQXdhaXRBcmdHdWFyZCxpc1Jhd0d1YXJkLGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkLGdldE1ldGhvZEd1YXJkUGF5bG9hZCxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsZ2V0Q29weU1hcEVudHJpZXMsbGlzdERpZmZlcmVuY2Usb2JqZWN0TWFwLHEsRmFpbCxHRVRfSU5URVJGQUNFX0dVQVJEOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9UaHJvd2FibGVcIiwgWyRozY9fYSA9PiAodG9UaHJvd2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImlzQXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChpc0F3YWl0QXJnR3VhcmQgPSAkaM2PX2EpXV0sW1wiaXNSYXdHdWFyZFwiLCBbJGjNj19hID0+IChpc1Jhd0d1YXJkID0gJGjNj19hKV1dLFtcImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldE1ldGhvZEd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRNZXRob2RHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2dldC1pbnRlcmZhY2UuanNcIiwgW1tcIkdFVF9JTlRFUkZBQ0VfR1VBUkRcIiwgWyRozY9fYSA9PiAoR0VUX0lOVEVSRkFDRV9HVUFSRCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2RlZmluZVByb3BlcnRpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IFJhd01ldGhvZEd1YXJkPU0uY2FsbCgpLnJlc3QoTS5yYXcoKSkucmV0dXJucyhNLnJhdygpKTtcblxuY29uc3QgUkVEQUNURURfUkFXX0FSRz0nPHJlZGFjdGVkIHJhdyBhcmc+JztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFBhc3NhYmxlTWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLmFueSgpKS5yZXR1cm5zKE0uYW55KCkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNBcmdzPShzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbD11bmRlZmluZWQpPT57XG5jb25zdHtcbmRlY2xhcmVkTGVuLFxuaGFzUmVzdEFyZ0d1YXJkLFxucmVzdEFyZ0d1YXJkSXNSYXcsXG5wYXJhbXNQYXR0ZXJuLFxucmVkYWN0ZWRJbmRpY2VzfT1cbm1hdGNoQ29uZmlnO1xuXG4vL1xuLy9cbmxldCBtYXRjaGFibGVBcmdzPXN5bmNBcmdzO1xuaWYocmVzdEFyZ0d1YXJkSXNSYXcmJnN5bmNBcmdzLmxlbmd0aD5kZWNsYXJlZExlbil7XG5jb25zdCByZXN0TGVuPXN5bmNBcmdzLmxlbmd0aC1kZWNsYXJlZExlbjtcbmNvbnN0IHJlZGFjdGVkUmVzdD1BcnJheShyZXN0TGVuKS5maWxsKFJFREFDVEVEX1JBV19BUkcpO1xubWF0Y2hhYmxlQXJncz1bLi4uc3luY0FyZ3Muc2xpY2UoMCxkZWNsYXJlZExlbiksLi4ucmVkYWN0ZWRSZXN0XTtcbiB9ZWxzZSBpZihcbnJlZGFjdGVkSW5kaWNlcy5sZW5ndGg+MCYmXG5yZWRhY3RlZEluZGljZXNbMF08c3luY0FyZ3MubGVuZ3RoKVxue1xuLy9cbi8vXG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJnc107XG4gfVxuXG5mb3IoY29uc3QgaSBvZiByZWRhY3RlZEluZGljZXMpe1xuaWYoaT49bWF0Y2hhYmxlQXJncy5sZW5ndGgpe1xuYnJlYWs7XG4gfVxubWF0Y2hhYmxlQXJnc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xuIH1cblxubXVzdE1hdGNoKGhhcmRlbihtYXRjaGFibGVBcmdzKSxwYXJhbXNQYXR0ZXJuLGxhYmVsKTtcblxuaWYoaGFzUmVzdEFyZ0d1YXJkKXtcbnJldHVybiBzeW5jQXJncztcbiB9XG5zeW5jQXJncy5sZW5ndGg8PWRlY2xhcmVkTGVufHxcbkZhaWwgYCR7cShsYWJlbCl9IGFjY2VwdHMgYXQgbW9zdCAke3EoZGVjbGFyZWRMZW4pfSBhcmd1bWVudHMsIG5vdCAke3EoXG5zeW5jQXJncy5sZW5ndGgpXG4gfTogJHtzeW5jQXJnc31gO1xucmV0dXJuIHN5bmNBcmdzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYnVpbGRNYXRjaENvbmZpZz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG5cbmNvbnN0IG1hdGNoYWJsZUFyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgcmVkYWN0ZWRJbmRpY2VzPVtdO1xuZm9yKGxldCBpPTA7aTxtYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVBcmdHdWFyZHNbaV0pKXtcbm1hdGNoYWJsZUFyZ0d1YXJkc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xucmVkYWN0ZWRJbmRpY2VzLnB1c2goaSk7XG4gfVxuIH1cblxuLy9cbmxldCBtYXRjaGFibGVSZXN0QXJnR3VhcmQ9cmVzdEFyZ0d1YXJkO1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVSZXN0QXJnR3VhcmQpKXtcbm1hdGNoYWJsZVJlc3RBcmdHdWFyZD1NLmFycmF5T2YoUkVEQUNURURfUkFXX0FSRyk7XG4gfVxuY29uc3QgbWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkPWhhcmRlbih7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6bWF0Y2hhYmxlQXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCksXG5yZXN0QXJnR3VhcmQ6bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkfSk7XG5cblxuY29uc3QgcGFyYW1zUGF0dGVybj1NLnNwbGl0QXJyYXkoXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQuYXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLm9wdGlvbmFsQXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLnJlc3RBcmdHdWFyZCk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5kZWNsYXJlZExlbjptYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoLFxuaGFzUmVzdEFyZ0d1YXJkOnJlc3RBcmdHdWFyZCE9PXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZElzUmF3OnJlc3RBcmdHdWFyZCE9PW1hdGNoYWJsZVJlc3RBcmdHdWFyZCxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWR9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRTeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5jb25zdCBtYXRjaENvbmZpZz1idWlsZE1hdGNoQ29uZmlnKG1ldGhvZEd1YXJkUGF5bG9hZCk7XG5jb25zdHtzeW5jTWV0aG9kfT17XG4vL1xuc3luY01ldGhvZCguLi5zeW5jQXJncyl7XG50cnl7XG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG4vL1xuY29uc3QgcmVhbEFyZ3M9ZGVmZW5kU3luY0FyZ3Moc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWwpO1xuY29uc3QgcmVzdWx0PWFwcGx5KGJlaGF2aW9yTWV0aG9kLGNvbnRleHQscmVhbEFyZ3MpO1xuaWYoIWlzUmF3UmV0dXJuKXtcbm11c3RNYXRjaChoYXJkZW4ocmVzdWx0KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaCh0aHJvd25UaGluZyl7XG50aHJvdyB0b1Rocm93YWJsZSh0aHJvd25UaGluZyk7XG4gfVxuIH19O1xuXG5yZXR1cm4gc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IGRlc3luYz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG4haXNBd2FpdEFyZ0d1YXJkKHJlc3RBcmdHdWFyZCl8fFxuRmFpbCBgUmVzdCBhcmdzIG1heSBub3QgYmUgYXdhaXRlZDogJHtyZXN0QXJnR3VhcmR9YDtcbmNvbnN0IHJhd0FyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgYXdhaXRJbmRleGVzPVtdO1xuZm9yKGxldCBpPTA7aTxyYXdBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgYXJnR3VhcmQ9cmF3QXJnR3VhcmRzW2ldO1xuaWYoaXNBd2FpdEFyZ0d1YXJkKGFyZ0d1YXJkKSl7XG5yYXdBcmdHdWFyZHNbaV09Z2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkO1xuYXdhaXRJbmRleGVzLnB1c2goaSk7XG4gfVxuIH1cbnJldHVybntcbmF3YWl0SW5kZXhlcyxcbnJhd01ldGhvZEd1YXJkUGF5bG9hZDp7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6cmF3QXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCl9fTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRBc3luY01ldGhvZD0oXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk9Plxue1xuY29uc3R7cmV0dXJuR3VhcmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmNvbnN0IGlzUmF3UmV0dXJuPWlzUmF3R3VhcmQocmV0dXJuR3VhcmQpO1xuXG5jb25zdHthd2FpdEluZGV4ZXMscmF3TWV0aG9kR3VhcmRQYXlsb2FkfT1kZXN5bmMobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcocmF3TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuY29uc3R7YXN5bmNNZXRob2R9PXtcbi8vXG5hc3luY01ldGhvZCguLi5hcmdzKXtcbmNvbnN0IGF3YWl0TGlzdD1bXTtcbmZvcihjb25zdCBpIG9mIGF3YWl0SW5kZXhlcyl7XG5pZihpPj1hcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5hd2FpdExpc3QucHVzaChhcmdzW2ldKTtcbiB9XG5jb25zdCBwPVByb21pc2UuYWxsKGF3YWl0TGlzdCk7XG5jb25zdCBzeW5jQXJncz1bLi4uYXJnc107XG5jb25zdCByZXN1bHRQPUUud2hlbihcbnAsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8oYXdhaXRlZEFyZ3MpPT57XG5mb3IobGV0IGo9MDtqPGF3YWl0ZWRBcmdzLmxlbmd0aDtqKz0xKXtcbnN5bmNBcmdzW2F3YWl0SW5kZXhlc1tqXV09YXdhaXRlZEFyZ3Nbal07XG4gfVxuLy9cbi8vXG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5yZXR1cm4gYXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG4gfSk7XG5cbnJldHVybiBFLndoZW4ocmVzdWx0UCwoZnVsZmlsbG1lbnQpPT57XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihmdWxmaWxsbWVudCkscmV0dXJuR3VhcmQsIGAke2xhYmVsfTogcmVzdWx0YCk7XG4gfVxucmV0dXJuIGZ1bGZpbGxtZW50O1xuIH0pLmNhdGNoKChyZWFzb24pPT5cbi8vXG4vL1xuUHJvbWlzZS5yZWplY3QodG9UaHJvd2FibGUocmVhc29uKSkpO1xuXG4gfX07XG5cbnJldHVybiBhc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kTWV0aG9kPShnZXRDb250ZXh0LGJlaGF2aW9yTWV0aG9kLG1ldGhvZEd1YXJkLGxhYmVsKT0+e1xuY29uc3QgbWV0aG9kR3VhcmRQYXlsb2FkPWdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdHtjYWxsS2luZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuaWYoY2FsbEtpbmQ9PT0nc3luYycpe1xucmV0dXJuIGRlZmVuZFN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9ZWxzZXtcbmFzc2VydChjYWxsS2luZD09PSdhc3luYycpO1xucmV0dXJuIGRlZmVuZEFzeW5jTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYmluZE1ldGhvZD0oXG5tZXRob2RUYWcsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkKT0+XG57XG5hc3NlcnQudHlwZW9mKGJlaGF2aW9yTWV0aG9kLCdmdW5jdGlvbicpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRDb250ZXh0PShyZXByZXNlbnRhdGl2ZSk9PntcbnJlcHJlc2VudGF0aXZlfHxcbi8vXG5GYWlsIGBNZXRob2QgJHttZXRob2RUYWd9IGNhbGxlZCB3aXRob3V0ICd0aGlzJyBvYmplY3RgO1xuY29uc3QgY29udGV4dD1jb250ZXh0UHJvdmlkZXIocmVwcmVzZW50YXRpdmUpO1xuaWYoY29udGV4dD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGAke3EoXG5tZXRob2RUYWcpXG4gfSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIGEgdmFsaWQgaW5zdGFuY2U6ICR7cmVwcmVzZW50YXRpdmV9YDtcbiB9XG5yZXR1cm4gY29udGV4dDtcbiB9O1xuXG5jb25zdCBtZXRob2Q9ZGVmZW5kTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQsXG5tZXRob2RUYWcpO1xuXG5cbmRlZmluZVByb3BlcnRpZXMobWV0aG9kLHtcbm5hbWU6e3ZhbHVlOm1ldGhvZFRhZ30sXG5sZW5ndGg6e3ZhbHVlOmJlaGF2aW9yTWV0aG9kLmxlbmd0aH19KTtcblxucmV0dXJuIG1ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlPShcbnRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBwcm90b3R5cGU9e307XG5jb25zdCBtZXRob2ROYW1lcz1nZXRNZXRob2ROYW1lcyhiZWhhdmlvck1ldGhvZHMpLmZpbHRlcihcbi8vXG4vL1xuKGtleSk9PntcbmlmKGtleSE9PSdjb25zdHJ1Y3Rvcicpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgY29uc3RydWN0b3I9YmVoYXZpb3JNZXRob2RzLmNvbnN0cnVjdG9yO1xucmV0dXJuIShcbmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmXG5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcik7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtZXRob2RHdWFyZHM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRlZmF1bHRHdWFyZHM7XG5pZihpbnRlcmZhY2VHdWFyZCl7XG5jb25zdHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6bWcsXG5zeW1ib2xNZXRob2RHdWFyZHMsXG5zbG9wcHksXG5kZWZhdWx0R3VhcmRzOmRnPXNsb3BweT8ncGFzc2FibGUnOmRlZmF1bHRHdWFyZHN9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbm1ldGhvZEd1YXJkcz1oYXJkZW4oe1xuLi4ubWcsXG4uLi4oc3ltYm9sTWV0aG9kR3VhcmRzJiZcbmZyb21FbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKHN5bWJvbE1ldGhvZEd1YXJkcykpKX0pO1xuXG5kZWZhdWx0R3VhcmRzPWRnO1xue1xuY29uc3QgbWV0aG9kR3VhcmROYW1lcz1vd25LZXlzKG1ldGhvZEd1YXJkcyk7XG5jb25zdCB1bmltcGxlbWVudGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZEd1YXJkTmFtZXMsbWV0aG9kTmFtZXMpO1xudW5pbXBsZW1lbnRlZC5sZW5ndGg9PT0wfHxcbkZhaWwgYG1ldGhvZHMgJHtxKHVuaW1wbGVtZW50ZWQpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmlmKGRlZmF1bHRHdWFyZHM9PT11bmRlZmluZWQpe1xuY29uc3QgdW5ndWFyZGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZE5hbWVzLG1ldGhvZEd1YXJkTmFtZXMpO1xudW5ndWFyZGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5ndWFyZGVkKX0gbm90IGd1YXJkZWQgYnkgJHtxKGludGVyZmFjZU5hbWUpfWA7XG4gfVxuIH1cbiB9XG5cbmZvcihjb25zdCBwcm9wIG9mIG1ldGhvZE5hbWVzKXtcbmNvbnN0IG9yaWdpbmFsTWV0aG9kPWJlaGF2aW9yTWV0aG9kc1twcm9wXTtcbmNvbnN0e3NoaWZ0ZWRNZXRob2R9PXtcbnNoaWZ0ZWRNZXRob2QoLi4uYXJncyl7XG5yZXR1cm4gb3JpZ2luYWxNZXRob2QodGhpcywuLi5hcmdzKTtcbiB9fTtcblxuY29uc3QgYmVoYXZpb3JNZXRob2Q9dGhpc2Z1bE1ldGhvZHM/b3JpZ2luYWxNZXRob2Q6c2hpZnRlZE1ldGhvZDtcbi8vXG4vL1xubGV0IG1ldGhvZEd1YXJkPW1ldGhvZEd1YXJkcyYmbWV0aG9kR3VhcmRzW3Byb3BdO1xuaWYoIW1ldGhvZEd1YXJkKXtcbnN3aXRjaChkZWZhdWx0R3VhcmRzKXtcbmNhc2UgdW5kZWZpbmVkOntcbmlmKHRoaXNmdWxNZXRob2RzKXtcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG4gfWVsc2V7XG5tZXRob2RHdWFyZD1SYXdNZXRob2RHdWFyZDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3Bhc3NhYmxlJzp7XG5tZXRob2RHdWFyZD1QYXNzYWJsZU1ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuY2FzZSdyYXcnOntcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZGVmYXVsdEd1YXJkcyAke3EoZGVmYXVsdEd1YXJkcyl9YDtcbiB9fVxuXG4gfVxucHJvdG90eXBlW3Byb3BdPWJpbmRNZXRob2QoXG4gYEluICR7cShwcm9wKX0gbWV0aG9kIG9mICgke3RhZ30pYCxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5pZighaGFzT3duUHJvcGVydHlPZihwcm90b3R5cGUsR0VUX0lOVEVSRkFDRV9HVUFSRCkpe1xuY29uc3QgZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2Q9e1xuW0dFVF9JTlRFUkZBQ0VfR1VBUkRdKCl7XG4vL1xucmV0dXJuIGludGVyZmFjZUd1YXJkO1xuIH19W1xuR0VUX0lOVEVSRkFDRV9HVUFSRF07XG5wcm90b3R5cGVbR0VUX0lOVEVSRkFDRV9HVUFSRF09YmluZE1ldGhvZChcbiBgSW4gJHtxKEdFVF9JTlRFUkZBQ0VfR1VBUkQpfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2QsXG5QYXNzYWJsZU1ldGhvZEd1YXJkKTtcblxuIH1cblxucmV0dXJuIEZhcihcbnRhZyxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wcm90b3R5cGUpO1xuXG5cbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGUoZGVmZW5kUHJvdG90eXBlKTtcbmhhcmRlbihkZWZlbmRQcm90b3R5cGUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlS2l0PShcbnRhZyxcbmNvbnRleHRQcm92aWRlcktpdCxcbmJlaGF2aW9yTWV0aG9kc0tpdCxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmRLaXQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBmYWNldE5hbWVzPW93bktleXMoYmVoYXZpb3JNZXRob2RzS2l0KS5zb3J0KCk7XG5mYWNldE5hbWVzLmxlbmd0aD4xfHxGYWlsIGBBIG11bHRpLWZhY2V0IG9iamVjdCBtdXN0IGhhdmUgbXVsdGlwbGUgZmFjZXRzYDtcbmlmKGludGVyZmFjZUd1YXJkS2l0KXtcbmNvbnN0IGludGVyZmFjZU5hbWVzPW93bktleXMoaW50ZXJmYWNlR3VhcmRLaXQpO1xuY29uc3QgZXh0cmFJbnRlcmZhY2VOYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGludGVyZmFjZU5hbWVzKTtcbmV4dHJhSW50ZXJmYWNlTmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBJbnRlcmZhY2VzICR7cShleHRyYUludGVyZmFjZU5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoaW50ZXJmYWNlTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBub3QgZ3VhcmRlZCBieSBpbnRlcmZhY2VzYDtcbiB9XG5jb25zdCBjb250ZXh0TWFwTmFtZXM9b3duS2V5cyhjb250ZXh0UHJvdmlkZXJLaXQpO1xuY29uc3QgZXh0cmFDb250ZXh0TmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxjb250ZXh0TWFwTmFtZXMpO1xuZXh0cmFDb250ZXh0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBDb250ZXh0cyAke3EoZXh0cmFDb250ZXh0TmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShjb250ZXh0TWFwTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBtaXNzaW5nIGNvbnRleHRzYDtcbmNvbnN0IHByb3RvS2l0PW9iamVjdE1hcChiZWhhdmlvck1ldGhvZHNLaXQsKGJlaGF2aW9yTWV0aG9kcyxmYWNldE5hbWUpPT5cbmRlZmVuZFByb3RvdHlwZShcbiBgJHt0YWd9ICR7U3RyaW5nKGZhY2V0TmFtZSl9YCxcbmNvbnRleHRQcm92aWRlcktpdFtmYWNldE5hbWVdLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHMsXG5pbnRlcmZhY2VHdWFyZEtpdCYmaW50ZXJmYWNlR3VhcmRLaXRbZmFjZXROYW1lXSkpO1xuXG5cbnJldHVybiBwcm90b0tpdDtcbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGVLaXQoZGVmZW5kUHJvdG90eXBlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmVuZFByb3RvdHlwZSI6WyJkZWZlbmRQcm90b3R5cGUiXSwiZGVmZW5kUHJvdG90eXBlS2l0IjpbImRlZmVuZFByb3RvdHlwZUtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABGkzxuNgIAADYCAAAlAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZ2V0LWludGVyZmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfSU5URVJGQUNFX0dVQVJEPSdfX2dldEludGVyZmFjZUd1YXJkX18nO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX0lOVEVSRkFDRV9HVUFSRChHRVRfSU5URVJGQUNFX0dVQVJEKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkdFVF9JTlRFUkZBQ0VfR1VBUkQiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAABAZW5kby9mYXItdjEuMS45L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2V2ZW50dWFsLXNlbmQiOltbIkUiLCJFIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJGYXIiLCJGYXIiXSxbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXSxbInBhc3NTdHlsZU9mIiwicGFzc1N0eWxlT2YiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGnwGZ8zCgAAMwoAADUAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMi9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCwgJ25hbWUnLCB7dmFsdWU6IFwid3JhcEluZXNjYXBhYmxlQ29tcGFydG1lbnRcIn0pOyRozY9fb25jZS53cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCk7ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgY29tcGFydG1lbnRPcHRpb25zPSguLi5hcmdzKT0+e1xuaWYoYXJncy5sZW5ndGg9PT0wKXtcbnJldHVybnt9O1xuIH1cbmlmKFxuYXJncy5sZW5ndGg9PT0xJiZcbnR5cGVvZiBhcmdzWzBdPT09J29iamVjdCcmJlxuYXJnc1swXSE9PW51bGwmJlxuJ19fb3B0aW9uc19fJ2luIGFyZ3NbMF0pXG57XG5jb25zdHtfX29wdGlvbnNfXywuLi5vcHRpb25zfT1hcmdzWzBdO1xuYXNzZXJ0KFxuX19vcHRpb25zX189PT10cnVlLFxuIGBDb21wYXJ0bWVudCBjb25zdHJ1Y3RvciBvbmx5IHN1cHBvcnRzIHRydWUgX19vcHRpb25zX18gc2lnaWwsIGdvdCAke19fb3B0aW9uc19ffWApO1xuXG5yZXR1cm4gb3B0aW9ucztcbiB9ZWxzZXtcbmNvbnN0W1xuZ2xvYmFscz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5tb2R1bGVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICove30sXG5vcHRpb25zPXt9XT1cbmFyZ3M7XG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLm1vZHVsZXMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgYSBtb2R1bGUgbWFwIGFyZ3VtZW50IG9yIG1vZHVsZXMgb3B0aW9uLCBub3QgYm90aGApO1xuXG5hc3NlcnQuZXF1YWwoXG5vcHRpb25zLmdsb2JhbHMsXG51bmRlZmluZWQsXG4gYENvbXBhcnRtZW50IGNvbnN0cnVjdG9yIG11c3QgcmVjZWl2ZSBlaXRoZXIgZ2xvYmFscyBhcmd1bWVudCBvciBvcHRpb24sIG5vdCBib3RoYCk7XG5cbnJldHVybntcbi4uLm9wdGlvbnMsXG5nbG9iYWxzLFxubW9kdWxlc307XG5cbiB9XG4gfTtcblxuZnVuY3Rpb24gICAgICAgIHdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuT2xkQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpXG57XG4vL1xuLy9cbi8vXG5jb25zdCBOZXdDb21wYXJ0bWVudD1mdW5jdGlvbiBDb21wYXJ0bWVudCguLi5hcmdzKXtcbmNvbnN0e3RyYW5zZm9ybXM6b2xkVHJhbnNmb3Jtcz1bXSwuLi5vdGhlck9wdGlvbnN9PVxuY29tcGFydG1lbnRPcHRpb25zKC4uLmFyZ3MpO1xuY29uc3QgbmV3VHJhbnNmb3Jtcz1bLi4ub2xkVHJhbnNmb3JtcywuLi5pbmVzY2FwYWJsZVRyYW5zZm9ybXNdO1xuY29uc3QgbmV3T3B0aW9ucz17XG4uLi5vdGhlck9wdGlvbnMsXG50cmFuc2Zvcm1zOm5ld1RyYW5zZm9ybXMsXG5fX29wdGlvbnNfXzp0cnVlfTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuaWYobmV3LnRhcmdldD09PXVuZGVmaW5lZCl7XG4vL1xudGhyb3cgRXJyb3IoJ0NvbXBhcnRtZW50IG11c3QgYmUgY2FsbGVkIGFzIGEgY29uc3RydWN0b3InKTtcbiB9XG5cbi8vXG5cbmNvbnN0IGM9UmVmbGVjdC5jb25zdHJ1Y3QoT2xkQ29tcGFydG1lbnQsW25ld09wdGlvbnNdLG5ldy50YXJnZXQpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYy5nbG9iYWxUaGlzLkNvbXBhcnRtZW50PU5ld0NvbXBhcnRtZW50O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5mb3IoY29uc3QgcHJvcCBvZiBSZWZsZWN0Lm93bktleXMoaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzKSl7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5nbG9iYWxUaGlzLHByb3Ase1xudmFsdWU6aW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzW3Byb3BdLFxud3JpdGFibGU6dHJ1ZSxcbi8vXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOnRydWV9KTtcblxuIH1cblxucmV0dXJuIGM7XG4gfTtcblxuLy9cbk5ld0NvbXBhcnRtZW50LnByb3RvdHlwZT1PbGRDb21wYXJ0bWVudC5wcm90b3R5cGU7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5yZXR1cm4gTmV3Q29tcGFydG1lbnQ7XG4gfVxuXG4vL1xuLy9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50IjpbIndyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABzGkF4jDAAAIwwAACcAAABAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyL2ltcG9ydC1hcmNoaXZlLmpzIiwiQGVuZG8vYmFzZTY0IiwiQGVuZG8vZXJyb3JzIiwiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzIl0sImV4cG9ydHMiOlsiaW1wb3J0QnVuZGxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhcnNlQXJjaGl2ZSxkZWNvZGVCYXNlNjQsRmFpbCx3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci9pbXBvcnQtYXJjaGl2ZS5qc1wiLCBbW1wicGFyc2VBcmNoaXZlXCIsIFskaM2PX2EgPT4gKHBhcnNlQXJjaGl2ZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Jhc2U2NFwiLCBbW1wiZGVjb2RlQmFzZTY0XCIsIFskaM2PX2EgPT4gKGRlY29kZUJhc2U2NCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb21wYXJ0bWVudC13cmFwcGVyLmpzXCIsIFtbXCJ3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudFwiLCBbJGjNj19hID0+ICh3cmFwSW5lc2NhcGFibGVDb21wYXJ0bWVudCA9ICRozY9fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGltcG9ydEJ1bmRsZSwgJ25hbWUnLCB7dmFsdWU6IFwiaW1wb3J0QnVuZGxlXCJ9KTskaM2PX29uY2UuaW1wb3J0QnVuZGxlKGltcG9ydEJ1bmRsZSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG5cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBpbXBvcnRCdW5kbGUoYnVuZGxlLG9wdGlvbnM9e30scG93ZXJzPXt9KXtcbmF3YWl0IG51bGw7XG5jb25zdHtcbmJ1bmRsZVVybD11bmRlZmluZWQsXG5maWxlUHJlZml4LFxuZW5kb3dtZW50czpvcHRFbmRvd21lbnRzPXt9LFxuLy9cbi8vXG50cmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zPVtdLFxuaW5lc2NhcGFibGVHbG9iYWxQcm9wZXJ0aWVzPXt9LFxuZXhwZWN0ZWRTaGE1MTI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdHtcbmNvbXB1dGVTaGE1MTI9dW5kZWZpbmVkLFxuY29tcHV0ZVNvdXJjZUxvY2F0aW9uPXVuZGVmaW5lZCxcbmNvbXB1dGVTb3VyY2VNYXBMb2NhdGlvbj11bmRlZmluZWR9PVxucG93ZXJzO1xuY29uc3QgZW5kb3dtZW50cz17XG5UZXh0RW5jb2RlcixcblRleHREZWNvZGVyLFxuVVJMOmdsb2JhbFRoaXMuVVJMLC8vXG5CYXNlNjQ6Z2xvYmFsVGhpcy5CYXNlNjQsLy9cbmF0b2I6Z2xvYmFsVGhpcy5hdG9iLFxuYnRvYTpnbG9iYWxUaGlzLmJ0b2EsXG4uLi5vcHRFbmRvd21lbnRzfTtcblxuXG5sZXQgQ29tcGFydG1lbnRUb1VzZT1Db21wYXJ0bWVudDtcbmlmKFxuaW5lc2NhcGFibGVUcmFuc2Zvcm1zLmxlbmd0aHx8XG5PYmplY3Qua2V5cyhpbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpLmxlbmd0aClcbntcbi8vXG5Db21wYXJ0bWVudFRvVXNlPXdyYXBJbmVzY2FwYWJsZUNvbXBhcnRtZW50KFxuQ29tcGFydG1lbnQsXG5pbmVzY2FwYWJsZVRyYW5zZm9ybXMsXG5pbmVzY2FwYWJsZUdsb2JhbFByb3BlcnRpZXMpO1xuXG4gfVxuXG5sZXQgY29tcGFydG1lbnQ7XG5cbmNvbnN0e21vZHVsZUZvcm1hdH09YnVuZGxlO1xuaWYobW9kdWxlRm9ybWF0PT09J2VuZG9aaXBCYXNlNjQnKXtcbmNvbnN0e2VuZG9aaXBCYXNlNjR9PWJ1bmRsZTtcbmNvbnN0IGJ5dGVzPWRlY29kZUJhc2U2NChlbmRvWmlwQmFzZTY0KTtcbmNvbnN0IGFyY2hpdmU9YXdhaXQgcGFyc2VBcmNoaXZlKGJ5dGVzLGJ1bmRsZVVybCx7XG5jb21wdXRlU2hhNTEyLFxuZXhwZWN0ZWRTaGE1MTIsXG5jb21wdXRlU291cmNlTG9jYXRpb24sXG5jb21wdXRlU291cmNlTWFwTG9jYXRpb259KTtcblxuLy9cbi8vXG5jb25zdHtuYW1lc3BhY2V9PWF3YWl0IGFyY2hpdmVbJ2ltcG9ydCddKHtcbmdsb2JhbHM6ZW5kb3dtZW50cyxcbl9fc2hpbVRyYW5zZm9ybXNfXzp0cmFuc2Zvcm1zLFxuLy9cbkNvbXBhcnRtZW50OkNvbXBhcnRtZW50VG9Vc2V9KTtcblxuLy9cbnJldHVybiBuYW1lc3BhY2U7XG4gfVxuXG5sZXR7c291cmNlfT1idW5kbGU7XG5jb25zdHtzb3VyY2VNYXB9PWJ1bmRsZTtcbmlmKG1vZHVsZUZvcm1hdD09PSdnZXRFeHBvcnQnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nbmVzdGVkRXZhbHVhdGUnKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5lbmRvd21lbnRzLm5lc3RlZEV2YWx1YXRlPShzcmMpPT5jb21wYXJ0bWVudC5ldmFsdWF0ZShzcmMpO1xuc291cmNlPSBgKCR7c291cmNlfSlcXG4ke3NvdXJjZU1hcHx8Jyd9YDtcbiB9ZWxzZSBpZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCBtb2R1bGVGb3JtYXQgJyR7bW9kdWxlRm9ybWF0fSdgO1xuIH1cblxuY29tcGFydG1lbnQ9bmV3IENvbXBhcnRtZW50VG9Vc2UoZW5kb3dtZW50cyx7fSx7dHJhbnNmb3Jtc30pO1xuaGFyZGVuKGNvbXBhcnRtZW50Lmdsb2JhbFRoaXMpO1xuY29uc3QgcmVzdWx0PWNvbXBhcnRtZW50LmV2YWx1YXRlKHNvdXJjZSk7XG5pZihtb2R1bGVGb3JtYXQ9PT0nZW5kb1NjcmlwdCcpe1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1lbHNle1xuLy9cbmNvbnN0IG5hbWVzcGFjZT1yZXN1bHQoZmlsZVByZWZpeCk7XG4vL1xucmV0dXJuIG5hbWVzcGFjZTtcbiB9XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImltcG9ydEJ1bmRsZSI6WyJpbXBvcnRCdW5kbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXbFulWUMAAFlDAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjNj19hID0+IChhc3NlcnRSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaM2PX2EgPT4gKGIgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjNj19vbmNlLnJlY29yZE5hbWVzKHJlY29yZE5hbWVzKTtcbmhhcmRlbihyZWNvcmROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZFZhbHVlcz0ocmVjb3JkLG5hbWVzKT0+XG5oYXJkZW4obmFtZXMubWFwKChuYW1lKT0+cmVjb3JkW25hbWVdKSk7JGjNj19vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRozY9fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjNj19vbmNlLm1ha2VQYXNzYWJsZUtpdChtYWtlUGFzc2FibGVLaXQpO1xuaGFyZGVuKG1ha2VQYXNzYWJsZUtpdCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVBhc3NhYmxlPShlbmNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZW5jb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChlbmNvZGVPcHRpb25zKTtcbnJldHVybiBlbmNvZGVQYXNzYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRozY9fb25jZS5pc0VuY29kZWRSZW1vdGFibGUoaXNFbmNvZGVkUmVtb3RhYmxlKTtcbmhhcmRlbihpc0VuY29kZWRSZW1vdGFibGUpO1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc1N0eWxlUHJlZml4ZXM9e1xuZXJyb3I6JyEnLFxuY29weVJlY29yZDonKCcsXG50YWdnZWQ6JzonLFxucHJvbWlzZTonPycsXG5jb3B5QXJyYXk6J1teJyxcbmJvb2xlYW46J2InLFxubnVtYmVyOidmJyxcbmJpZ2ludDonbnAnLFxucmVtb3RhYmxlOidyJyxcbnN0cmluZzoncycsXG5udWxsOid2JyxcbnN5bWJvbDoneScsXG4vL1xuLy9cbi8vXG51bmRlZmluZWQ6J3onfTskaM2PX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAPShurLiIAAC4iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtpcyxlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0IEJBTkc9JyEnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBEQVNIPSctJy5jaGFyQ29kZUF0KDApO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdGFydHNTcGVjaWFsPShlbmNvZGVkU3RyKT0+e1xuaWYoZW5jb2RlZFN0cj09PScnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuY29uc3QgY29kZT1lbmNvZGVkU3RyLmNoYXJDb2RlQXQoMCk7XG4vL1xucmV0dXJuIEJBTkc8PWNvZGUmJmNvZGU8PURBU0g7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzPShlcnIpPT5cbkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke3EoZXJyKX1gO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb1NtYWxsY2Fwcz0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMsXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzPWRvbnRFbmNvZGVFcnJvclRvU21hbGxjYXBzfT1cbmVuY29kZU9wdGlvbnM7XG5cbmNvbnN0IGFzc2VydEVuY29kZWRFcnJvcj0oZW5jb2RpbmcpPT57XG50eXBlb2YgZW5jb2Rpbmc9PT0nb2JqZWN0JyYmaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBcIiNlcnJvclwiIHByb3BlcnR5OiAke3EoXG5lbmNvZGluZylcbiB9YDtcbi8vXG5jb25zdCBtZXNzYWdlPWVuY29kaW5nWycjZXJyb3InXTtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZycmJihcbiFzdGFydHNTcGVjaWFsKG1lc3NhZ2UpfHxtZXNzYWdlLmNoYXJBdCgwKT09PSchJyl8fFxuRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgaGF2ZSBzdHJpbmcgbWVzc2FnZTogJHtxKG1lc3NhZ2UpfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZihzdGFydHNTcGVjaWFsKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBgISR7cGFzc2FibGV9YDtcbiB9XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4nI3VuZGVmaW5lZCc7XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybicjTmFOJztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybicjSW5maW5pdHknO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybicjLUluZmluaXR5JztcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdCBzdHI9U3RyaW5nKHBhc3NhYmxlKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICovcGFzc2FibGU8MG4/c3RyOmArJHtzdHJ9YCk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybiBgJSR7bmFtZX1gO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W1xuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihuYW1lKSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuJyN0YWcnOmVuY29kZVRvU21hbGxjYXBzUmVjdXIoZ2V0VGFnKHBhc3NhYmxlKSksXG5wYXlsb2FkOmVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PSckJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiRcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJicpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCImXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgcmVzdWx0PWVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwcz0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpKTtcblxuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEULMv0QIwAAECMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGdldEVycm9yQ29uc3RydWN0b3IsaXNPYmplY3QscGFzc2FibGVTeW1ib2xGb3JOYW1lLHEsWCxGYWlsLFFDTEFTUzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaM2PX29uY2UuZGVjb2RlVG9KdXN0aW4oZGVjb2RlVG9KdXN0aW4pO1xuaGFyZGVuKGRlY29kZVRvSnVzdGluKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlY29kZVRvSnVzdGluIjpbImRlY29kZVRvSnVzdGluIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEQSpudcBgAAXAYAAC0AAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9tYXJzaGFsLmpzIl0sImV4cG9ydHMiOlsicGFyc2UiLCJzdHJpbmdpZnkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRWYWxUb1Nsb3Q9KHZhbCk9PlxuRmFpbCBgTWFyc2hhbCdzIHN0cmluZ2lmeSByZWplY3RzIHByZXNlbmNlcyBhbmQgcHJvbWlzZXMgJHt2YWx9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkb05vdENvbnZlcnRTbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+XG5GYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90cyAke3Nsb3R9YDtcblxuY29uc3QgYmFkQXJyYXlIYW5kbGVyPWhhcmRlbih7XG5nZXQ6KF90YXJnZXQsbmFtZSxfcmVjZWl2ZXIpPT57XG5pZihuYW1lPT09J2xlbmd0aCcpe1xucmV0dXJuIDA7XG4gfVxuLy9cbnRocm93IEZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3QgcG9zaXRpb25zICR7bmFtZX1gO1xuIH19KTtcblxuXG5jb25zdCBiYWRBcnJheT1oYXJkZW4obmV3IFByb3h5KGhhcmRlbihbXSksYmFkQXJyYXlIYW5kbGVyKSk7XG5cbmNvbnN0e3NlcmlhbGl6ZSx1bnNlcmlhbGl6ZX09bWFrZU1hcnNoYWwoXG5kb05vdENvbnZlcnRWYWxUb1Nsb3QsXG5kb05vdENvbnZlcnRTbG90VG9WYWwsXG57XG5lcnJvclRhZ2dpbmc6J29mZicsXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdDonY2FwZGF0YSd9KTtcblxuXG5cbi8qXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnk9KHZhbCk9PnNlcmlhbGl6ZSh2YWwpLmJvZHk7JGjNj19vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRozY9fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxhc3NlcnRQYXNzYWJsZSxnZXRJbnRlcmZhY2VPZixnZXRFcnJvckNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5T2YsdG9QYXNzYWJsZUVycm9yLFgsRmFpbCxxLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLG9iamVjdE1hcCxRQ0xBU1MsbWFrZUVuY29kZVRvQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbUNhcERhdGEsbWFrZURlY29kZUZyb21TbWFsbGNhcHMsbWFrZUVuY29kZVRvU21hbGxjYXBzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAodG9QYXNzYWJsZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjNj19hID0+IChRQ0xBU1MgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjNj19hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbUNhcERhdGEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjNj19hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRozY9fYSldXSxbXCJtYWtlRW5jb2RlVG9TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTWFyc2hhbChtYWtlTWFyc2hhbCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFyc2hhbCI6WyJtYWtlTWFyc2hhbCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7402JnCcAAJwnAAAlAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3JhbmtPcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVQYXNzYWJsZS5qcyJdLCJleHBvcnRzIjpbIkZ1bGxSYW5rQ292ZXIiLCJhc3NlcnRSYW5rU29ydGVkIiwiY29tcGFyYXRvck1pcnJvckltYWdlIiwiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZVJhbmsiLCJjb3ZlcmVkRW50cmllcyIsImdldEluZGV4Q292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciIsImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpc1JhbmtTb3J0ZWQiLCJtYWtlQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Iiwic29ydEJ5UmFuayIsInRyaXZpYWxDb21wYXJhdG9yIiwidW5pb25SYW5rQ292ZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAEBlbmRvL25hdC12NS4wLjEzL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRozY9fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaM2PX29uY2UuTmF0KE5hdCk7ICAgLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGlzTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5yZXR1cm4gYWxsZWdlZE51bT49MDtcbiB9XG5pZih0eXBlb2YgYWxsZWdlZE51bSE9PSdudW1iZXInKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSYmYWxsZWdlZE51bT49MDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBhbGxlZ2VkTnVtO1xuIH1cblxuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nbnVtYmVyJyl7XG5pZighTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkpe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYCk7XG4gfVxuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIEJpZ0ludChhbGxlZ2VkTnVtKTtcbiB9XG5cbnRocm93IFR5cGVFcnJvcihcbiBgJHthbGxlZ2VkTnVtfSBpcyBhICR7dHlwZW9mIGFsbGVnZWROdW19IGJ1dCBtdXN0IGJlIGEgYmlnaW50IG9yIGEgbnVtYmVyYCk7XG5cbiB9XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc05hdCI6WyJpc05hdCJdLCJOYXQiOlsiTmF0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiLCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vc3JjL2Vycm9yLmpzIiwiLi9zcmMvcmVtb3RhYmxlLmpzIiwiLi9zcmMvc3ltYm9sLmpzIiwiLi9zcmMvc3RyaW5nLmpzIiwiLi9zcmMvcGFzc1N0eWxlT2YuanMiLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIiwiLi9zcmMvbWFrZS1mYXIuanMiLCIuL3NyYy90eXBlR3VhcmRzLmpzIiwiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJGYXIiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiLCJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIiwiaXNPYmplY3QiLCJpc09iamVjdCIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxhc3NlcnRDaGVja2VyLGdldE93bkRhdGFEZXNjcmlwdG9yOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjNj19vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyz0q1KQgAACkIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxnZXRPd25EYXRhRGVzY3JpcHRvcixDWDskaM2PX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRQcm90b3R5cGVPZixwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja09iamVjdFByb3RvdHlwZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlY29yZHMgbXVzdCBpbmhlcml0IGZyb20gT2JqZWN0LnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvcGVydHlDYW5CZVZhbGlkPShjYW5kaWRhdGUsa2V5LHZhbHVlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbih0eXBlb2Yga2V5PT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbiBvbmx5IGhhdmUgc3RyaW5nLW5hbWVkIHByb3BlcnRpZXM6ICR7Y2FuZGlkYXRlfWApJiYoXG4hY2FuQmVNZXRob2QodmFsdWUpfHxcbiEhY2hlY2smJlxuLy9cbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2Fubm90IGNvbnRhaW4gbm9uLWZhciBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IG1heSBiZSBtZXRob2RzIG9mIGFuIGltcGxpY2l0IFJlbW90YWJsZTogJHtjYW5kaWRhdGV9YCkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5UmVjb3JkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlSZWNvcmQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGNoZWNrKSYmXG4vL1xuLy9cbm93bktleXMoY2FuZGlkYXRlKS5ldmVyeSgoa2V5KT0+XG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsa2V5LGNhbmRpZGF0ZVtrZXldLGNoZWNrKSkpO1xuXG5cbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG4vL1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhjYW5kaWRhdGUpKXtcbmNvbnN0e3ZhbHVlfT1nZXRPd25EYXRhRGVzY3JpcHRvcihcbmNhbmRpZGF0ZSxcbm5hbWUsXG50cnVlLFxuYXNzZXJ0Q2hlY2tlcik7XG5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxuYW1lLHZhbHVlLGFzc2VydENoZWNrZXIpO1xucGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSk7XG4gfVxuIH19KTskaM2PX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABwIuV6VgoAAFYKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsYXNzZXJ0Q2hlY2tlcixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaM2PX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRozY9fb25jZS5pc0Vycm9yTGlrZShpc0Vycm9yTGlrZSk7XG5oYXJkZW4oaXNFcnJvckxpa2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKGRlc2MuZW51bWVyYWJsZSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtkZXNjfWApO1xuXG4gfVxuaWYoIWhhc093bihkZXNjLCd2YWx1ZScpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eTogJHtkZXNjfWApO1xuXG4gfVxuY29uc3R7dmFsdWV9PWRlc2M7XG5zd2l0Y2gocHJvcE5hbWUpe1xuY2FzZSdtZXNzYWdlJzpcbmNhc2Unc3RhY2snOntcbnJldHVybihcbnR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgc3RyaW5nOiAke3ZhbHVlfWApO1xuXG4gfVxuY2FzZSdjYXVzZSc6e1xuLy9cbnJldHVybiBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcih2YWx1ZSxwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9ycyc6e1xuaWYoIUFycmF5LmlzQXJyYXkodmFsdWUpfHxwYXNzU3R5bGVPZlJlY3VyKHZhbHVlKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IGJlIGEgY29weUFycmF5OiAke3ZhbHVlfWApO1xuXG4gfVxucmV0dXJuIHZhbHVlLmV2ZXJ5KChlcnIpPT5cbi8vXG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2ZSZWN1cixjaGVjaykpO1xuXG4gfVxuZGVmYXVsdDp7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgaGFzIGV4dHJhIHVucGFzc2VkIHByb3BlcnR5ICR7cShwcm9wTmFtZSl9YCk7XG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRozY9fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaM2PX29uY2UuRXJyb3JIZWxwZXIoRXJyb3JIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0RXJyb3JDb25zdHJ1Y3RvciI6WyJnZXRFcnJvckNvbnN0cnVjdG9yIl0sImlzRXJyb3JMaWtlIjpbImlzRXJyb3JMaWtlIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIl0sImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIjpbImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yIl0sIkVycm9ySGVscGVyIjpbIkVycm9ySGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvaXRlci1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIi4vbWFrZS1mYXIuanMiXSwiZXhwb3J0cyI6WyJmaWx0ZXJJdGVyYWJsZSIsIm1hcEl0ZXJhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRozY9fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaM2PX29uY2UuZmlsdGVySXRlcmFibGUoZmlsdGVySXRlcmFibGUpO1xuXG5oYXJkZW4oZmlsdGVySXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFwSXRlcmFibGUiOlsibWFwSXRlcmFibGUiXSwiZmlsdGVySXRlcmFibGUiOlsiZmlsdGVySXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlLWZhci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcmVtb3RhYmxlLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiR0VUX01FVEhPRF9OQU1FUyIsIlJlbW90YWJsZSIsIlRvRmFyRnVuY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3R7Y3JlYXRlLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVGFnZ2VkPSh0YWcscGF5bG9hZCk9PntcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBUaGUgdGFnIG9mIGEgdGFnZ2VkIHJlY29yZCBtdXN0IGJlIGEgc3RyaW5nOiAke3RhZ31gO1xuYXNzZXJ0UGFzc2FibGUoaGFyZGVuKHBheWxvYWQpKTtcbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2JqZWN0UHJvdG90eXBlLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3RhZ2dlZCd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOnRhZ30sXG5wYXlsb2FkOnt2YWx1ZTpwYXlsb2FkLGVudW1lcmFibGU6dHJ1ZX19KSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaM2PX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjNj19vbmNlLmlzT2JqZWN0KGlzT2JqZWN0KTtcbmhhcmRlbihpc09iamVjdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1R5cGVkQXJyYXk9KG9iamVjdCk9Pntcbi8vXG5jb25zdCB0YWc9YXBwbHkoZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnLG9iamVjdCxbXSk7XG5yZXR1cm4gdGFnIT09dW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaM2PX29uY2UuY2FuQmVNZXRob2QoY2FuQmVNZXRob2QpO1xuaGFyZGVuKGNhbkJlTWV0aG9kKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENoZWNrZXI9KGNvbmQsZGV0YWlscyk9PntcbmFzc2VydChjb25kLGRldGFpbHMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRozY9fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLmdldE93bkRhdGFEZXNjcmlwdG9yKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcbmhhcmRlbihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRUYWc9KHRhZ1JlY29yZCk9PnRhZ1JlY29yZFtTeW1ib2wudG9TdHJpbmdUYWddOyRozY9fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaM2PX29uY2UuY2hlY2tUYWdSZWNvcmQoY2hlY2tUYWdSZWNvcmQpO1xuXG5oYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuXG5jb25zdCAgICAgICAgY2hlY2tGdW5jdGlvblRhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbnByb3RvIT09bnVsbCYmZ2V0UHJvdG90eXBlT2YocHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhcbmZhbHNlLFxuWCBgRm9yIGZ1bmN0aW9ucywgYSB0YWdSZWNvcmQgbXVzdCBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFKEe3qmFwAAphcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjNj19hID0+IChjYW5CZU1ldGhvZCA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZSxcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tJZmFjZT0oaWZhY2UsY2hlY2spPT57XG5yZXR1cm4oXG4vL1xuKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRm9yIG5vdywgaW50ZXJmYWNlICR7aWZhY2V9IG11c3QgYmUgYSBzdHJpbmc7IHVuaW1wbGVtZW50ZWRgKSYmKFxuaWZhY2U9PT0nUmVtb3RhYmxlJ3x8XG5pZmFjZS5zdGFydHNXaXRoKCdBbGxlZ2VkOiAnKXx8XG5pZmFjZS5zdGFydHNXaXRoKCdEZWJ1Z05hbWU6ICcpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGb3Igbm93LCBpZmFjZSAke3EoXG5pZmFjZSlcbiB9IG11c3QgYmUgXCJSZW1vdGFibGVcIiBvciBiZWdpbiB3aXRoIFwiQWxsZWdlZDogXCIgb3IgXCJEZWJ1Z05hbWU6IFwiOyB1bmltcGxlbWVudGVkYCkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRJZmFjZT0oaWZhY2UpPT5jaGVja0lmYWNlKGlmYWNlLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjNj19vbmNlLlJlbW90YWJsZUhlbHBlcihSZW1vdGFibGVIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0SWZhY2UiOlsiYXNzZXJ0SWZhY2UiXSwiZ2V0SW50ZXJmYWNlT2YiOlsiZ2V0SW50ZXJmYWNlT2YiXSwiUmVtb3RhYmxlSGVscGVyIjpbIlJlbW90YWJsZUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3NhZmUtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRTYWZlUHJvbWlzZSIsImlzU2FmZVByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtpc0Zyb3plbixnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZ309U3ltYm9sO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb21pc2VPd25LZXlzPShwcixjaGVjayk9PntcbmNvbnN0IGtleXM9b3duS2V5cyhwcik7XG5cbmlmKGtleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB1bmtub3duS2V5cz1rZXlzLmZpbHRlcihcbihrZXkpPT50eXBlb2Yga2V5IT09J3N5bWJvbCd8fCFoYXNPd25Qcm9wZXJ0eU9mKFByb21pc2UucHJvdG90eXBlLGtleSkpO1xuXG5cbmlmKHVua25vd25LZXlzLmxlbmd0aCE9PTApe1xucmV0dXJuIENYKFxuY2hlY2spXG4gYCR7cHJ9IC0gTXVzdCBub3QgaGF2ZSBhbnkgb3duIHByb3BlcnRpZXM6ICR7cSh1bmtub3duS2V5cyl9YDtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1NhZmVPd25LZXk9KGtleSk9PntcbmlmKGtleT09PXRvU3RyaW5nVGFnKXtcbi8vXG4vL1xuY29uc3QgdGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHIsdG9TdHJpbmdUYWcpO1xuYXNzZXJ0KHRhZ0Rlc2MhPT11bmRlZmluZWQpO1xucmV0dXJuKFxuKGhhc093blByb3BlcnR5T2YodGFnRGVzYywndmFsdWUnKXx8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgZGF0YSBwcm9wZXJ0eSwgbm90IGFuIGFjY2Vzc29yOiAke3EodGFnRGVzYyl9YCkmJihcbnR5cGVvZiB0YWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgdmFsdWUgbXVzdCBiZSBhIHN0cmluZzogJHtxKHRhZ0Rlc2MudmFsdWUpfWApJiYoXG4hdGFnRGVzYy5lbnVtZXJhYmxlfHxcbkNYKGNoZWNrKSBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBub3QgYmUgZW51bWVyYWJsZTogJHtxKHRhZ0Rlc2MpfWApKTtcblxuIH1cbmNvbnN0IHZhbD1wcltrZXldO1xuaWYodmFsPT09dW5kZWZpbmVkfHx0eXBlb2YgdmFsPT09J251bWJlcicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoXG50eXBlb2YgdmFsPT09J29iamVjdCcmJlxudmFsIT09bnVsbCYmXG5pc0Zyb3plbih2YWwpJiZcbmdldFByb3RvdHlwZU9mKHZhbCk9PT1PYmplY3QucHJvdG90eXBlKVxue1xuY29uc3Qgc3ViS2V5cz1vd25LZXlzKHZhbCk7XG5pZihzdWJLZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG5pZihcbnN1YktleXMubGVuZ3RoPT09MSYmXG5zdWJLZXlzWzBdPT09J2Rlc3Ryb3llZCcmJlxudmFsLmRlc3Ryb3llZD09PWZhbHNlKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBDWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIE5vZGUgYXN5bmNfaG9va3MgYWRkaXRpb25zIHRvIHByb21pc2U6ICR7cHJ9LiR7cShcblN0cmluZyhrZXkpKVxuIH0gaXMgJHt2YWx9YDtcbiB9O1xuXG5yZXR1cm4ga2V5cy5ldmVyeShjaGVja1NhZmVPd25LZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja1NhZmVQcm9taXNlPShwcixjaGVjayk9PntcbnJldHVybihcbihpc0Zyb3plbihwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGZyb3plbmApJiYoXG5pc1Byb21pc2UocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBhIHByb21pc2VgKSYmKFxuZ2V0UHJvdG90eXBlT2YocHIpPT09UHJvbWlzZS5wcm90b3R5cGV8fFxuQ1goY2hlY2spIGAke3ByfSAtIE11c3QgaW5oZXJpdCBmcm9tIFByb21pc2UucHJvdG90eXBlOiAke3EoXG5nZXRQcm90b3R5cGVPZihwcikpXG4gfWApJiZcbmNoZWNrUHJvbWlzZU93bktleXMoLyogICAgICAgICAgICAgICAgICAqL3ByLGNoZWNrKSk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrU2FmZVByb21pc2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsKHgpPT54KTskaM2PX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYl18ssgcAALIHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaM2PX29uY2UuaXNQYXNzYWJsZVN5bWJvbChpc1Bhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihpc1Bhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3ltYm9sPShzeW0pPT5cbmlzUGFzc2FibGVTeW1ib2woc3ltKXx8XG5GYWlsIGBPbmx5IHJlZ2lzdGVyZWQgc3ltYm9scyBvciB3ZWxsLWtub3duIHN5bWJvbHMgYXJlIHBhc3NhYmxlOiAke3Eoc3ltKX1gOyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRozY9fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaM2PX29uY2UucGFzc2FibGVTeW1ib2xGb3JOYW1lKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG5oYXJkZW4ocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGFzc2FibGVTeW1ib2wiOlsiaXNQYXNzYWJsZVN5bWJvbCJdLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiOlsibmFtZUZvclBhc3NhYmxlU3ltYm9sIl0sInBhc3NhYmxlU3ltYm9sRm9yTmFtZSI6WyJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYNVjnhQHAAAUBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90YWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlRhZ2dlZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXSxbXCJjaGVja1Bhc3NTdHlsZVwiLCBbJGjNj19hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaM2PX29uY2UuVGFnZ2VkSGVscGVyKFRhZ2dlZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJUYWdnZWRIZWxwZXIiOlsiVGFnZ2VkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0UmVjb3JkIiwiYXNzZXJ0UmVtb3RhYmxlIiwiaXNDb3B5QXJyYXkiLCJpc1JlY29yZCIsImlzUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMWHV+m3DgAAtw4AAB4AAABAZW5kby9wYXR0ZXJucy12MS40LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMva2V5cy9jaGVja0tleS5qcyIsIi4vc3JjL2tleXMvY29weVNldC5qcyIsIi4vc3JjL2tleXMvY29weUJhZy5qcyIsIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJiYWdVbmlvbiIsImJhZ1VuaW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIiwic2V0Q29tcGFyZSIsInNldENvbXBhcmUiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2tleXMvY2hlY2tLZXkuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weVNldC5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb3B5QmFnLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0Q29weVNldCJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsiaXNDb3B5QmFnIiwiaXNDb3B5QmFnIl0sWyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weUJhZyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl0sWyJhc3NlcnRDb3B5TWFwIiwiYXNzZXJ0Q29weU1hcCJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdXSwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjpbWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdXSwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIjpbWyJjb2VyY2VUb0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiXV0sIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOltbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXV0sIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyI6W1siZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldFVuaW9uIiwic2V0VW5pb24iXSxbInNldERpc2pvaW50VW5pb24iLCJzZXREaXNqb2ludFVuaW9uIl0sWyJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJbnRlcnNlY3Rpb24iXSxbInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiOltbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il1dLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOltbIk0iLCJNIl0sWyJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiXSxbImlzUGF0dGVybiIsImlzUGF0dGVybiJdLFsiYXNzZXJ0UGF0dGVybiIsImFzc2VydFBhdHRlcm4iXSxbIm1hdGNoZXMiLCJtYXRjaGVzIl0sWyJtdXN0TWF0Y2giLCJtdXN0TWF0Y2giXSxbImlzQXdhaXRBcmdHdWFyZCIsImlzQXdhaXRBcmdHdWFyZCJdLFsiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEF3YWl0QXJnR3VhcmQiXSxbImlzUmF3R3VhcmQiLCJpc1Jhd0d1YXJkIl0sWyJhc3NlcnRSYXdHdWFyZCIsImFzc2VydFJhd0d1YXJkIl0sWyJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIl0sWyJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIl0sWyJraW5kT2YiLCJraW5kT2YiXV0sIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOltbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSxbImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sWyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdXSwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6W1sibGlzdERpZmZlcmVuY2UiLCJsaXN0RGlmZmVyZW5jZSJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jaGVja0tleS5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlTZXQuanMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDb3B5QmFnIiwiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlTZXQiLCJhc3NlcnRLZXkiLCJhc3NlcnRQcmltaXRpdmVLZXkiLCJhc3NlcnRTY2FsYXJLZXkiLCJjaGVja0NvcHlCYWciLCJjaGVja0NvcHlNYXAiLCJjaGVja0NvcHlTZXQiLCJjaGVja0tleSIsImNoZWNrU2NhbGFyS2V5IiwiY29weU1hcEtleVNldCIsImV2ZXJ5Q29weUJhZ0VudHJ5IiwiZXZlcnlDb3B5TWFwS2V5IiwiZXZlcnlDb3B5TWFwVmFsdWUiLCJldmVyeUNvcHlTZXRLZXkiLCJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiLCJnZXRDb3B5TWFwS2V5cyIsImdldENvcHlNYXBWYWx1ZXMiLCJnZXRDb3B5U2V0S2V5cyIsImlzQ29weUJhZyIsImlzQ29weU1hcCIsImlzQ29weVNldCIsImlzS2V5IiwiaXNQcmltaXRpdmVLZXkiLCJpc1NjYWxhcktleSIsIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weU1hcCIsIm1ha2VDb3B5U2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImNoZWNrRWxlbWVudHNcIiwgWyRozY9fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1ByaW1pdGl2ZUtleShpc1ByaW1pdGl2ZUtleSk7XG5oYXJkZW4oaXNQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFByaW1pdGl2ZUtleT0odmFsKT0+e1xuY2hlY2tQcmltaXRpdmVLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1NjYWxhcktleShpc1NjYWxhcktleSk7XG5oYXJkZW4oaXNTY2FsYXJLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFNjYWxhcktleT0odmFsKT0+e1xuY2hlY2tTY2FsYXJLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0tleShpc0tleSk7XG5oYXJkZW4oaXNLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEtleT0odmFsKT0+e1xuY2hlY2tLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuaGFyZGVuKGlzQ29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlTZXQ9KHMpPT57XG5jaGVja0NvcHlTZXQocyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5U2V0S2V5KGV2ZXJ5Q29weVNldEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5U2V0S2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5U2V0PShlbGVtZW50SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50SXRlcik7XG5hc3NlcnRDb3B5U2V0KHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5QmFnKGlzQ29weUJhZyk7XG5oYXJkZW4oaXNDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weUJhZz0oYik9PntcbmNoZWNrQ29weUJhZyhiLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlCYWdFbnRyeShldmVyeUNvcHlCYWdFbnRyeSk7XG5oYXJkZW4oZXZlcnlDb3B5QmFnRW50cnkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWc9KGJhZ0VudHJ5SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJ5SXRlcik7XG5hc3NlcnRDb3B5QmFnKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weU1hcChjaGVja0NvcHlNYXApO1xuaGFyZGVuKGNoZWNrQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+Y2hlY2tDb3B5TWFwKG0saWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBLZXlzKGdldENvcHlNYXBLZXlzKTtcbmhhcmRlbihnZXRDb3B5TWFwS2V5cyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBWYWx1ZXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC52YWx1ZXM7XG4gfTskaM2PX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwS2V5PShtLGZuKT0+XG5nZXRDb3B5TWFwS2V5cyhtKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaM2PX29uY2UuY29weU1hcEtleVNldChjb3B5TWFwS2V5U2V0KTtcbmhhcmRlbihjb3B5TWFwS2V5U2V0KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlNYXA9KGVudHJpZXMpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZEVudHJpZXM9c29ydEJ5UmFuayhlbnRyaWVzLGNvbXBhcmVBbnRpUmFuayk7XG5jb25zdCBrZXlzPXNvcnRlZEVudHJpZXMubWFwKChbayxfdl0pPT5rKTtcbmNvbnN0IHZhbHVlcz1zb3J0ZWRFbnRyaWVzLm1hcCgoW19rLHZdKT0+dik7XG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnY29weU1hcCcse2tleXMsdmFsdWVzfSk7XG5hc3NlcnRDb3B5TWFwKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACEP4sHExUAABMVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsZ2V0VGFnLGNvbXBhcmVSYW5rLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyx0cml2aWFsQ29tcGFyYXRvcixxLEZhaWwsYXNzZXJ0S2V5LGdldENvcHlCYWdFbnRyaWVzLGdldENvcHlNYXBFbnRyeUFycmF5LGdldENvcHlTZXRLZXlzLG1ha2VDb21wYXJlQ29sbGVjdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV0sW1wicmVjb3JkTmFtZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkTmFtZXMgPSAkaM2PX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZFZhbHVlcyA9ICRozY9fYSldXSxbXCJ0cml2aWFsQ29tcGFyYXRvclwiLCBbJGjNj19hID0+ICh0cml2aWFsQ29tcGFyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjNj19hID0+IChhc3NlcnRLZXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaM2PX2EpXV1dXSxbXCIuL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJtYWtlQ29tcGFyZUNvbGxlY3Rpb25cIiwgWyRozY9fYSA9PiAobWFrZUNvbXBhcmVDb2xsZWN0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihzKT0+aGFyZGVuKGdldENvcHlTZXRLZXlzKHMpLm1hcCgoa2V5KT0+W2tleSwxXSkpLFxuXG4wLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5zZXRDb21wYXJlKHNldENvbXBhcmUpO1xuXG5oYXJkZW4oc2V0Q29tcGFyZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBiYWdDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlCYWdFbnRyaWVzLFxuMG4sXG50cml2aWFsQ29tcGFyYXRvcik7JGjNj19vbmNlLmJhZ0NvbXBhcmUoYmFnQ29tcGFyZSk7XG5cbmhhcmRlbihiYWdDb21wYXJlKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBBQlNFTlQ9U3ltYm9sKCdhYnNlbnQnKTtcbi8qXG5cblxuXG5cblxuXG4gKi9cbi8vXG5jb25zdCBfbWFwQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbkFCU0VOVCxcbihsZWZ0VmFsdWUscmlnaHRWYWx1ZSk9PntcbmlmKGxlZnRWYWx1ZT09PUFCU0VOVCYmcmlnaHRWYWx1ZT09PUFCU0VOVCl7XG50aHJvdyBGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBhYnNlbnQgZW50cnkgcGFpcmA7XG4gfWVsc2UgaWYobGVmdFZhbHVlPT09QUJTRU5UKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuIDE7XG4gfWVsc2V7XG4vL1xucmV0dXJuIGNvbXBhcmVLZXlzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbiB9XG4gfSk7XG5cbmhhcmRlbihfbWFwQ29tcGFyZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb21wYXJlS2V5cz0obGVmdCxyaWdodCk9PntcbmFzc2VydEtleShsZWZ0KTtcbmFzc2VydEtleShyaWdodCk7XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzpcbmNhc2Unc3ltYm9sJzp7XG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG5jb25zdCByYW5rQ29tcD1jb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbmlmKHJhbmtDb21wPT09MCl7XG5yZXR1cm4gMDtcbiB9XG5pZihOdW1iZXIuaXNOYU4obGVmdCl8fE51bWJlci5pc05hTihyaWdodCkpe1xuLy9cbmFzc2VydCghTnVtYmVyLmlzTmFOKGxlZnQpfHwhTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gTmFOO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJhbmtDb21wO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5pZihsZWZ0PT09cmlnaHQpe1xucmV0dXJuIDA7XG4gfVxuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlbj1NYXRoLm1pbihsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG4vL1xuY29uc3QgcmVzdWx0PWNvbXBhcmVLZXlzKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG4vL1xuaWYoIWtleUVRKGxlZnROYW1lcyxyaWdodE5hbWVzKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuLy9cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbi8vXG5jb25zdCByaWdodFZhbHVlcz1yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcyk7XG4vL1xuLy9cbmxldCByZXN1bHQ9MDtcbmZvcihsZXQgaT0wO2k8bGVmdFZhbHVlcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wPWNvbXBhcmVLZXlzKGxlZnRWYWx1ZXNbaV0scmlnaHRWYWx1ZXNbaV0pO1xuaWYoTnVtYmVyLmlzTmFOKGNvbXApKXtcbnJldHVybiBOYU47XG4gfVxuaWYocmVzdWx0IT09Y29tcCYmY29tcCE9PTApe1xuaWYocmVzdWx0PT09MCl7XG5yZXN1bHQ9Y29tcDtcbiB9ZWxzZXtcbmFzc2VydChcbnJlc3VsdD09PS0xJiZjb21wPT09MXx8cmVzdWx0PT09MSYmY29tcD09PS0xKTtcblxucmV0dXJuIE5hTjtcbiB9XG4gfVxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UndGFnZ2VkJzp7XG4vL1xuY29uc3QgbGVmdFRhZz1nZXRUYWcobGVmdCk7XG4vL1xuY29uc3QgcmlnaHRUYWc9Z2V0VGFnKHJpZ2h0KTtcbmlmKGxlZnRUYWchPT1yaWdodFRhZyl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG5yZXR1cm4gc2V0Q29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbi8vXG5yZXR1cm4gYmFnQ29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xudGhyb3cgRmFpbCBgTWFwIGNvbXBhcmlzb24gbm90IHlldCBpbXBsZW1lbnRlZDogJHtsZWZ0fSB2cyAke3JpZ2h0fWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHRhZyAke3EobGVmdFRhZyl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EobGVmdFN0eWxlKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9OyRozY9fb25jZS5jb21wYXJlS2V5cyhjb21wYXJlS2V5cyk7XG5oYXJkZW4oY29tcGFyZUtleXMpO1xuXG5jb25zdCAgICAgICAga2V5TFQ9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTwwOyRozY9fb25jZS5rZXlMVChrZXlMVCk7XG5oYXJkZW4oa2V5TFQpO1xuXG5jb25zdCAgICAgICAga2V5TFRFPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8PTA7JGjNj19vbmNlLmtleUxURShrZXlMVEUpO1xuaGFyZGVuKGtleUxURSk7XG5cbmNvbnN0ICAgICAgICBrZXlFUT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPT09MDskaM2PX29uY2Uua2V5RVEoa2V5RVEpO1xuaGFyZGVuKGtleUVRKTtcblxuY29uc3QgICAgICAgIGtleUdURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPj0wOyRozY9fb25jZS5rZXlHVEUoa2V5R1RFKTtcbmhhcmRlbihrZXlHVEUpO1xuXG5jb25zdCAgICAgICAga2V5R1Q9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT4wOyRozY9fb25jZS5rZXlHVChrZXlHVCk7XG5oYXJkZW4oa2V5R1QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0Q29tcGFyZSI6WyJzZXRDb21wYXJlIl0sImJhZ0NvbXBhcmUiOlsiYmFnQ29tcGFyZSJdLCJjb21wYXJlS2V5cyI6WyJjb21wYXJlS2V5cyJdLCJrZXlMVCI6WyJrZXlMVCJdLCJrZXlMVEUiOlsia2V5TFRFIl0sImtleUVRIjpbImtleUVRIl0sImtleUdURSI6WyJrZXlHVEUiXSwia2V5R1QiOlsia2V5R1QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATJtmFscNAADHDQAAKQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb3B5QmFnLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRCYWdFbnRyaWVzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIiwiY2hlY2tCYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIiwibWFrZUJhZ09mRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbi8vXG4vL1xuLy9cbmJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9YmFnRW50cmllc1tpLTFdWzBdO1xuY29uc3QgazE9YmFnRW50cmllc1tpXVswXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5hc3NlcnROb0R1cGxpY2F0ZUtleXMoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKTtcbmNvbnN0ICAgICAgICBjaGVja0JhZ0VudHJpZXM9KGJhZ0VudHJpZXMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihiYWdFbnRyaWVzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoYmFnRW50cmllcyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtiYWdFbnRyaWVzfWApO1xuXG4gfVxuZm9yKGNvbnN0IGVudHJ5IG9mIGJhZ0VudHJpZXMpe1xuaWYoXG5wYXNzU3R5bGVPZihlbnRyeSkhPT0nY29weUFycmF5J3x8XG5lbnRyeS5sZW5ndGghPT0yfHxcbnR5cGVvZiBlbnRyeVsxXSE9PSdiaWdpbnQnKVxue1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGJlIHBhaXIgb2YgYSBrZXkgYW5kIGEgYmlnaW50IHJlcHJlc2VudGluZyBhIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuaWYoZW50cnlbMV08MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEVhY2ggZW50cnkgb2YgYSBjb3B5QmFnIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuIH1cbi8vXG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjNj19vbmNlLmNoZWNrQmFnRW50cmllcyhjaGVja0JhZ0VudHJpZXMpO1xuaGFyZGVuKGNoZWNrQmFnRW50cmllcyk7XG5cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEJhZ0VudHJpZXM9KGJhZ0VudHJpZXMpPT57XG5jaGVja0JhZ0VudHJpZXMoYmFnRW50cmllcyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRCYWdFbnRyaWVzKGFzc2VydEJhZ0VudHJpZXMpO1xuaGFyZGVuKGFzc2VydEJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvQmFnRW50cmllcz0oYmFnRW50cmllc0xpc3QpPT57XG5jb25zdCBiYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllc0xpc3QsY29tcGFyZUFudGlSYW5rKTtcbmFzc2VydEJhZ0VudHJpZXMoYmFnRW50cmllcyk7XG5yZXR1cm4gYmFnRW50cmllcztcbiB9OyRozY9fb25jZS5jb2VyY2VUb0JhZ0VudHJpZXMoY29lcmNlVG9CYWdFbnRyaWVzKTtcbmhhcmRlbihjb2VyY2VUb0JhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJhZ09mRW50cmllcz0oYmFnRW50cnlJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5QmFnJyxjb2VyY2VUb0JhZ0VudHJpZXMoYmFnRW50cnlJdGVyKSk7JGjNj19vbmNlLm1ha2VCYWdPZkVudHJpZXMobWFrZUJhZ09mRW50cmllcyk7XG5oYXJkZW4obWFrZUJhZ09mRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnROb0R1cGxpY2F0ZUtleXMiOlsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIl0sImNoZWNrQmFnRW50cmllcyI6WyJjaGVja0JhZ0VudHJpZXMiXSwiYXNzZXJ0QmFnRW50cmllcyI6WyJhc3NlcnRCYWdFbnRyaWVzIl0sImNvZXJjZVRvQmFnRW50cmllcyI6WyJjb2VyY2VUb0JhZ0VudHJpZXMiXSwibWFrZUJhZ09mRW50cmllcyI6WyJtYWtlQmFnT2ZFbnRyaWVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACmeZ2zOCwAAzgsAACkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weVNldC5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0RWxlbWVudHMiLCJhc3NlcnROb0R1cGxpY2F0ZXMiLCJjaGVja0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyIsIm1ha2VTZXRPZkVsZW1lbnRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9ZWxlbWVudHNbaS0xXTtcbmNvbnN0IGsxPWVsZW1lbnRzW2ldO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRFbGVtZW50cyhhc3NlcnRFbGVtZW50cyk7XG5oYXJkZW4oYXNzZXJ0RWxlbWVudHMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvRWxlbWVudHM9KGVsZW1lbnRzTGlzdCk9PntcbmNvbnN0IGVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRFbGVtZW50cyhlbGVtZW50cyk7XG5yZXR1cm4gZWxlbWVudHM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRozY9fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAE2RIifgEgAA4BIAADkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLG1ha2VJdGVyYXRvcixtYWtlQXJyYXlJdGVyYXRvcixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlQXJyYXlJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlQXJyYXlJdGVyYXRvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXM9KGVudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG4vL1xuYXNzZXJ0UmFua1NvcnRlZChlbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZW50cmllcztcbmxldCBpPTA7XG5sZXQgc2FtZVJhbmtJdGVyYXRvcjtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmlmKHNhbWVSYW5rSXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PXNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuaWYoIXJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj11bmRlZmluZWQ7XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9ZW50cmllc1tpXTtcbi8vXG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUoZW50cnlbMF0sZW50cmllc1tqXVswXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG4vL1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHRpZXM9ZW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRUaWVzPXNvcnRCeVJhbmsodGllcyxmdWxsQ29tcGFyZSk7XG5mb3IobGV0IGs9MTtrPHNvcnRlZFRpZXMubGVuZ3RoO2srPTEpe1xuLy9cbmNvbnN0W2tleTBdPXNvcnRlZFRpZXNbay0xXTtcbmNvbnN0W2tleTFdPXNvcnRlZFRpZXNba107XG5NYXRoLnNpZ24oZnVsbENvbXBhcmUoa2V5MCxrZXkxKSl8fFxuRmFpbCBgRHVwbGljYXRlIGVudHJ5IGtleTogJHtrZXkwfWA7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj1tYWtlQXJyYXlJdGVyYXRvcihzb3J0ZWRUaWVzKTtcbnJldHVybiBzYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfSk7XG4gfTtcbmhhcmRlbihnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzPShcbmMxLFxuYzIsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpPT5cbntcbmNvbnN0IGUxPWdldEVudHJpZXMoYzEpO1xuY29uc3QgZTI9Z2V0RW50cmllcyhjMik7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCB4PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTEsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHk9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMixjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuXG4vL1xuLy9cbmxldCB4RG9uZTtcbmxldCB4S2V5O1xubGV0IHhWYWx1ZTtcbmxldCB5RG9uZTtcbmxldCB5S2V5O1xubGV0IHlWYWx1ZTtcbmNvbnN0IG5vbkVudHJ5PVt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD14VmFsdWU7XG4oe2RvbmU6eERvbmUsdmFsdWU6W3hLZXkseFZhbHVlXT1ub25FbnRyeX09eC5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFgoKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD15VmFsdWU7XG4oe2RvbmU6eURvbmUsdmFsdWU6W3lLZXkseVZhbHVlXT1ub25FbnRyeX09eS5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFkoKTtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xudmFsdWU9W3VuZGVmaW5lZCxhYnNlbnRWYWx1ZSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoeERvbmUpe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2UgaWYoeURvbmUpe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeEtleSx5S2V5KTtcbmlmKGNvbXA9PT0wKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksbmV4dFkoKV07XG4gfWVsc2UgaWYoY29tcDwwKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYFVuZXhwZWN0ZWQga2V5IGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHt4S2V5fSB2cyAke3lLZXl9YDtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjNj19vbmNlLmdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcbmhhcmRlbihnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmVDb2xsZWN0aW9uPShnZXRFbnRyaWVzLGFic2VudFZhbHVlLGNvbXBhcmVWYWx1ZXMpPT5cbmhhcmRlbigobGVmdCxyaWdodCk9PntcbmNvbnN0IG1lcmdlZD1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbmxlZnQsXG5yaWdodCxcbmdldEVudHJpZXMsXG5hYnNlbnRWYWx1ZSk7XG5cbmxldCBsZWZ0SXNCaWdnZXI9ZmFsc2U7XG5sZXQgcmlnaHRJc0JpZ2dlcj1mYWxzZTtcbmZvcihjb25zdFtfa2V5LGxlZnRWYWx1ZSxyaWdodFZhbHVlXW9mIG1lcmdlZCl7XG5jb25zdCBjb21wPWNvbXBhcmVWYWx1ZXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuaWYoY29tcD09PTApe1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xucmlnaHRJc0JpZ2dlcj10cnVlO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG4vL1xubGVmdElzQmlnZ2VyPXRydWU7XG4gfWVsc2V7XG5OdW1iZXIuaXNOYU4oY29tcCl8fFxuLy9cbkZhaWwgYFVuZXhwZWN0ZWQgdmFsdWUgY29tcGFyaXNvbiAke3EoY29tcCl9IGZvciAke2xlZnRWYWx1ZX0gdnMgJHtyaWdodFZhbHVlfWA7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKGxlZnRJc0JpZ2dlciYmcmlnaHRJc0JpZ2dlcil7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4vL1xucmV0dXJuIGxlZnRJc0JpZ2dlcj8xOnJpZ2h0SXNCaWdnZXI/LTE6MDtcbiB9KTskaM2PX29uY2UubWFrZUNvbXBhcmVDb2xsZWN0aW9uKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG5oYXJkZW4obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIjpbImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIl0sIm1ha2VDb21wYXJlQ29sbGVjdGlvbiI6WyJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSXNEaXNqb2ludCIsImJhZ0lzU3VwZXJiYWciLCJiYWdVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZUtleXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlS2V5cyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZ1dpbmRvd1Jlc29ydD0oYmFnRW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoYmFnRW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5sZXQgaT0wO1xubGV0IG9wdElubmVySXRlcmF0b3I7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5cbmhhcmRlbih7XG5uZXh0OigpPT57XG5pZihvcHRJbm5lckl0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1vcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbmlmKHJlc3VsdC5kb25lKXtcbm9wdElubmVySXRlcmF0b3I9dW5kZWZpbmVkO1xuLy9cbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWJhZ0VudHJpZXNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShcbmo8bGVuZ3RoJiZcbnJhbmtDb21wYXJlKGVudHJ5WzBdLGJhZ0VudHJpZXNbal1bMF0pPT09MClcbntcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1iYWdFbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5jb25zdCByZXNvcnRlZD1zb3J0QnlSYW5rKHNpbWlsYXJSdW4sZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKHJlc29ydGVkLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xub3B0SW5uZXJJdGVyYXRvcj1yZXNvcnRlZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gb3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6W251bGwsMG5dfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5jb25zdCB4cz1iYWdXaW5kb3dSZXNvcnQoeGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPWJhZ1dpbmRvd1Jlc29ydCh5YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeGM7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5YztcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp4RG9uZSxcbnZhbHVlOlt4LHhjXX09XG54aS5uZXh0KCkpO1xuIH07XG5uZXh0WCgpO1xuXG5jb25zdCB5aT15c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnlEb25lLFxudmFsdWU6W3kseWNdfT1cbnlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gseGMseWNdO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNTdXBlcmJhZz0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yzx5Yyl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc0Rpc2pvaW50PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJVbmlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xucmVzdWx0LnB1c2goW20seGMreWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJbnRlcnNlY3Rpb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjPD15Yz94Yzp5YztcbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGMteWM7XG5tYz49MG58fEZhaWwgYHJpZ2h0IGVsZW1lbnQgJHttfSB3YXMgbm90IGluIGxlZnRgO1xuaWYobWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShiYWdJdGVyT3ApPT4oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT5cbmJhZ0l0ZXJPcChtZXJnZSh4YmFnRW50cmllcyx5YmFnRW50cmllcykpO1xuXG5jb25zdCBiYWdFbnRyaWVzSXNTdXBlcmJhZz1tZXJnZWlmeShiYWdJdGVySXNTdXBlcmJhZyk7XG5jb25zdCBiYWdFbnRyaWVzSXNEaXNqb2ludD1tZXJnZWlmeShiYWdJdGVySXNEaXNqb2ludCk7XG5jb25zdCBiYWdFbnRyaWVzVW5pb249bWVyZ2VpZnkoYmFnSXRlclVuaW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoYmFnSXRlckludGVyc2VjdGlvbik7XG5jb25zdCBiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd0JhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxuYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpO1xuXG5jb25zdCBiYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbm1ha2VCYWdPZkVudHJpZXMoYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIGJhZ0lzU3VwZXJiYWc9cmF3QmFnaWZ5KGJhZ0VudHJpZXNJc1N1cGVyYmFnKTskaM2PX29uY2UuYmFnSXNTdXBlcmJhZyhiYWdJc1N1cGVyYmFnKTtcbmNvbnN0ICAgICAgICBiYWdJc0Rpc2pvaW50PXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNEaXNqb2ludCk7JGjNj19vbmNlLmJhZ0lzRGlzam9pbnQoYmFnSXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgYmFnVW5pb249YmFnaWZ5KGJhZ0VudHJpZXNVbmlvbik7JGjNj19vbmNlLmJhZ1VuaW9uKGJhZ1VuaW9uKTtcbmNvbnN0ICAgICAgICBiYWdJbnRlcnNlY3Rpb249YmFnaWZ5KGJhZ0VudHJpZXNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5iYWdJbnRlcnNlY3Rpb24oYmFnSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBiYWdEaXNqb2ludFN1YnRyYWN0PWJhZ2lmeShiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmJhZ0Rpc2pvaW50U3VidHJhY3QoYmFnRGlzam9pbnRTdWJ0cmFjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJiYWdJc1N1cGVyYmFnIjpbImJhZ0lzU3VwZXJiYWciXSwiYmFnSXNEaXNqb2ludCI6WyJiYWdJc0Rpc2pvaW50Il0sImJhZ1VuaW9uIjpbImJhZ1VuaW9uIl0sImJhZ0ludGVyc2VjdGlvbiI6WyJiYWdJbnRlcnNlY3Rpb24iXSwiYmFnRGlzam9pbnRTdWJ0cmFjdCI6WyJiYWdEaXNqb2ludFN1YnRyYWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH1gizOLHAAAixwAADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIl0sImV4cG9ydHMiOlsiZWxlbWVudHNDb21wYXJlIiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFVuaW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzU3VwZXJzZXQiLCJlbGVtZW50c1VuaW9uIiwic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50VW5pb24iLCJzZXRJbnRlcnNlY3Rpb24iLCJzZXRJc0Rpc2pvaW50Iiwic2V0SXNTdXBlcnNldCIsInNldFVuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlcyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB3aW5kb3dSZXNvcnQ9KGVsZW1lbnRzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChlbGVtZW50cyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCB2YWx1ZT1lbGVtZW50c1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZSh2YWx1ZSxlbGVtZW50c1tqXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1lbGVtZW50cy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlcyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOm51bGx9KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGVsZW1lbnRzLHllbGVtZW50cyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9d2luZG93UmVzb3J0KHhlbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9d2luZG93UmVzb3J0KHllbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eERvbmUsdmFsdWU6eH09eGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eURvbmUsdmFsdWU6eX09eWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCwxbiwxbl07XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG5jb25zdCBpdGVySXNTdXBlcnNldD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLF95Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyQ29tcGFyZT0oeHlpKT0+e1xubGV0IGxvbmVZPWZhbHNlO1xubGV0IGxvbmVYPWZhbHNlO1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5sb25lWT10cnVlO1xuIH1cbmlmKHljPT09MG4pe1xuLy9cbmxvbmVYPXRydWU7XG4gfVxuaWYobG9uZVgmJmxvbmVZKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbmlmKGxvbmVYKXtcbnJldHVybiAxO1xuIH1lbHNlIGlmKGxvbmVZKXtcbnJldHVybi0xO1xuIH1lbHNle1xuIWxvbmVYJiYhbG9uZVl8fFxuRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgbG9uZSBwYWlyICR7cShbbG9uZVgsbG9uZVldKX1gO1xucmV0dXJuIDA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0wbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0wbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xuLy9cbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPT09MG58fHljPT09MG58fEZhaWwgYFNldHMgbXVzdCBub3QgaGF2ZSBjb21tb24gZWxlbWVudHM6ICR7bX1gO1xuaWYoeGM+PTFuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTFufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM+PTFufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKHljPT09MG4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShpdGVyT3ApPT4oeGVsZW1lbnRzLHllbGVtZW50cyk9PlxuaXRlck9wKG1lcmdlKHhlbGVtZW50cyx5ZWxlbWVudHMpKTtcblxuY29uc3QgICAgICAgIGVsZW1lbnRzSXNTdXBlcnNldD1tZXJnZWlmeShpdGVySXNTdXBlcnNldCk7JGjNj19vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjNj19vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjNj19vbmNlLmVsZW1lbnRzQ29tcGFyZShlbGVtZW50c0NvbXBhcmUpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzVW5pb249bWVyZ2VpZnkoaXRlclVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaM2PX29uY2UuZWxlbWVudHNJbnRlcnNlY3Rpb24oZWxlbWVudHNJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShpdGVyRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjNj19vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaM2PX29uY2Uuc2V0SXNEaXNqb2ludChzZXRJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBzZXRVbmlvbj1zZXRpZnkoZWxlbWVudHNVbmlvbik7JGjNj19vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRozY9fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5zZXRJbnRlcnNlY3Rpb24oc2V0SW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFN1YnRyYWN0PXNldGlmeShlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACkQyco7RgAAO0YAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxBcmdHdWFyZExpc3RTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsSW50ZXJmYWNlR3VhcmRTaGFwZSxNLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLE1ldGhvZEd1YXJkU2hhcGUsUmF3R3VhcmRTaGFwZSxTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxTeW5jVmFsdWVHdWFyZFNoYXBlLGFzc2VydEF3YWl0QXJnR3VhcmQsbWF0Y2hlcyxtdXN0TWF0Y2gsZ2V0Q29weU1hcEtleXMsbWFrZUNvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtbXCJBcmdHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChBcmdHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJBd2FpdEFyZ0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoQXdhaXRBcmdHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIkludGVyZmFjZUd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW50ZXJmYWNlR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTWV0aG9kR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChNZXRob2RHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIlJhd0d1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoUmF3R3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSA9ICRozY9fYSldXSxbXCJTeW5jVmFsdWVHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFN5bmNWYWx1ZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0QXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChhc3NlcnRBd2FpdEFyZ0d1YXJkID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiZ2V0Q29weU1hcEtleXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGU9aGFyZGVuKHtcbmtsYXNzOidhd2FpdEFyZycsXG5hcmdHdWFyZDpNLnBhdHRlcm4oKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZD0oYXdhaXRBcmdHdWFyZCk9PntcbmlmKG1hdGNoZXMoYXdhaXRBcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpKXtcbi8vXG5jb25zdHtrbGFzczpfLC4uLnBheWxvYWR9PWF3YWl0QXJnR3VhcmQ7XG4vL1xucmV0dXJuIHBheWxvYWQ7XG4gfVxuYXNzZXJ0QXdhaXRBcmdHdWFyZChhd2FpdEFyZ0d1YXJkKTtcbnJldHVybiBhd2FpdEFyZ0d1YXJkLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRTaGFwZT1NLm9yKFxuUmF3R3VhcmRTaGFwZSxcbkF3YWl0QXJnR3VhcmRTaGFwZSxcbkxlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSxcbk0ucGF0dGVybigpKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXJnR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKExlZ2FjeUFyZ0d1YXJkU2hhcGUpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidtZXRob2RHdWFyZCcsXG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkxlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeU1ldGhvZEd1YXJkU2hhcGU9TS5vcihcbkxlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlLFxuTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlKTtcblxuXG5jb25zdCBhZGFwdExlZ2FjeUFyZ0d1YXJkPShhcmdHdWFyZCk9PlxubWF0Y2hlcyhhcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpP1xuTS5hd2FpdChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQpOlxuYXJnR3VhcmQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kR3VhcmRQYXlsb2FkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTWV0aG9kR3VhcmRTaGFwZSkpe1xucmV0dXJuIG1ldGhvZEd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUsJ2xlZ2FjeU1ldGhvZEd1YXJkJyk7XG5jb25zdHtcbi8vXG5rbGFzczpfLFxuLy9cbmNhbGxLaW5kLFxuLy9cbnJldHVybkd1YXJkLFxuLy9cbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZDtcbmxldHtcbi8vXG5hcmdHdWFyZHMsXG4vL1xub3B0aW9uYWxBcmdHdWFyZHN9PVxubWV0aG9kR3VhcmQ7XG5pZihjYWxsS2luZD09PSdhc3luYycpe1xuYXJnR3VhcmRzPWFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG5vcHRpb25hbEFyZ0d1YXJkcz1cbm9wdGlvbmFsQXJnR3VhcmRzJiZvcHRpb25hbEFyZ0d1YXJkcy5tYXAoYWRhcHRMZWdhY3lBcmdHdWFyZCk7XG4gfVxuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJlc3RBcmdHdWFyZCxcbnJldHVybkd1YXJkfSk7XG5cbi8vXG5tdXN0TWF0Y2gocGF5bG9hZCxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSwnaW50ZXJuYWxNZXRob2RHdWFyZEFkYXB0b3InKTtcbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZEd1YXJkUGF5bG9hZChnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidJbnRlcmZhY2UnLFxuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoXG5NLnN0cmluZygpLFxuTS5vcihNZXRob2RHdWFyZFNoYXBlLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKX0sXG5cblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG4vL1xuLy9cbi8vXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7XG5cblxuXG5jb25zdCBhZGFwdE1ldGhvZEd1YXJkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpe1xuY29uc3R7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkPU0uYW55KCksXG5yZXR1cm5HdWFyZH09XG5nZXRNZXRob2RHdWFyZFBheWxvYWQobWV0aG9kR3VhcmQpO1xuY29uc3QgbUNhbGw9Y2FsbEtpbmQ9PT0nc3luYyc/TS5jYWxsOk0uY2FsbFdoZW47XG5yZXR1cm4gbUNhbGwoLi4uYXJnR3VhcmRzKS5cbm9wdGlvbmFsKC4uLm9wdGlvbmFsQXJnR3VhcmRzKS5cbnJlc3QocmVzdEFyZ0d1YXJkKS5cbnJldHVybnMocmV0dXJuR3VhcmQpO1xuIH1cbnJldHVybiBtZXRob2RHdWFyZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkPShpbnRlcmZhY2VHdWFyZCk9PntcbmlmKG1hdGNoZXMoaW50ZXJmYWNlR3VhcmQsSW50ZXJmYWNlR3VhcmRTaGFwZSkpe1xucmV0dXJuIGludGVyZmFjZUd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKGludGVyZmFjZUd1YXJkLExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGUsJ2xlZ2FjeUludGVyZmFjZUd1YXJkJyk7XG4vL1xuLy9cbmxldHtrbGFzczpfLGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLC4uLnJlc3R9PWludGVyZmFjZUd1YXJkO1xubWV0aG9kR3VhcmRzPW9iamVjdE1hcChtZXRob2RHdWFyZHMsYWRhcHRNZXRob2RHdWFyZCk7XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzLFxuLi4ucmVzdH0pO1xuXG5tdXN0TWF0Y2goXG5wYXlsb2FkLFxuSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsXG4naW50ZXJuYWxJbnRlcmZhY2VHdWFyZEFkYXB0b3InKTtcblxucmV0dXJuIHBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcblxuY29uc3QgZW1wdHlDb3B5TWFwPW1ha2VDb3B5TWFwKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VNZXRob2RLZXlzPShpbnRlcmZhY2VHdWFyZCk9PntcbmNvbnN0e21ldGhvZEd1YXJkcyxzeW1ib2xNZXRob2RHdWFyZHM9ZW1wdHlDb3B5TWFwfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oW1xuLi4uUmVmbGVjdC5vd25LZXlzKG1ldGhvZEd1YXJkcyksXG4uLi5nZXRDb3B5TWFwS2V5cyhzeW1ib2xNZXRob2RHdWFyZHMpXSk7XG5cbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VNZXRob2RLZXlzKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xuaGFyZGVuKGdldEludGVyZmFjZU1ldGhvZEtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiXSwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIjpbImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiOlsiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZU1ldGhvZEtleXMiOlsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAdOAyUyK0AAMitAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi4va2V5cy9jb21wYXJlS2V5cy5qcyIsIi4uL2tleXMvY2hlY2tLZXkuanMiLCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIl0sImV4cG9ydHMiOlsiQXJnR3VhcmRMaXN0U2hhcGUiLCJBd2FpdEFyZ0d1YXJkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSIsIkludGVyZmFjZUd1YXJkU2hhcGUiLCJNIiwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiLCJNZXRob2RHdWFyZFNoYXBlIiwiUmF3R3VhcmRTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRTaGFwZSIsImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCIsImFzc2VydE1ldGhvZEd1YXJkIiwiYXNzZXJ0UGF0dGVybiIsImFzc2VydFJhd0d1YXJkIiwiY2hlY2tNYXRjaGVzIiwiZGVmYXVsdExpbWl0cyIsImdldFJhbmtDb3ZlciIsImlzQXdhaXRBcmdHdWFyZCIsImlzUGF0dGVybiIsImlzUmF3R3VhcmQiLCJraW5kT2YiLCJtYXRjaGVzIiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsRmFyLGdldFRhZyxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGhhc093blByb3BlcnR5T2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLGNvbXBhcmVSYW5rLGdldFBhc3NTdHlsZUNvdmVyLGludGVyc2VjdFJhbmtDb3ZlcnMsdW5pb25SYW5rQ292ZXJzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyxpZGVudENoZWNrZXIsYXBwbHlMYWJlbGluZ0Vycm9yLGZyb21VbmlxdWVFbnRyaWVzLGxpc3REaWZmZXJlbmNlLHEsYixYLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3Isa2V5RVEsa2V5R1Qsa2V5R1RFLGtleUxULGtleUxURSxhc3NlcnRLZXksY2hlY2tLZXksaXNLZXksY2hlY2tTY2FsYXJLZXksY2hlY2tDb3B5U2V0LGNoZWNrQ29weU1hcCxjb3B5TWFwS2V5U2V0LGNoZWNrQ29weUJhZyxnZXRDb3B5TWFwRW50cnlBcnJheSxtYWtlQ29weU1hcCxnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcImdldFBhc3NTdHlsZUNvdmVyXCIsIFskaM2PX2EgPT4gKGdldFBhc3NTdHlsZUNvdmVyID0gJGjNj19hKV1dLFtcImludGVyc2VjdFJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAoaW50ZXJzZWN0UmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJ1bmlvblJhbmtDb3ZlcnNcIiwgWyRozY9fYSA9PiAodW5pb25SYW5rQ292ZXJzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qc1wiLCBbW1wiYXBwbHlMYWJlbGluZ0Vycm9yXCIsIFskaM2PX2EgPT4gKGFwcGx5TGFiZWxpbmdFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjNj19hID0+IChmcm9tVW5pcXVlRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJrZXlHVFwiLCBbJGjNj19hID0+IChrZXlHVCA9ICRozY9fYSldXSxbXCJrZXlHVEVcIiwgWyRozY9fYSA9PiAoa2V5R1RFID0gJGjNj19hKV1dLFtcImtleUxUXCIsIFskaM2PX2EgPT4gKGtleUxUID0gJGjNj19hKV1dLFtcImtleUxURVwiLCBbJGjNj19hID0+IChrZXlMVEUgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImNoZWNrS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrS2V5ID0gJGjNj19hKV1dLFtcImlzS2V5XCIsIFskaM2PX2EgPT4gKGlzS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrU2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGNoZWNrU2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weVNldFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weU1hcCA9ICRozY9fYSldXSxbXCJjb3B5TWFwS2V5U2V0XCIsIFskaM2PX2EgPT4gKGNvcHlNYXBLZXlTZXQgPSAkaM2PX2EpXV0sW1wiY2hlY2tDb3B5QmFnXCIsIFskaM2PX2EgPT4gKGNoZWNrQ29weUJhZyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLHZhbHVlc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF0dGVybk1lbW89bmV3IFdlYWtTZXQoKTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgTU07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmYXVsdExpbWl0cz1oYXJkZW4oe1xuZGVjaW1hbERpZ2l0c0xpbWl0OjEwMCxcbnN0cmluZ0xlbmd0aExpbWl0OjEwMF8wMDAsXG5zeW1ib2xOYW1lTGVuZ3RoTGltaXQ6MTAwLFxubnVtUHJvcGVydGllc0xpbWl0OjgwLFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQ6MTAwLFxuYXJyYXlMZW5ndGhMaW1pdDoxMF8wMDAsXG5udW1TZXRFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQ6MTBfMDAwLFxubnVtTWFwRW50cmllc0xpbWl0OjUwMDB9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmF1bHRMaW1pdHMoZGVmYXVsdExpbWl0cyk7XG5jb25zdCBsaW1pdD0obGltaXRzPXt9KT0+XG4vKiAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oe19fcHJvdG9fXzpkZWZhdWx0TGltaXRzLC4uLmxpbWl0c30pO1xuXG5jb25zdCBjaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdD0oXG5wYXlsb2FkLFxubWFpblBheWxvYWRTaGFwZSxcbmNoZWNrLFxubGFiZWwpPT5cbntcbmFzc2VydChBcnJheS5pc0FycmF5KG1haW5QYXlsb2FkU2hhcGUpKTtcbmlmKCFBcnJheS5pc0FycmF5KHBheWxvYWQpKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGAke3EobGFiZWwpfSBwYXlsb2FkIG11c3QgYmUgYW4gYXJyYXk6ICR7cGF5bG9hZH1gKTtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBtYWluTGVuZ3RoPW1haW5QYXlsb2FkU2hhcGUubGVuZ3RoO1xuaWYoIShwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGh8fHBheWxvYWQubGVuZ3RoPT09bWFpbkxlbmd0aCsxKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCB1bmV4cGVjdGVkIHNpemU6ICR7cGF5bG9hZH1gKTtcbiB9XG5jb25zdCBsaW1pdHM9cGF5bG9hZFttYWluTGVuZ3RoXTtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxtYWluTGVuZ3RoKSk7XG4vL1xuaWYoIWNoZWNrTWF0Y2hlcyhwYXlsb2FkLG1haW5QYXlsb2FkU2hhcGUsY2hlY2ssbGFiZWwpKXtcbnJldHVybiBmYWxzZTtcbiB9XG5pZihsaW1pdHM9PT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGxpbWl0cyk9PT0nY29weVJlY29yZCd8fFxuY2hlY2soZmFsc2UsWCBgTGltaXRzIG11c3QgYmUgYSByZWNvcmQ6ICR7cShsaW1pdHMpfWApKSYmXG5lbnRyaWVzKGxpbWl0cykuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbnBhc3NTdHlsZU9mKHZhbHVlKT09PSdudW1iZXInfHxcbmNoZWNrKGZhbHNlLFggYFZhbHVlIG9mIGxpbWl0ICR7cShrZXkpfSBidXQgYmUgYSBudW1iZXI6ICR7cSh2YWx1ZSl9YCkpKTtcblxuXG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQ9KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjayk9PntcbmlmKFxuTWF0aC5mbG9vcihNYXRoLmxvZzEwKE1hdGguYWJzKE51bWJlcihzcGVjaW1lbikpKSkrMTw9XG5kZWNpbWFsRGlnaXRzTGltaXQpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGJpZ2ludCAke3NwZWNpbWVufSBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke2RlY2ltYWxEaWdpdHNMaW1pdH0gZGlnaXRzYCk7XG5cbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1ha2VQYXR0ZXJuS2l0PSgpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZU1hdGNoSGVscGVyPSh0YWcpPT5cbi8vXG5IZWxwZXJzQnlNYXRjaFRhZ1t0YWddO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUGF5bG9hZFNoYXBlPSh0YWcpPT5cbi8vXG5HdWFyZFBheWxvYWRTaGFwZXNbdGFnXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b25LaW5kcz1uZXcgTWFwKFtcblsnbnVsbCcsbnVsbF0sXG5bJ3VuZGVmaW5lZCcsdW5kZWZpbmVkXV0pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdGFnTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tUYWdnZWQ9KHRhZ2dlZCx0YWcsY2hlY2spPT57XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHRhZyk7XG5pZihtYXRjaEhlbHBlcil7XG4vL1xuLy9cbnJldHVybiBtYXRjaEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCh0YWdnZWQucGF5bG9hZCxjaGVjayk7XG4gfWVsc2V7XG5jb25zdCBwYXlsb2FkU2hhcGU9bWF5YmVQYXlsb2FkU2hhcGUodGFnKTtcbmlmKHBheWxvYWRTaGFwZSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGNoZWNrTWF0Y2hlcyh0YWdnZWQucGF5bG9hZCxwYXlsb2FkU2hhcGUsY2hlY2ssdGFnKTtcbiB9XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbnJldHVybiBjaGVja0NvcHlTZXQodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbnJldHVybiBjaGVja0NvcHlCYWcodGFnZ2VkLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbnJldHVybiBjaGVja0NvcHlNYXAodGFnZ2VkLGNoZWNrKTtcbiB9XG5kZWZhdWx0OntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9OiAke3RhZ2dlZH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qga2luZE9mPShzcGVjaW1lbixjaGVjaz1pZGVudENoZWNrZXIpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYocGFzc1N0eWxlIT09J3RhZ2dlZCcpe1xucmV0dXJuIHBhc3NTdHlsZTtcbiB9XG4vL1xuLy9cbi8vXG5pZih0YWdNZW1vLmhhcyhzcGVjaW1lbikpe1xucmV0dXJuIHRhZ01lbW8uZ2V0KHNwZWNpbWVuKTtcbiB9XG5jb25zdCB0YWc9Z2V0VGFnKHNwZWNpbWVuKTtcbmlmKGNoZWNrVGFnZ2VkKHNwZWNpbWVuLHRhZyxjaGVjaykpe1xudGFnTWVtby5zZXQoc3BlY2ltZW4sdGFnKTtcbnJldHVybiB0YWc7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuY2hlY2soZmFsc2UsWCBgY2Fubm90IGNoZWNrIHVucmVjb2duaXplZCB0YWcgJHtxKHRhZyl9YCk7XG4gfVxucmV0dXJuIHVuZGVmaW5lZDtcbiB9O1xuaGFyZGVuKGtpbmRPZik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0tpbmQ9KHNwZWNpbWVuLGtpbmQsY2hlY2spPT57XG4vL1xuaWYoc2luZ2xldG9uS2luZHMuaGFzKGtpbmQpKXtcbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4sc2luZ2xldG9uS2luZHMuZ2V0KGtpbmQpLGNoZWNrKTtcbiB9XG5cbmNvbnN0IHJlYWxLaW5kPWtpbmRPZihzcGVjaW1lbixjaGVjayk7XG5pZihraW5kPT09cmVhbEtpbmQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY2hlY2shPT1pZGVudENoZWNrZXIpe1xuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke2IocmVhbEtpbmQpfSAke3NwZWNpbWVufSAtIE11c3QgYmUgYSAke2Ioa2luZCl9YCk7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaXNLaW5kPShzcGVjaW1lbixraW5kKT0+Y2hlY2tLaW5kKHNwZWNpbWVuLGtpbmQsaWRlbnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrQXNLZXlQYXR0PShzcGVjaW1lbixrZXlBc1BhdHRlcm4sY2hlY2spPT57XG5pZihpc0tleShzcGVjaW1lbikmJmtleUVRKHNwZWNpbWVuLGtleUFzUGF0dGVybikpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuLy9cbi8vXG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmU6ICR7a2V5QXNQYXR0ZXJufWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuPShwYXR0LGNoZWNrKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbmlmKHBhdHRlcm5NZW1vLmhhcyhwYXR0KSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuY29uc3QgcmVzdWx0PWNoZWNrUGF0dGVybkludGVybmFsKHBhdHQsY2hlY2spO1xuaWYocmVzdWx0KXtcbnBhdHRlcm5NZW1vLmFkZChwYXR0KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1BhdHRlcm5JbnRlcm5hbD0ocGF0dCxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tQYXR0ZXJuKGNoaWxkLGNoZWNrKTtcblxuY29uc3Qga2luZD1raW5kT2YocGF0dCxjaGVjayk7XG5zd2l0Y2goa2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbnJldHVybiB2YWx1ZXMocGF0dCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xucmV0dXJuIHBhdHQuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tQYXR0ZXJuKHBhdHQudmFsdWVzLGNoZWNrKTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKGtpbmQpfSBjYW5ub3QgYmUgYSBwYXR0ZXJuYCk7XG4gfVxuZGVmYXVsdDp7XG5pZihtYXliZU1hdGNoSGVscGVyKGtpbmQpIT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgQSBwYXNzYWJsZSBvZiBraW5kICR7cShraW5kKX0gaXMgbm90IGEgcGF0dGVybjogJHtwYXR0fWApO1xuXG4gfX1cblxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGlzUGF0dGVybj0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRQYXR0ZXJuPShwYXR0KT0+e1xuY2hlY2tQYXR0ZXJuKHBhdHQsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLy9cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzPShzcGVjaW1lbixwYXR0ZXJuLGNoZWNrLGxhYmVsPXVuZGVmaW5lZCk9PlxuLy9cbmFwcGx5TGFiZWxpbmdFcnJvcihjaGVja01hdGNoZXNJbnRlcm5hbCxbc3BlY2ltZW4scGF0dGVybixjaGVja10sbGFiZWwpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tNYXRjaGVzSW50ZXJuYWw9KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG4vL1xuY29uc3QgcGF0dGVybktpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuY29uc3Qgc3BlY2ltZW5LaW5kPWtpbmRPZihzcGVjaW1lbik7Ly9cbnN3aXRjaChwYXR0ZXJuS2luZCl7XG5jYXNlIHVuZGVmaW5lZDp7XG5yZXR1cm4gRmFpbCBgcGF0dGVybiBleHBlY3RlZDogJHtwYXR0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gRmFpbCBgcHJvbWlzZXMgY2Fubm90IGJlIHBhdHRlcm5zOiAke3BhdHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gRmFpbCBgZXJyb3JzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5QmFnJzpcbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlBcnJheSB0byBtYXRjaCBhIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbmNvbnN0e2xlbmd0aH09cGF0dDtcbmlmKHNwZWNpbWVuLmxlbmd0aCE9PWxlbmd0aCl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEFycmF5ICR7c3BlY2ltZW59IC0gTXVzdCBiZSBhcyBsb25nIGFzIGNvcHlBcnJheSBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbnJldHVybiBwYXR0LmV2ZXJ5KChwLGkpPT5jaGVja01hdGNoZXMoc3BlY2ltZW5baV0scCxjaGVjayxpKSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5UmVjb3JkIHRvIG1hdGNoIGEgY29weVJlY29yZCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3Qgc3BlY2ltZW5OYW1lcz1yZWNvcmROYW1lcyhzcGVjaW1lbik7XG5jb25zdCBwYXR0TmFtZXM9cmVjb3JkTmFtZXMocGF0dCk7XG5jb25zdCBtaXNzaW5nPWxpc3REaWZmZXJlbmNlKHBhdHROYW1lcyxzcGVjaW1lbk5hbWVzKTtcbmlmKG1pc3NpbmcubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGhhdmUgbWlzc2luZyBwcm9wZXJ0aWVzICR7cShtaXNzaW5nKX1gKTtcblxuIH1cbmNvbnN0IHVuZXhwZWN0ZWQ9bGlzdERpZmZlcmVuY2Uoc3BlY2ltZW5OYW1lcyxwYXR0TmFtZXMpO1xuaWYodW5leHBlY3RlZC5sZW5ndGg+PTEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3Qgbm90IGhhdmUgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3EoXG51bmV4cGVjdGVkKVxuIH1gKTtcblxuIH1cbmNvbnN0IHNwZWNpbWVuVmFsdWVzPXJlY29yZFZhbHVlcyhzcGVjaW1lbixzcGVjaW1lbk5hbWVzKTtcbmNvbnN0IHBhdHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHBhdHQscGF0dE5hbWVzKTtcbnJldHVybiBwYXR0TmFtZXMuZXZlcnkoKGxhYmVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lblZhbHVlc1tpXSxwYXR0VmFsdWVzW2ldLGNoZWNrLGxhYmVsKSk7XG5cbiB9XG5jYXNlJ2NvcHlNYXAnOntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmlmKHNwZWNpbWVuS2luZCE9PSdjb3B5TWFwJyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlNYXAgdG8gbWF0Y2ggYSBjb3B5TWFwIHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxuLy9cbmNvbnN0IHBhdHRLZXlTZXQ9Y29weU1hcEtleVNldChwYXR0KTtcbmNvbnN0IHNwZWNpbWVuS2V5U2V0PWNvcHlNYXBLZXlTZXQoc3BlY2ltZW4pO1xuaWYoIWNoZWNrTWF0Y2hlcyhzcGVjaW1lbktleVNldCxwYXR0S2V5U2V0LGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgcGF0dFZhbHVlcz1bXTtcbmNvbnN0IHNwZWNpbWVuVmFsdWVzPVtdO1xuY29uc3QgZW50cnlQYWlycz1nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhcbnBhdHQsXG5zcGVjaW1lbixcbmdldENvcHlNYXBFbnRyeUFycmF5LFxudW5kZWZpbmVkKTtcblxuZm9yKGNvbnN0W19rZXkscGF0dFZhbHVlLHNwZWNpbWVuVmFsdWVdb2YgZW50cnlQYWlycyl7XG5wYXR0VmFsdWVzLnB1c2gocGF0dFZhbHVlKTtcbnNwZWNpbWVuVmFsdWVzLnB1c2goc3BlY2ltZW5WYWx1ZSk7XG4gfVxucmV0dXJuIGNoZWNrTWF0Y2hlcyhoYXJkZW4oc3BlY2ltZW5WYWx1ZXMpLGhhcmRlbihwYXR0VmFsdWVzKSxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHBhdHRlcm5LaW5kKTtcbmlmKG1hdGNoSGVscGVyKXtcbnJldHVybiBtYXRjaEhlbHBlci5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dC5wYXlsb2FkLGNoZWNrKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogc2hvdWxkIGhhdmUgcmVjb2duaXplZCAke3EocGF0dGVybktpbmQpfSBgO1xuIH19XG5cbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1hdGNoZXM9KHNwZWNpbWVuLHBhdHQpPT5cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbXVzdE1hdGNoPShzcGVjaW1lbixwYXR0LGxhYmVsPXVuZGVmaW5lZCk9PntcbmxldCBpbm5lckVycm9yO1xudHJ5e1xuaWYoY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsaWRlbnRDaGVja2VyLHVuZGVmaW5lZCkpe1xucmV0dXJuO1xuIH1cbiB9Y2F0Y2goZXIpe1xuaW5uZXJFcnJvcj1lcjtcbiB9XG4vL1xuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsYXNzZXJ0Q2hlY2tlcixsYWJlbCk7XG5jb25zdCBvdXRlckVycm9yPW1ha2VFcnJvcihcblggYGludGVybmFsOiAke2xhYmVsfTogaW5jb25zaXN0ZW50IHBhdHRlcm4gbWF0Y2g6ICR7cShwYXR0KX1gKTtcblxuaWYoaW5uZXJFcnJvciE9PXVuZGVmaW5lZCl7XG5hbm5vdGF0ZUVycm9yKG91dGVyRXJyb3IsWCBgY2F1c2VkIGJ5ICR7aW5uZXJFcnJvcn1gKTtcbiB9XG50aHJvdyBvdXRlckVycm9yO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0UmFua0NvdmVyPShwYXR0LGVuY29kZVBhc3NhYmxlKT0+e1xuaWYoaXNLZXkocGF0dCkpe1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQYXNzYWJsZShwYXR0KTtcbmlmKGVuY29kZWQhPT11bmRlZmluZWQpe1xucmV0dXJuW2VuY29kZWQsIGAke2VuY29kZWR9fmBdO1xuIH1cbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGF0dCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHBhdHQpO1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuZ2V0UmFua0NvdmVyKHBhdHQucGF5bG9hZCxlbmNvZGVQYXNzYWJsZSk7XG4gfVxuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbmJyZWFrOy8vXG4gfVxuZGVmYXVsdDp7XG5icmVhazsvL1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFycmF5RXZlcnlNYXRjaFBhdHRlcm49KGFycmF5LHBhdHQsY2hlY2ssbGFiZWxQcmVmaXg9JycpPT57XG5pZihpc0tpbmQocGF0dCwnbWF0Y2g6YW55Jykpe1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBhcnJheS5ldmVyeSgoZWwsaSk9PlxuY2hlY2tNYXRjaGVzKGVsLHBhdHQsY2hlY2ssIGAke2xhYmVsUHJlZml4fVske2l9XWApKTtcblxuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFueUhlbHBlcj1GYXIoJ21hdGNoOmFueSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooX3NwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxfY2hlY2spPT50cnVlLFxuXG5jaGVja0lzV2VsbEZvcm1lZDoobWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbm1hdGNoZXJQYXlsb2FkPT09dW5kZWZpbmVkfHxcbmNoZWNrKGZhbHNlLFggYG1hdGNoOmFueSBwYXlsb2FkOiAke21hdGNoZXJQYXlsb2FkfSAtIE11c3QgYmUgdW5kZWZpbmVkYCksXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJycsJ3snXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFuZEhlbHBlcj1GYXIoJ21hdGNoOmFuZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scGF0dHMsY2hlY2spPT57XG5yZXR1cm4gcGF0dHMuZXZlcnkoKHBhdHQpPT5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxjaGVjaykpO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUGF0dHMsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShwYXR0KT0+Y2hlY2tQYXR0ZXJuKHBhdHQsY2hlY2spO1xucmV0dXJuKFxuKHBhc3NTdHlsZU9mKGFsbGVnZWRQYXR0cyk9PT0nY29weUFycmF5J3x8XG5jaGVjayhmYWxzZSxYIGBOZWVkcyBhcnJheSBvZiBzdWItcGF0dGVybnM6ICR7cShhbGxlZ2VkUGF0dHMpfWApKSYmXG5hbGxlZ2VkUGF0dHMuZXZlcnkoY2hlY2tJdCkpO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxuaW50ZXJzZWN0UmFua0NvdmVycyhcbmNvbXBhcmVSYW5rLFxucGF0dHMubWFwKChwKT0+Z2V0UmFua0NvdmVyKHAsZW5jb2RlUGFzc2FibGUpKSl9KTtcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE9ySGVscGVyPUZhcignbWF0Y2g6b3IgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xuY29uc3R7bGVuZ3RofT1wYXR0cztcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIG5vIHBhdHRlcm4gZGlzanVuY3RzIHRvIG1hdGNoOiAke3EocGF0dHMpfWApO1xuXG4gfVxuaWYoXG5wYXR0cy5sZW5ndGg9PT0yJiZcbiFtYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzBdKSYmXG5pc0tpbmQocGF0dHNbMF0sJ21hdGNoOmtpbmQnKSYmXG5wYXR0c1swXS5wYXlsb2FkPT09J3VuZGVmaW5lZCcpXG57XG4vL1xuLy9cbnJldHVybiBjaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dHNbMV0sY2hlY2spO1xuIH1cbmlmKHBhdHRzLnNvbWUoKHBhdHQpPT5tYXRjaGVzKHNwZWNpbWVuLHBhdHQpKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG1hdGNoIG9uZSBvZiAke3EocGF0dHMpfWApO1xuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW5kSGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KHBhdHRzLGVuY29kZVBhc3NhYmxlKT0+XG51bmlvblJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOb3RIZWxwZXI9RmFyKCdtYXRjaDpub3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHQsY2hlY2spPT57XG5pZihtYXRjaGVzKHNwZWNpbWVuLHBhdHQpKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGZhaWwgbmVnYXRlZCBwYXR0ZXJuOiAke3EocGF0dCl9YCk7XG5cbiB9ZWxzZXtcbnJldHVybiB0cnVlO1xuIH1cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja1BhdHRlcm4sXG5cbmdldFJhbmtDb3ZlcjooX3BhdHQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTY2FsYXJIZWxwZXI9RmFyKCdtYXRjaDpzY2FsYXIgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tTY2FsYXJLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLZXlIZWxwZXI9RmFyKCdtYXRjaDprZXkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tLZXkoc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hQYXR0ZXJuSGVscGVyPUZhcignbWF0Y2g6cGF0dGVybiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5jaGVja1BhdHRlcm4oc3BlY2ltZW4sY2hlY2spLFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFueUhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnYScsJ3p+J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hLaW5kSGVscGVyPUZhcignbWF0Y2g6a2luZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczpjaGVja0tpbmQsXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkS2V5S2luZCxjaGVjayk9PlxudHlwZW9mIGFsbGVnZWRLZXlLaW5kPT09J3N0cmluZyd8fFxuY2hlY2soXG5mYWxzZSxcblggYG1hdGNoOmtpbmQ6IHBheWxvYWQ6ICR7YWxsZWdlZEtleUtpbmR9IC0gQSBraW5kIG5hbWUgbXVzdCBiZSBhIHN0cmluZ2ApLFxuXG5cbmdldFJhbmtDb3Zlcjooa2luZCxfZW5jb2RlUGFzc2FibGUpPT57XG5sZXQgc3R5bGU7XG5zd2l0Y2goa2luZCl7XG5jYXNlJ2NvcHlTZXQnOlxuY2FzZSdjb3B5TWFwJzp7XG5zdHlsZT0ndGFnZ2VkJztcbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuc3R5bGU9a2luZDtcbmJyZWFrO1xuIH19XG5cbnJldHVybiBnZXRQYXNzU3R5bGVDb3ZlcihzdHlsZSk7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFRhZ2dlZEhlbHBlcj1GYXIoJ21hdGNoOnRhZ2dlZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW3RhZ1BhdHQscGF5bG9hZFBhdHRdLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2Yoc3BlY2ltZW4pIT09J3RhZ2dlZCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCB0YWdnZWQgb2JqZWN0LCBub3QgJHtxKFxucGFzc1N0eWxlT2Yoc3BlY2ltZW4pKVxuIH06ICR7c3BlY2ltZW59YCk7XG5cbiB9XG5yZXR1cm4oXG5jaGVja01hdGNoZXMoZ2V0VGFnKHNwZWNpbWVuKSx0YWdQYXR0LGNoZWNrLCd0YWcnKSYmXG5jaGVja01hdGNoZXMoc3BlY2ltZW4ucGF5bG9hZCxwYXlsb2FkUGF0dCxjaGVjaywncGF5bG9hZCcpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDp0YWdnZWQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2tpbmQsX2VuY29kZVBhc3NhYmxlKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmlnaW50SGVscGVyPUZhcignbWF0Y2g6YmlnaW50IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtkZWNpbWFsRGlnaXRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2JpZ2ludCcsY2hlY2spJiZcbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpiaWdpbnQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdiaWdpbnQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE5hdEhlbHBlcj1GYXIoJ21hdGNoOm5hdCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuPj0wbixcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBub24tbmVnYXRpdmVgKSYmXG5cbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0KHNwZWNpbWVuLGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpuYXQgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbi8vXG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTdHJpbmdIZWxwZXI9RmFyKCdtYXRjaDpzdHJpbmcgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e3N0cmluZ0xlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuLy9cbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnc3RyaW5nJyxjaGVjaykmJihcbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PXN0cmluZ0xlbmd0aExpbWl0fHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBzdHJpbmcgJHtzcGVjaW1lbn0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzdHJpbmdMZW5ndGhMaW1pdH1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN0cmluZyBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N0cmluZycpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3ltYm9sSGVscGVyPUZhcignbWF0Y2g6c3ltYm9sIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdzeW1ib2wnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3Qgc3ltYm9sTmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2woc3BlY2ltZW4pO1xuXG5pZih0eXBlb2Ygc3ltYm9sTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludGVybmFsOiBQYXNzYWJsZSBzeW1ib2wgJHtzcGVjaW1lbn0gbXVzdCBoYXZlIGEgcGFzc2FibGUgbmFtZWA7XG4gfVxucmV0dXJuIGNoZWNrKFxuc3ltYm9sTmFtZS5sZW5ndGg8PXN5bWJvbE5hbWVMZW5ndGhMaW1pdCxcblggYFN5bWJvbCBuYW1lICR7cShcbnN5bWJvbE5hbWUpXG4gfSBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiAke3N5bWJvbE5hbWVMZW5ndGhMaW1pdH1gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6c3ltYm9sIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3Zlcignc3ltYm9sJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZW1vdGFibGVIZWxwZXI9RmFyKCdtYXRjaDpyZW1vdGFibGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJlbW90YWJsZURlc2MsY2hlY2spPT57XG5pZihpc0tpbmQoc3BlY2ltZW4sJ3JlbW90YWJsZScpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrPT09aWRlbnRDaGVja2VyKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtsYWJlbH09cmVtb3RhYmxlRGVzYztcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5jb25zdCBraW5kRGV0YWlscz1cbnBhc3NTdHlsZSE9PSd0YWdnZWQnP1xuLy9cbmIocGFzc1N0eWxlKTpcbi8vXG4vL1xucShnZXRUYWcoc3BlY2ltZW4pKTtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuLy9cbi8vXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSByZW1vdGFibGUgJHtiKGxhYmVsKX0sIG5vdCAke2tpbmREZXRhaWxzfWApO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KGFsbGVnZWRSZW1vdGFibGVEZXNjLGNoZWNrKT0+XG5jaGVja01hdGNoZXMoXG5hbGxlZ2VkUmVtb3RhYmxlRGVzYyxcbmhhcmRlbih7bGFiZWw6TU0uc3RyaW5nKCl9KSxcbmNoZWNrLFxuJ21hdGNoOnJlbW90YWJsZSBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfcmVtb3RhYmxlRGVzYyxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdyZW1vdGFibGUnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExURUhlbHBlcj1GYXIoJ21hdGNoOmx0ZSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlMVEUoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPD0gJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6KHJpZ2h0T3BlcmFuZCxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyaWdodE9wZXJhbmQpO1xuLy9cbi8vXG4vL1xubGV0W2xlZnRCb3VuZCxyaWdodEJvdW5kXT1nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuY29uc3QgbmV3UmlnaHRCb3VuZD0gYCR7ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKX1+YDtcbmlmKG5ld1JpZ2h0Qm91bmQhPT11bmRlZmluZWQpe1xucmlnaHRCb3VuZD1uZXdSaWdodEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaExUSGVscGVyPUZhcignbWF0Y2g6bHQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFQoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPCAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaExURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hHVEVIZWxwZXI9RmFyKCdtYXRjaDpndGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1RFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlID49ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld0xlZnRCb3VuZD1lbmNvZGVQYXNzYWJsZShyaWdodE9wZXJhbmQpO1xuaWYobmV3TGVmdEJvdW5kIT09dW5kZWZpbmVkKXtcbmxlZnRCb3VuZD1uZXdMZWZ0Qm91bmQ7XG4gfVxucmV0dXJuW2xlZnRCb3VuZCxyaWdodEJvdW5kXTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RIZWxwZXI9RmFyKCdtYXRjaDpndCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlHVChzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOm1hdGNoR1RFSGVscGVyLmdldFJhbmtDb3Zlcn0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFJlY29yZE9mSGVscGVyPUZhcignbWF0Y2g6cmVjb3JkT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtUHJvcGVydGllc0xpbWl0LHByb3BlcnR5TmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykmJlxuY2hlY2soXG5vd25LZXlzKHNwZWNpbWVuKS5sZW5ndGg8PW51bVByb3BlcnRpZXNMaW1pdCxcblggYE11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVByb3BlcnRpZXNMaW1pdClcbiB9IHByb3BlcnRpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5lbnRyaWVzKHNwZWNpbWVuKS5ldmVyeShcbihba2V5LHZhbHVlXSk9PlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2ssXG5bXG5rZXkubGVuZ3RoPD1wcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdCxcblggYFByb3BlcnR5IG5hbWUgbXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gJHtxKFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQpXG4gfWBdLFxuXG5rZXkpJiZcblxuY2hlY2tNYXRjaGVzKFxuaGFyZGVuKFtrZXksdmFsdWVdKSxcbmhhcmRlbihba2V5UGF0dCx2YWx1ZVBhdHRdKSxcbmNoZWNrLFxua2V5KSkpO1xuXG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOnJlY29yZE9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9lbnRyeVBhdHQpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weVJlY29yZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQXJyYXlPZkhlbHBlcj1GYXIoJ21hdGNoOmFycmF5T2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtzdWJQYXR0LGxpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7YXJyYXlMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spJiYoXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLmxlbmd0aDw9YXJyYXlMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgQXJyYXkgbGVuZ3RoICR7c3BlY2ltZW4ubGVuZ3RofSBtdXN0IGJlIDw9IGxpbWl0ICR7YXJyYXlMZW5ndGhMaW1pdH1gKSkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLHN1YlBhdHQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6YXJyYXlPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTZXRPZkhlbHBlcj1GYXIoJ21hdGNoOnNldE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixba2V5UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e251bVNldEVsZW1lbnRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlTZXQnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGg8bnVtU2V0RWxlbWVudHNMaW1pdCxcblggYFNldCBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EobnVtU2V0RWxlbWVudHNMaW1pdCl9IGVsZW1lbnRzOiAke1xuc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGhcbiB9YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKHNwZWNpbWVuLnBheWxvYWQsa2V5UGF0dCxjaGVjaywnc2V0IGVsZW1lbnRzJykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpzZXRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hCYWdPZkhlbHBlcj1GYXIoJ21hdGNoOmJhZ09mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsY291bnRQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QmFnJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPD1cbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQsXG5YIGBCYWcgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKFxubnVtVW5pcXVlQmFnRWxlbWVudHNMaW1pdClcbiB9IHVuaXF1ZSBlbGVtZW50czogJHtzcGVjaW1lbn1gKSYmXG5cbnNwZWNpbWVuLnBheWxvYWQuZXZlcnkoXG4oW2tleSxjb3VudF0saSk9PlxuY2hlY2tNYXRjaGVzKGtleSxrZXlQYXR0LGNoZWNrLCBgYmFnIGtleXNbJHtpfV1gKSYmXG5hcHBseUxhYmVsaW5nRXJyb3IoXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdCxcbltjb3VudCxkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2tdLFxuIGBiYWcgY291bnRzWyR7aX1dYCkmJlxuXG5jaGVja01hdGNoZXMoY291bnQsY291bnRQYXR0LGNoZWNrLCBgYmFnIGNvdW50c1ske2l9XWApKSk7XG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmJhZ09mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE1hcE9mSGVscGVyPUZhcignbWF0Y2g6bWFwT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtTWFwRW50cmllc0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5TWFwJyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQua2V5cy5sZW5ndGg8PVxubnVtTWFwRW50cmllc0xpbWl0LFxuWCBgQ29weU1hcCBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuICR7cShcbm51bU1hcEVudHJpZXNMaW1pdClcbiB9IGVudHJpZXM6ICR7c3BlY2ltZW59YCkmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC5rZXlzLFxua2V5UGF0dCxcbmNoZWNrLFxuJ21hcCBrZXlzJykmJlxuXG5hcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuKFxuc3BlY2ltZW4ucGF5bG9hZC52YWx1ZXMsXG52YWx1ZVBhdHQsXG5jaGVjayxcbidtYXAgdmFsdWVzJykpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDptYXBPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3BsaXRBcnJheVBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuY29uc3QgbnVtUmVxdWlyZWQ9cmVxdWlyZWRQYXR0Lmxlbmd0aDtcbmNvbnN0IG51bU9wdGlvbmFsPW9wdGlvbmFsUGF0dC5sZW5ndGg7XG5jb25zdCByZXF1aXJlZFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKDAsbnVtUmVxdWlyZWQpO1xuY29uc3Qgb3B0aW9uYWxTcGVjaW1lbj1zcGVjaW1lbi5zbGljZShcbm51bVJlcXVpcmVkLFxubnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xuXG5jb25zdCByZXN0U3BlY2ltZW49c3BlY2ltZW4uc2xpY2UobnVtUmVxdWlyZWQrbnVtT3B0aW9uYWwpO1xucmV0dXJuIGhhcmRlbih7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdEFycmF5UGF0dGVybj0ob3B0aW9uYWxQYXR0LGxlbmd0aCk9PlxuaGFyZGVuKG9wdGlvbmFsUGF0dC5zbGljZSgwLGxlbmd0aCkubWFwKChwYXR0KT0+TU0ub3B0KHBhdHQpKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0QXJyYXlIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdEFycmF5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9W10scmVzdFBhdHQ9TU0uYW55KCldLFxuY2hlY2spPT5cbntcbmlmKCFjaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlBcnJheScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0QXJyYXlQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0QXJyYXlQYXR0ZXJuKFxub3B0aW9uYWxQYXR0LFxub3B0aW9uYWxTcGVjaW1lbi5sZW5ndGgpO1xuXG5sZXQgYXJnTnVtPTA7XG5yZXR1cm4oXG4ocmVxdWlyZWRTcGVjaW1lbi5sZW5ndGg9PT1yZXF1aXJlZFBhdHQubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBFeHBlY3RlZCBhdCBsZWFzdCAke3EoXG5yZXF1aXJlZFBhdHQubGVuZ3RoKVxuIH0gYXJndW1lbnRzOiAke3NwZWNpbWVufWApKSYmXG5cbnJlcXVpcmVkUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKHJlcXVpcmVkU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfWApKSYmXG5cbnBhcnRpYWxQYXR0LmV2ZXJ5KChwLGkpPT5cbi8vXG5jaGVja01hdGNoZXMob3B0aW9uYWxTcGVjaW1lbltpXSxwLGNoZWNrLCBgYXJnICR7YXJnTnVtKyt9P2ApKSYmXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weUFycmF5JyYmKFxub3B0aW9uYWxQYXR0PT09dW5kZWZpbmVkfHxcbmlzUGF0dGVybihvcHRpb25hbFBhdHQpJiZcbnBhc3NTdHlsZU9mKG9wdGlvbmFsUGF0dCk9PT0nY29weUFycmF5JykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgYXJyYXksIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCBhcnJheSwgYW5kIGFuIG9wdGlvbmFsIHJlc3RQYXR0OiAke3EoXG5zcGxpdEFycmF5KVxuIH1gKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjooW1xuX3JlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdjb3B5QXJyYXknKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0UmVjb3JkUGFydHM9KHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpPT57XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlcXVpcmVkRW50cmllcz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvcHRpb25hbEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdEVudHJpZXM9W107XG5mb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBlbnRyaWVzKHNwZWNpbWVuKSl7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHJlcXVpcmVkUGF0dCxuYW1lKSl7XG5yZXF1aXJlZEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNlIGlmKGhhc093blByb3BlcnR5T2Yob3B0aW9uYWxQYXR0LG5hbWUpKXtcbm9wdGlvbmFsRW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfWVsc2V7XG5yZXN0RW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe1xucmVxdWlyZWRTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXF1aXJlZEVudHJpZXMpLFxub3B0aW9uYWxTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhvcHRpb25hbEVudHJpZXMpLFxucmVzdFNwZWNpbWVuOmZyb21VbmlxdWVFbnRyaWVzKHJlc3RFbnRyaWVzKX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFkYXB0UmVjb3JkUGF0dGVybj0ob3B0aW9uYWxQYXR0LG5hbWVzKT0+XG5mcm9tVW5pcXVlRW50cmllcyhuYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxNTS5vcHQob3B0aW9uYWxQYXR0W25hbWVdKV0pKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3BsaXRSZWNvcmRIZWxwZXI9RmFyKCdtYXRjaDpzcGxpdFJlY29yZCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PXt9LHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5UmVjb3JkJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59PVxuc3BsaXRSZWNvcmRQYXJ0cyhzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KTtcblxuY29uc3QgcGFydGlhbE5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhvcHRpb25hbFNwZWNpbWVuKTtcbmNvbnN0IHBhcnRpYWxQYXR0PWFkYXB0UmVjb3JkUGF0dGVybihvcHRpb25hbFBhdHQscGFydGlhbE5hbWVzKTtcbnJldHVybihcbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuLHJlcXVpcmVkUGF0dCxjaGVjaykmJlxucGFydGlhbE5hbWVzLmV2ZXJ5KChuYW1lKT0+XG5jaGVja01hdGNoZXMoXG5vcHRpb25hbFNwZWNpbWVuW25hbWVdLFxucGFydGlhbFBhdHRbbmFtZV0sXG5jaGVjayxcbiBgJHtuYW1lfT9gKSkmJlxuXG5cbmNoZWNrTWF0Y2hlcyhyZXN0U3BlY2ltZW4scmVzdFBhdHQsY2hlY2ssJy4uLnJlc3QnKSk7XG5cbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmNoZWNrSXNXZWxsRm9ybWVkOihzcGxpdEFycmF5LGNoZWNrKT0+e1xuaWYoXG5wYXNzU3R5bGVPZihzcGxpdEFycmF5KT09PSdjb3B5QXJyYXknJiYoXG5zcGxpdEFycmF5Lmxlbmd0aD49MXx8c3BsaXRBcnJheS5sZW5ndGg8PTMpKVxue1xuY29uc3RbcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD11bmRlZmluZWQscmVzdFBhdHQ9dW5kZWZpbmVkXT1cbnNwbGl0QXJyYXk7XG5pZihcbmlzUGF0dGVybihyZXF1aXJlZFBhdHQpJiZcbnBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCk9PT0nY29weVJlY29yZCcmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlSZWNvcmQnKSYmKFxucmVzdFBhdHQ9PT11bmRlZmluZWR8fGlzUGF0dGVybihyZXN0UGF0dCkpKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgTXVzdCBiZSBhbiBhcnJheSBvZiBhIHJlcXVpcmVkUGF0dCByZWNvcmQsIGFuIG9wdGlvbmFsIG9wdGlvbmFsUGF0dCByZWNvcmQsIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbnJlcXVpcmVkUGF0dCxcbl9vcHRpb25hbFBhdHQ9dW5kZWZpbmVkLFxuX3Jlc3RQYXR0PXVuZGVmaW5lZF0pPT5cbmdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZU9mKHJlcXVpcmVkUGF0dCkpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJzQnlNYXRjaFRhZz1oYXJkZW4oe1xuJ21hdGNoOmFueSc6bWF0Y2hBbnlIZWxwZXIsXG4nbWF0Y2g6YW5kJzptYXRjaEFuZEhlbHBlcixcbidtYXRjaDpvcic6bWF0Y2hPckhlbHBlcixcbidtYXRjaDpub3QnOm1hdGNoTm90SGVscGVyLFxuXG4nbWF0Y2g6c2NhbGFyJzptYXRjaFNjYWxhckhlbHBlcixcbidtYXRjaDprZXknOm1hdGNoS2V5SGVscGVyLFxuJ21hdGNoOnBhdHRlcm4nOm1hdGNoUGF0dGVybkhlbHBlcixcbidtYXRjaDpraW5kJzptYXRjaEtpbmRIZWxwZXIsXG4nbWF0Y2g6dGFnZ2VkJzptYXRjaFRhZ2dlZEhlbHBlcixcbidtYXRjaDpiaWdpbnQnOm1hdGNoQmlnaW50SGVscGVyLFxuJ21hdGNoOm5hdCc6bWF0Y2hOYXRIZWxwZXIsXG4nbWF0Y2g6c3RyaW5nJzptYXRjaFN0cmluZ0hlbHBlcixcbidtYXRjaDpzeW1ib2wnOm1hdGNoU3ltYm9sSGVscGVyLFxuJ21hdGNoOnJlbW90YWJsZSc6bWF0Y2hSZW1vdGFibGVIZWxwZXIsXG5cbidtYXRjaDpsdCc6bWF0Y2hMVEhlbHBlcixcbidtYXRjaDpsdGUnOm1hdGNoTFRFSGVscGVyLFxuJ21hdGNoOmd0ZSc6bWF0Y2hHVEVIZWxwZXIsXG4nbWF0Y2g6Z3QnOm1hdGNoR1RIZWxwZXIsXG5cbidtYXRjaDphcnJheU9mJzptYXRjaEFycmF5T2ZIZWxwZXIsXG4nbWF0Y2g6cmVjb3JkT2YnOm1hdGNoUmVjb3JkT2ZIZWxwZXIsXG4nbWF0Y2g6c2V0T2YnOm1hdGNoU2V0T2ZIZWxwZXIsXG4nbWF0Y2g6YmFnT2YnOm1hdGNoQmFnT2ZIZWxwZXIsXG4nbWF0Y2g6bWFwT2YnOm1hdGNoTWFwT2ZIZWxwZXIsXG4nbWF0Y2g6c3BsaXRBcnJheSc6bWF0Y2hTcGxpdEFycmF5SGVscGVyLFxuJ21hdGNoOnNwbGl0UmVjb3JkJzptYXRjaFNwbGl0UmVjb3JkSGVscGVyfSk7XG5cblxuY29uc3QgbWFrZU1hdGNoZXI9KHRhZyxwYXlsb2FkKT0+e1xuY29uc3QgbWF0Y2hlcj1tYWtlVGFnZ2VkKHRhZyxwYXlsb2FkKTtcbmFzc2VydFBhdHRlcm4obWF0Y2hlcik7XG5yZXR1cm4gbWF0Y2hlcjtcbiB9O1xuXG5jb25zdCBtYWtlS2luZE1hdGNoZXI9KGtpbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6a2luZCcsa2luZCk7XG5cbmNvbnN0IEFueVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDphbnknLHVuZGVmaW5lZCk7XG5jb25zdCBTY2FsYXJTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6c2NhbGFyJyx1bmRlZmluZWQpO1xuY29uc3QgS2V5U2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOmtleScsdW5kZWZpbmVkKTtcbmNvbnN0IFBhdHRlcm5TaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6cGF0dGVybicsdW5kZWZpbmVkKTtcbmNvbnN0IEJvb2xlYW5TaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Jvb2xlYW4nKTtcbmNvbnN0IE51bWJlclNoYXBlPW1ha2VLaW5kTWF0Y2hlcignbnVtYmVyJyk7XG5jb25zdCBCaWdJbnRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiaWdpbnQnLFtdKTtcbmNvbnN0IE5hdFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOm5hdCcsW10pO1xuY29uc3QgU3RyaW5nU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3RyaW5nJyxbXSk7XG5jb25zdCBTeW1ib2xTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzeW1ib2wnLFtdKTtcbmNvbnN0IFJlY29yZFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnJlY29yZE9mJyxbQW55U2hhcGUsQW55U2hhcGVdKTtcbmNvbnN0IEFycmF5U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YXJyYXlPZicsW0FueVNoYXBlXSk7XG5jb25zdCBTZXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzZXRPZicsW0FueVNoYXBlXSk7XG5jb25zdCBCYWdTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpiYWdPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBNYXBTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDptYXBPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBSZW1vdGFibGVTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3JlbW90YWJsZScpO1xuY29uc3QgRXJyb3JTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ2Vycm9yJyk7XG5jb25zdCBQcm9taXNlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdwcm9taXNlJyk7XG5jb25zdCBVbmRlZmluZWRTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3VuZGVmaW5lZCcpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VMaW1pdHNNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmlmKHBheWxvYWRbcGF5bG9hZC5sZW5ndGgtMV09PT11bmRlZmluZWQpe1xucGF5bG9hZD1oYXJkZW4ocGF5bG9hZC5zbGljZSgwLHBheWxvYWQubGVuZ3RoLTEpKTtcbiB9XG5yZXR1cm4gbWFrZU1hdGNoZXIodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VSZW1vdGFibGVNYXRjaGVyPShsYWJlbD11bmRlZmluZWQpPT5cbmxhYmVsPT09dW5kZWZpbmVkP1xuUmVtb3RhYmxlU2hhcGU6XG5tYWtlTWF0Y2hlcignbWF0Y2g6cmVtb3RhYmxlJyxoYXJkZW4oe2xhYmVsfSkpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTcGxpdFBheWxvYWQ9KFxuZW1wdHksXG5iYXNlLFxub3B0aW9uYWw9dW5kZWZpbmVkLFxucmVzdD11bmRlZmluZWQpPT5cbntcbmlmKHJlc3Qpe1xucmV0dXJuW2Jhc2Usb3B0aW9uYWx8fGVtcHR5LHJlc3RdO1xuIH1cbmlmKG9wdGlvbmFsKXtcbnJldHVybltiYXNlLG9wdGlvbmFsXTtcbiB9XG5yZXR1cm5bYmFzZV07XG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgTT1oYXJkZW4oe1xuYW55OigpPT5BbnlTaGFwZSxcbmFuZDooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6YW5kJyxwYXR0cyksXG5vcjooLi4ucGF0dHMpPT5tYWtlTWF0Y2hlcignbWF0Y2g6b3InLHBhdHRzKSxcbm5vdDooc3ViUGF0dCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpub3QnLHN1YlBhdHQpLFxuXG5zY2FsYXI6KCk9PlNjYWxhclNoYXBlLFxua2V5OigpPT5LZXlTaGFwZSxcbnBhdHRlcm46KCk9PlBhdHRlcm5TaGFwZSxcbmtpbmQ6bWFrZUtpbmRNYXRjaGVyLFxudGFnZ2VkOih0YWdQYXR0PU0uc3RyaW5nKCkscGF5bG9hZFBhdHQ9TS5hbnkoKSk9PlxubWFrZU1hdGNoZXIoJ21hdGNoOnRhZ2dlZCcsaGFyZGVuKFt0YWdQYXR0LHBheWxvYWRQYXR0XSkpLFxuYm9vbGVhbjooKT0+Qm9vbGVhblNoYXBlLFxubnVtYmVyOigpPT5OdW1iZXJTaGFwZSxcbmJpZ2ludDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiaWdpbnQnLFtsaW1pdHNdKTpCaWdJbnRTaGFwZSxcbm5hdDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpuYXQnLFtsaW1pdHNdKTpOYXRTaGFwZSxcbnN0cmluZzoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzdHJpbmcnLFtsaW1pdHNdKTpTdHJpbmdTaGFwZSxcbnN5bWJvbDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP21ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzeW1ib2wnLFtsaW1pdHNdKTpTeW1ib2xTaGFwZSxcbnJlY29yZDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ucmVjb3JkT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6UmVjb3JkU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYXJyYXk6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmFycmF5T2YoTS5hbnkoKSxsaW1pdHMpOkFycmF5U2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5zZXQ6KGxpbWl0cz11bmRlZmluZWQpPT5saW1pdHM/TS5zZXRPZihNLmFueSgpLGxpbWl0cyk6U2V0U2hhcGUsXG5iYWc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLmJhZ09mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOkJhZ1NoYXBlLFxubWFwOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5tYXBPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpNYXBTaGFwZSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZW1vdGFibGU6bWFrZVJlbW90YWJsZU1hdGNoZXIsXG5lcnJvcjooKT0+RXJyb3JTaGFwZSxcbnByb21pc2U6KCk9PlByb21pc2VTaGFwZSxcbnVuZGVmaW5lZDooKT0+VW5kZWZpbmVkU2hhcGUsXG5udWxsOigpPT5udWxsLFxuXG5sdDoocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0JyxyaWdodE9wZXJhbmQpLFxubHRlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bHRlJyxyaWdodE9wZXJhbmQpLFxuZXE6KGtleSk9PntcbmFzc2VydEtleShrZXkpO1xucmV0dXJuIGtleT09PXVuZGVmaW5lZD9NLnVuZGVmaW5lZCgpOmtleTtcbiB9LFxubmVxOihrZXkpPT5NLm5vdChNLmVxKGtleSkpLFxuZ3RlOihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3RlJyxyaWdodE9wZXJhbmQpLFxuZ3Q6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpndCcscmlnaHRPcGVyYW5kKSxcblxucmVjb3JkT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6cmVjb3JkT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbmFycmF5T2Y6KHN1YlBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YXJyYXlPZicsW3N1YlBhdHQsbGltaXRzXSksXG5zZXRPZjooa2V5UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpzZXRPZicsW2tleVBhdHQsbGltaXRzXSksXG5iYWdPZjooa2V5UGF0dD1NLmFueSgpLGNvdW50UGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpiYWdPZicsW2tleVBhdHQsY291bnRQYXR0LGxpbWl0c10pLFxubWFwT2Y6KGtleVBhdHQ9TS5hbnkoKSx2YWx1ZVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bWFwT2YnLFtrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHNdKSxcbnNwbGl0QXJyYXk6KGJhc2Usb3B0aW9uYWw9dW5kZWZpbmVkLHJlc3Q9dW5kZWZpbmVkKT0+XG5tYWtlTWF0Y2hlcihcbidtYXRjaDpzcGxpdEFycmF5Jyxcbm1ha2VTcGxpdFBheWxvYWQoW10sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0UmVjb3JkOihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRSZWNvcmQnLFxubWFrZVNwbGl0UGF5bG9hZCh7fSxiYXNlLG9wdGlvbmFsLHJlc3QpKSxcblxuc3BsaXQ6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KGJhc2UscmVzdCYmW10scmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZChiYXNlLHJlc3QmJnt9LHJlc3QpO1xuIH1cbiB9LFxucGFydGlhbDooYmFzZSxyZXN0PXVuZGVmaW5lZCk9PntcbmlmKHBhc3NTdHlsZU9mKGhhcmRlbihiYXNlKSk9PT0nY29weUFycmF5Jyl7XG4vL1xuLy9cbnJldHVybiBNLnNwbGl0QXJyYXkoW10sYmFzZSxyZXN0KTtcbiB9ZWxzZXtcbnJldHVybiBNLnNwbGl0UmVjb3JkKHt9LGJhc2UscmVzdCk7XG4gfVxuIH0sXG5cbmVyZWY6KHQpPT5NLm9yKHQsTS5wcm9taXNlKCkpLFxub3B0Oih0KT0+TS5vcihNLnVuZGVmaW5lZCgpLHQpLFxuXG5pbnRlcmZhY2U6KGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpPT5cbi8vXG5tYWtlSW50ZXJmYWNlR3VhcmQoaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucyksXG5jYWxsOiguLi5hcmdQYXR0ZXJucyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdzeW5jJyxhcmdQYXR0ZXJucyksXG5jYWxsV2hlbjooLi4uYXJnR3VhcmRzKT0+XG4vL1xubWFrZU1ldGhvZEd1YXJkTWFrZXIoJ2FzeW5jJyxhcmdHdWFyZHMpLFxuXG5hd2FpdDooYXJnUGF0dGVybik9PlxuLy9cbm1ha2VBd2FpdEFyZ0d1YXJkKGFyZ1BhdHRlcm4pLFxucmF3OigpPT5cbi8vXG5tYWtlUmF3R3VhcmQoKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICB7XG5jaGVja01hdGNoZXMsXG5tYXRjaGVzLFxubXVzdE1hdGNoLFxuYXNzZXJ0UGF0dGVybixcbmlzUGF0dGVybixcbmdldFJhbmtDb3Zlcixcbk0sXG5raW5kT2Z9PVxubWFrZVBhdHRlcm5LaXQoKTskaM2PX29uY2UuY2hlY2tNYXRjaGVzKGNoZWNrTWF0Y2hlcyk7JGjNj19vbmNlLm1hdGNoZXMobWF0Y2hlcyk7JGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpOyRozY9fb25jZS5hc3NlcnRQYXR0ZXJuKGFzc2VydFBhdHRlcm4pOyRozY9fb25jZS5pc1BhdHRlcm4oaXNQYXR0ZXJuKTskaM2PX29uY2UuZ2V0UmFua0NvdmVyKGdldFJhbmtDb3Zlcik7JGjNj19vbmNlLk0oTSk7JGjNj19vbmNlLmtpbmRPZihraW5kT2YpO1xuXG5NTT1NO1xuXG4vL1xuXG4vL1xuY29uc3QgQXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG5jb25zdCAgICAgICAgQXdhaXRBcmdHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6YXdhaXRBcmdHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5Bd2FpdEFyZ0d1YXJkU2hhcGUoQXdhaXRBcmdHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBpc0F3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+XG5tYXRjaGVzKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzQXdhaXRBcmdHdWFyZChpc0F3YWl0QXJnR3VhcmQpO1xuaGFyZGVuKGlzQXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXdhaXRBcmdHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sQXdhaXRBcmdHdWFyZFNoYXBlLCdhd2FpdEFyZ0d1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0QXdhaXRBcmdHdWFyZChhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VBd2FpdEFyZ0d1YXJkPShhcmdQYXR0ZXJuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnLHtcbmFyZ0d1YXJkOmFyZ1BhdHRlcm59KTtcblxuYXNzZXJ0QXdhaXRBcmdHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vL1xuXG5jb25zdCBSYXdHdWFyZFBheWxvYWRTaGFwZT1NLnJlY29yZCgpO1xuXG5jb25zdCAgICAgICAgUmF3R3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOnJhd0d1YXJkJyk7JGjNj19vbmNlLlJhd0d1YXJkU2hhcGUoUmF3R3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBpc1Jhd0d1YXJkPShzcGVjaW1lbik9Pm1hdGNoZXMoc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSk7JGjNj19vbmNlLmlzUmF3R3VhcmQoaXNSYXdHdWFyZCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRSYXdHdWFyZD0oc3BlY2ltZW4pPT5cbm11c3RNYXRjaChzcGVjaW1lbixSYXdHdWFyZFNoYXBlLCdyYXdHdWFyZCcpO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0UmF3R3VhcmQoYXNzZXJ0UmF3R3VhcmQpO1xuY29uc3QgbWFrZVJhd0d1YXJkPSgpPT5tYWtlVGFnZ2VkKCdndWFyZDpyYXdHdWFyZCcse30pO1xuXG4vL1xuLy9cblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRTaGFwZShTeW5jVmFsdWVHdWFyZFNoYXBlKTtcblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihTeW5jVmFsdWVHdWFyZFNoYXBlKTskaM2PX29uY2UuU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBBcmdHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsTS5wYXR0ZXJuKCkpO1xuY29uc3QgICAgICAgIEFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihBcmdHdWFyZFNoYXBlKTskaM2PX29uY2UuQXJnR3VhcmRMaXN0U2hhcGUoQXJnR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBTeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCBBc3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxub3B0aW9uYWxBcmdHdWFyZHM6TS5vcHQoQXJnR3VhcmRMaXN0U2hhcGUpLFxucmVzdEFyZ0d1YXJkOk0ub3B0KFN5bmNWYWx1ZUd1YXJkU2hhcGUpLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1NLm9yKFxuU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7JGjNj19vbmNlLk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOm1ldGhvZEd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLk1ldGhvZEd1YXJkU2hhcGUoTWV0aG9kR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0TWV0aG9kR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLE1ldGhvZEd1YXJkU2hhcGUsJ21ldGhvZEd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0TWV0aG9kR3VhcmQoYXNzZXJ0TWV0aG9kR3VhcmQpO1xuaGFyZGVuKGFzc2VydE1ldGhvZEd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNZXRob2RHdWFyZE1ha2VyPShcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkPXVuZGVmaW5lZCk9PlxuXG5oYXJkZW4oe1xub3B0aW9uYWw6KC4uLm9wdEFyZ0d1YXJkcyk9Pntcbm9wdGlvbmFsQXJnR3VhcmRzPT09dW5kZWZpbmVkfHxcbkZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHNldCBvZiBvcHRpb25hbCBndWFyZHNgO1xucmVzdEFyZ0d1YXJkPT09dW5kZWZpbmVkfHxcbkZhaWwgYG9wdGlvbmFsIGFyZyBndWFyZHMgbXVzdCBjb21lIGJlZm9yZSByZXN0IGFyZ2A7XG5yZXR1cm4gbWFrZU1ldGhvZEd1YXJkTWFrZXIoY2FsbEtpbmQsYXJnR3VhcmRzLG9wdEFyZ0d1YXJkcyk7XG4gfSxcbnJlc3Q6KHJBcmdHdWFyZCk9PntcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8RmFpbCBgQ2FuIG9ubHkgaGF2ZSBvbmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKFxuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJBcmdHdWFyZCk7XG5cbiB9LFxucmV0dXJuczoocmV0dXJuR3VhcmQ9TS51bmRlZmluZWQoKSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnLHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG5hc3NlcnRNZXRob2RHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihNLnN0cmluZygpLE1ldGhvZEd1YXJkU2hhcGUpfSxcblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7JGjNj19vbmNlLkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuSW50ZXJmYWNlR3VhcmRTaGFwZShJbnRlcmZhY2VHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRJbnRlcmZhY2VHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sSW50ZXJmYWNlR3VhcmRTaGFwZSwnaW50ZXJmYWNlR3VhcmQnKTtcbiB9OyRozY9fb25jZS5hc3NlcnRJbnRlcmZhY2VHdWFyZChhc3NlcnRJbnRlcmZhY2VHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludGVyZmFjZUd1YXJkPShpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zPXt9KT0+e1xuY29uc3R7c2xvcHB5PWZhbHNlLGRlZmF1bHRHdWFyZHM9c2xvcHB5PydwYXNzYWJsZSc6dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmluZ01ldGhvZEd1YXJkcz17fTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXM9W107XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMobWV0aG9kR3VhcmRzKSl7XG5jb25zdCB2YWx1ZT1tZXRob2RHdWFyZHNbLyogICAgICAgICAgICAgICAgICova2V5XTtcbmlmKHR5cGVvZiBrZXk9PT0nc3ltYm9sJyl7XG5zeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLnB1c2goW2tleSx2YWx1ZV0pO1xuIH1lbHNle1xuc3RyaW5nTWV0aG9kR3VhcmRzW2tleV09dmFsdWU7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnLHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6c3RyaW5nTWV0aG9kR3VhcmRzLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXMubGVuZ3RoP1xue3N5bWJvbE1ldGhvZEd1YXJkczptYWtlQ29weU1hcChzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzKX06XG57fSksXG5kZWZhdWx0R3VhcmRzfSk7XG5cbmFzc2VydEludGVyZmFjZUd1YXJkKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5jb25zdCBHdWFyZFBheWxvYWRTaGFwZXM9aGFyZGVuKHtcbidndWFyZDphd2FpdEFyZ0d1YXJkJzpBd2FpdEFyZ0d1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOnJhd0d1YXJkJzpSYXdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDptZXRob2RHdWFyZCc6TWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnOkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlfSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0TGltaXRzIjpbImRlZmF1bHRMaW1pdHMiXSwiY2hlY2tNYXRjaGVzIjpbImNoZWNrTWF0Y2hlcyJdLCJtYXRjaGVzIjpbIm1hdGNoZXMiXSwibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJhc3NlcnRQYXR0ZXJuIjpbImFzc2VydFBhdHRlcm4iXSwiaXNQYXR0ZXJuIjpbImlzUGF0dGVybiJdLCJnZXRSYW5rQ292ZXIiOlsiZ2V0UmFua0NvdmVyIl0sIk0iOlsiTSJdLCJraW5kT2YiOlsia2luZE9mIl0sIkF3YWl0QXJnR3VhcmRTaGFwZSI6WyJBd2FpdEFyZ0d1YXJkU2hhcGUiXSwiaXNBd2FpdEFyZ0d1YXJkIjpbImlzQXdhaXRBcmdHdWFyZCJdLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIjpbImFzc2VydEF3YWl0QXJnR3VhcmQiXSwiUmF3R3VhcmRTaGFwZSI6WyJSYXdHdWFyZFNoYXBlIl0sImlzUmF3R3VhcmQiOlsiaXNSYXdHdWFyZCJdLCJhc3NlcnRSYXdHdWFyZCI6WyJhc3NlcnRSYXdHdWFyZCJdLCJTeW5jVmFsdWVHdWFyZFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkU2hhcGUiXSwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiOlsiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiXSwiQXJnR3VhcmRMaXN0U2hhcGUiOlsiQXJnR3VhcmRMaXN0U2hhcGUiXSwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiOlsiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiXSwiTWV0aG9kR3VhcmRTaGFwZSI6WyJNZXRob2RHdWFyZFNoYXBlIl0sImFzc2VydE1ldGhvZEd1YXJkIjpbImFzc2VydE1ldGhvZEd1YXJkIl0sIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIl0sIkludGVyZmFjZUd1YXJkU2hhcGUiOlsiSW50ZXJmYWNlR3VhcmRTaGFwZSJdLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCI6WyJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAiAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0gGixEIGAABCBgAAIQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRozY9faW1wb3J0cyhbW1wiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNcIiwgW1tcIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaM2PX2EgPT4gKG1lbW9SYWNlID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjNj19vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRozY9fb25jZS5yYWNlUHJvbWlzZXMocmFjZVByb21pc2VzKTsgICBcblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAs11bRlUCAABVAgAAKgAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNQcm9taXNlLCAnbmFtZScsIHt2YWx1ZTogXCJpc1Byb21pc2VcIn0pOyRozY9fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+mbwkZwHAACcBwAAKQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnG3EsnwFAAB8BQAANAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVzb2x2ZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlamVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmU9KHZhbHVlKT0+e1xuaWYoaW50ZXJuYWxSZXNvbHZlKXtcbmludGVybmFsUmVzb2x2ZSh2YWx1ZSk7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09bnVsbCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVqZWN0PShyZWFzb24pPT57XG5pZihpbnRlcm5hbFJlamVjdCl7XG5pbnRlcm5hbFJlamVjdChyZWFzb24pO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVqZWN0PT09bnVsbCk7XG4gfVxuIH07XG5cbmNvbnN0IGV4ZWN1dG9yPShyZXMscmVqKT0+e1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PXVuZGVmaW5lZCYmaW50ZXJuYWxSZWplY3Q9PT11bmRlZmluZWQpO1xuaW50ZXJuYWxSZXNvbHZlPXJlcztcbmludGVybmFsUmVqZWN0PXJlajtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn0pO1xuIH07JGjNj19vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACUAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADcaPdCkBEAAJARAAAcAAAAQGVuZG8vc3RyZWFtLXYxLjIuOC9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiXSwiZXhwb3J0cyI6WyJtYWtlUGlwZSIsIm1ha2VRdWV1ZSIsIm1ha2VTdHJlYW0iLCJtYXBSZWFkZXIiLCJtYXBXcml0ZXIiLCJwcmltZSIsInB1bXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBmcmVlemU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL09iamVjdC5mcmVlemU7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVF1ZXVlPSgpPT57XG5sZXR7cHJvbWlzZTp0YWlsUHJvbWlzZSxyZXNvbHZlOnRhaWxSZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucmV0dXJue1xucHV0KHZhbHVlKXtcbmNvbnN0e3Jlc29sdmUscHJvbWlzZX09bWFrZVByb21pc2VLaXQoKTtcbnRhaWxSZXNvbHZlKGZyZWV6ZSh7dmFsdWUscHJvbWlzZX0pKTtcbnRhaWxSZXNvbHZlPXJlc29sdmU7XG4gfSxcbmdldCgpe1xuY29uc3QgcHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC52YWx1ZSk7XG50YWlsUHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC5wcm9taXNlKTtcbnJldHVybiBoYXJkZW4ocHJvbWlzZSk7XG4gfX07XG5cbiB9OyRozY9fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaM2PX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjNj19vbmNlLm1ha2VQaXBlKG1ha2VQaXBlKTtcbmhhcmRlbihtYWtlUGlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHB1bXA9YXN5bmMod3JpdGVyLHJlYWRlcixwcmltZXIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0aWNrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiB0b2NrKHdyaXRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0b2NrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZWFkZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG5yZXR1cm4gdGljayhyZWFkZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHJlYWRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbmF3YWl0IHRpY2socmVhZGVyLm5leHQocHJpbWVyKSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRozY9fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRozY9fb25jZS5tYXBSZWFkZXIobWFwUmVhZGVyKTtcbmhhcmRlbihtYXBSZWFkZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFdyaXRlcj0od3JpdGVyLHRyYW5zZm9ybSk9PntcbmNvbnN0IHRyYW5zZm9ybWVkV3JpdGVyPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbnJldHVybiB3cml0ZXIubmV4dCh0cmFuc2Zvcm0odmFsdWUpKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybih2YWx1ZSk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9fSk7XG5cbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9OyRozY9fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAqEOyRkQEAAJEBAAAgAAAAQGVuZG8vdHJhbXBvbGluZS12MS4wLjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvdHJhbXBvbGluZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL3RyYW1wb2xpbmUuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3RyYW1wb2xpbmUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8mi5oCAHAAAgBwAAKQAAAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zL3NyYy90cmFtcG9saW5lLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJhc3luY1RyYW1wb2xpbmUiLCJnZW5lcmF0b3JQcm90b3R5cGUiLCJzeW5jVHJhbXBvbGluZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHN5bmNUcmFtcG9saW5lLCAnbmFtZScsIHt2YWx1ZTogXCJzeW5jVHJhbXBvbGluZVwifSk7JGjNj19vbmNlLnN5bmNUcmFtcG9saW5lKHN5bmNUcmFtcG9saW5lKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYXN5bmNUcmFtcG9saW5lLCAnbmFtZScsIHt2YWx1ZTogXCJhc3luY1RyYW1wb2xpbmVcIn0pOyRozY9fb25jZS5hc3luY1RyYW1wb2xpbmUoYXN5bmNUcmFtcG9saW5lKTsgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG4gKi9cbmNvbnN0e2dldFByb3RvdHlwZU9mfT1PYmplY3Q7XG5jb25zdHtiaW5kfT1GdW5jdGlvbi5wcm90b3R5cGU7XG5jb25zdCB1bmN1cnJ5VGhpcz1iaW5kLmJpbmQoYmluZC5jYWxsKTsvL1xuY29uc3QgICAgICAge3Byb3RvdHlwZTpnZW5lcmF0b3JQcm90b3R5cGV9PWdldFByb3RvdHlwZU9mKFxuLy9cbmZ1bmN0aW9uKigpeyB9KTskaM2PX29uY2UuZ2VuZXJhdG9yUHJvdG90eXBlKGdlbmVyYXRvclByb3RvdHlwZSk7XG5cbmNvbnN0IGdlbmVyYXRvck5leHQ9dW5jdXJyeVRoaXMoZ2VuZXJhdG9yUHJvdG90eXBlLm5leHQpO1xuY29uc3QgZ2VuZXJhdG9yVGhyb3c9dW5jdXJyeVRoaXMoZ2VuZXJhdG9yUHJvdG90eXBlLnRocm93KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgc3luY1RyYW1wb2xpbmUoZ2VuZXJhdG9yRm4sLi4uYXJncyl7XG5jb25zdCBpdGVyYXRvcj1nZW5lcmF0b3JGbiguLi5hcmdzKTtcbmxldCByZXN1bHQ9Z2VuZXJhdG9yTmV4dChpdGVyYXRvcik7XG53aGlsZSghcmVzdWx0LmRvbmUpe1xudHJ5e1xucmVzdWx0PWdlbmVyYXRvck5leHQoaXRlcmF0b3IscmVzdWx0LnZhbHVlKTtcbiB9Y2F0Y2goZXJyKXtcbnJlc3VsdD1nZW5lcmF0b3JUaHJvdyhpdGVyYXRvcixlcnIpO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0LnZhbHVlO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgYXN5bmNUcmFtcG9saW5lKGdlbmVyYXRvckZuLC4uLmFyZ3Mpe1xuY29uc3QgaXRlcmF0b3I9Z2VuZXJhdG9yRm4oLi4uYXJncyk7XG5sZXQgcmVzdWx0PWdlbmVyYXRvck5leHQoaXRlcmF0b3IpO1xud2hpbGUoIXJlc3VsdC5kb25lKXtcbnRyeXtcbi8vXG5jb25zdCB2YWw9YXdhaXQgcmVzdWx0LnZhbHVlO1xucmVzdWx0PWdlbmVyYXRvck5leHQoaXRlcmF0b3IsdmFsKTtcbiB9Y2F0Y2goZXJyKXtcbnJlc3VsdD1nZW5lcmF0b3JUaHJvdyhpdGVyYXRvcixlcnIpO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0LnZhbHVlO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdlbmVyYXRvclByb3RvdHlwZSI6WyJnZW5lcmF0b3JQcm90b3R5cGUiXSwic3luY1RyYW1wb2xpbmUiOlsic3luY1RyYW1wb2xpbmUiXSwiYXN5bmNUcmFtcG9saW5lIjpbImFzeW5jVHJhbXBvbGluZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXAE+zjAIAAIwCAAAZAAAAQGVuZG8vemlwLXYxLjAuOS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy90eXBlcy5qcyIsIi4vc3JjL3JlYWRlci5qcyIsIi4vc3JjL3dyaXRlci5qcyJdLCJleHBvcnRzIjpbInJlYWRaaXAiLCJyZWFkWmlwIiwid3JpdGVaaXAiLCJ3cml0ZVppcCJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3NyYy9yZWFkZXIuanNcIiwgW11dLFtcIi4vc3JjL3dyaXRlci5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL3JlYWRlci5qcyI6W1siWmlwUmVhZGVyIiwiWmlwUmVhZGVyIl0sWyJyZWFkWmlwIiwicmVhZFppcCJdXSwiLi9zcmMvd3JpdGVyLmpzIjpbWyJaaXBXcml0ZXIiLCJaaXBXcml0ZXIiXSxbIndyaXRlWmlwIiwid3JpdGVaaXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGSqkgNCEgAAQhIAACUAAABAZW5kby96aXAtdjEuMC45L3NyYy9idWZmZXItcmVhZGVyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCdWZmZXJSZWFkZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHByaXZhdGVGaWVsZHM9bmV3IFdlYWtNYXAoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHJpdmF0ZUZpZWxkc0dldD1wcml2YXRlRmllbGRzLmdldC5iaW5kKHByaXZhdGVGaWVsZHMpO1xuXG5jbGFzcyAgICAgICAgQnVmZmVyUmVhZGVye1xuLypcblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3IoYnVmZmVyKXtcbmNvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5jb25zdCBkYXRhPW5ldyBEYXRhVmlldyhieXRlcy5idWZmZXIpO1xucHJpdmF0ZUZpZWxkcy5zZXQodGhpcyx7XG5ieXRlcyxcbmRhdGEsXG5sZW5ndGg6Ynl0ZXMubGVuZ3RoLFxuaW5kZXg6MCxcbm9mZnNldDowfSk7XG5cbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgZ2V0IGxlbmd0aCgpe1xucmV0dXJuIHByaXZhdGVGaWVsZHNHZXQodGhpcykubGVuZ3RoO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgIGdldCBpbmRleCgpe1xucmV0dXJuIHByaXZhdGVGaWVsZHNHZXQodGhpcykuaW5kZXg7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgc2V0IGluZGV4KGluZGV4KXtcbnRoaXMuc2VlayhpbmRleCk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgIHNldCBvZmZzZXQob2Zmc2V0KXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYob2Zmc2V0PmZpZWxkcy5kYXRhLmJ5dGVMZW5ndGgpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCBzZXQgb2Zmc2V0IGJleW9uZCBsZW5ndGggb2YgdW5kZXJseWluZyBkYXRhJyk7XG4gfVxuaWYob2Zmc2V0PDApe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCBzZXQgbmVnYXRpdmUgb2Zmc2V0Jyk7XG4gfVxuZmllbGRzLm9mZnNldD1vZmZzZXQ7XG5maWVsZHMubGVuZ3RoPWZpZWxkcy5kYXRhLmJ5dGVMZW5ndGgtZmllbGRzLm9mZnNldDtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICAgIGNhblNlZWsoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5yZXR1cm4gaW5kZXg+PTAmJmZpZWxkcy5vZmZzZXQraW5kZXg8PWZpZWxkcy5sZW5ndGg7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgICAgYXNzZXJ0Q2FuU2VlayhpbmRleCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKCF0aGlzLmNhblNlZWsoaW5kZXgpKXtcbnRocm93IEVycm9yKFxuIGBFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICR7ZmllbGRzLmxlbmd0aH0sIGFza2VkIGluZGV4ICR7aW5kZXh9YCk7XG5cbiB9XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgc2VlayhpbmRleCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmNvbnN0IHJlc3RvcmU9ZmllbGRzLmluZGV4O1xudGhpcy5hc3NlcnRDYW5TZWVrKGluZGV4KTtcbmZpZWxkcy5pbmRleD1pbmRleDtcbnJldHVybiByZXN0b3JlO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgIHBlZWsoc2l6ZSl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbi8vXG5zaXplPU1hdGgubWF4KDAsTWF0aC5taW4oZmllbGRzLmxlbmd0aC1maWVsZHMuaW5kZXgsc2l6ZSkpO1xuaWYoc2l6ZT09PTApe1xuLy9cbnJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiB9XG5jb25zdCByZXN1bHQ9ZmllbGRzLmJ5dGVzLnN1YmFycmF5KFxuZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXgsXG5maWVsZHMub2Zmc2V0K2ZpZWxkcy5pbmRleCtzaXplKTtcblxucmV0dXJuIHJlc3VsdDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgY2FuUmVhZChvZmZzZXQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5yZXR1cm4gdGhpcy5jYW5TZWVrKGZpZWxkcy5pbmRleCtvZmZzZXQpO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbiAgICAgICAgICAgICBhc3NlcnRDYW5SZWFkKG9mZnNldCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuU2VlayhmaWVsZHMuaW5kZXgrb2Zmc2V0KTtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG4gICAgcmVhZChzaXplKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5hc3NlcnRDYW5SZWFkKHNpemUpO1xuY29uc3QgcmVzdWx0PXRoaXMucGVlayhzaXplKTtcbmZpZWxkcy5pbmRleCs9c2l6ZTtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgcmVhZFVpbnQ4KCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZCgxKTtcbmNvbnN0IGluZGV4PWZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4O1xuY29uc3QgdmFsdWU9ZmllbGRzLmRhdGEuZ2V0VWludDgoaW5kZXgpO1xuZmllbGRzLmluZGV4Kz0xO1xucmV0dXJuIHZhbHVlO1xuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICAgIHJlYWRVaW50MTYobGl0dGxlRW5kaWFuKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xudGhpcy5hc3NlcnRDYW5SZWFkKDIpO1xuY29uc3QgaW5kZXg9ZmllbGRzLm9mZnNldCtmaWVsZHMuaW5kZXg7XG5jb25zdCB2YWx1ZT1maWVsZHMuZGF0YS5nZXRVaW50MTYoaW5kZXgsbGl0dGxlRW5kaWFuKTtcbmZpZWxkcy5pbmRleCs9MjtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICByZWFkVWludDMyKGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuYXNzZXJ0Q2FuUmVhZCg0KTtcbmNvbnN0IGluZGV4PWZpZWxkcy5vZmZzZXQrZmllbGRzLmluZGV4O1xuY29uc3QgdmFsdWU9ZmllbGRzLmRhdGEuZ2V0VWludDMyKGluZGV4LGxpdHRsZUVuZGlhbik7XG5maWVsZHMuaW5kZXgrPTQ7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICBieXRlQXQoaW5kZXgpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5yZXR1cm4gZmllbGRzLmJ5dGVzW2ZpZWxkcy5vZmZzZXQraW5kZXhdO1xuIH1cblxuLypcblxuICAgKi9cbiAgICBza2lwKG9mZnNldCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbnRoaXMuc2VlayhmaWVsZHMuaW5kZXgrb2Zmc2V0KTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgIGV4cGVjdChleHBlY3RlZCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmlmKCF0aGlzLm1hdGNoQXQoZmllbGRzLmluZGV4LGV4cGVjdGVkKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZmllbGRzLmluZGV4Kz1leHBlY3RlZC5sZW5ndGg7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuICAgICAgIG1hdGNoQXQoaW5kZXgsZXhwZWN0ZWQpe1xuY29uc3QgZmllbGRzPXByaXZhdGVGaWVsZHNHZXQodGhpcyk7XG5pZihpbmRleCtleHBlY3RlZC5sZW5ndGg+ZmllbGRzLmxlbmd0aHx8aW5kZXg8MCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGxldCBpPTA7aTxleHBlY3RlZC5sZW5ndGg7aSs9MSl7XG5pZihleHBlY3RlZFtpXSE9PXRoaXMuYnl0ZUF0KGluZGV4K2kpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgYXNzZXJ0KGV4cGVjdGVkKXtcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzR2V0KHRoaXMpO1xuaWYoIXRoaXMuZXhwZWN0KGV4cGVjdGVkKSl7XG50aHJvdyBFcnJvcihcbiBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkKX0gYXQgJHtmaWVsZHMuaW5kZXh9LCBnb3QgJHt0aGlzLnBlZWsoXG5leHBlY3RlZC5sZW5ndGgpXG4gfWApO1xuXG4gfVxuIH1cblxuLypcblxuXG4gICAqL1xuICAgICAgICBmaW5kTGFzdChleHBlY3RlZCl7XG5jb25zdCBmaWVsZHM9cHJpdmF0ZUZpZWxkc0dldCh0aGlzKTtcbmxldCBpbmRleD1maWVsZHMubGVuZ3RoLWV4cGVjdGVkLmxlbmd0aDtcbndoaWxlKGluZGV4Pj0wJiYhdGhpcy5tYXRjaEF0KGluZGV4LGV4cGVjdGVkKSl7XG5pbmRleC09MTtcbiB9XG5yZXR1cm4gaW5kZXg7XG4gfX0kaM2PX29uY2UuIEJ1ZmZlclJlYWRlcihCdWZmZXJSZWFkZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnVmZmVyUmVhZGVyIjpbIkJ1ZmZlclJlYWRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA5EpWQQg4AAEIOAAAlAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvYnVmZmVyLXdyaXRlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnVmZmVyV3JpdGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcml2YXRlRmllbGRzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgZ2V0UHJpdmF0ZUZpZWxkcz0oc2VsZik9PntcbmNvbnN0IGZpZWxkcz1wcml2YXRlRmllbGRzLmdldChzZWxmKTtcbmlmKCFmaWVsZHMpe1xudGhyb3cgRXJyb3IoJ0J1ZmZlcldyaXRlciBmaWVsZHMgYXJlIG5vdCBpbml0aWFsaXplZCcpO1xuIH1cbnJldHVybiBmaWVsZHM7XG4gfTtcblxuY29uc3QgYXNzZXJ0TmF0TnVtYmVyPShuKT0+e1xuaWYoTnVtYmVyLmlzU2FmZUludGVnZXIobikmJi8qICAgICAgICAgICAgICAgICAqL24+PTApe1xucmV0dXJuO1xuIH1cbnRocm93IFR5cGVFcnJvciggYG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgZ290ICR7bn1gKTtcbiB9O1xuXG5jbGFzcyAgICAgICAgQnVmZmVyV3JpdGVye1xuLypcblxuICAgKi9cbiAgICAgICAgICBnZXQgbGVuZ3RoKCl7XG5yZXR1cm4gZ2V0UHJpdmF0ZUZpZWxkcyh0aGlzKS5sZW5ndGg7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICAgICAgZ2V0IGluZGV4KCl7XG5yZXR1cm4gZ2V0UHJpdmF0ZUZpZWxkcyh0aGlzKS5pbmRleDtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICBzZXQgaW5kZXgoaW5kZXgpe1xudGhpcy5zZWVrKGluZGV4KTtcbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKGNhcGFjaXR5PTE2KXtcbmNvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGNhcGFjaXR5KTtcbmNvbnN0IGRhdGE9bmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlcik7XG5wcml2YXRlRmllbGRzLnNldCh0aGlzLHtcbmJ5dGVzLFxuZGF0YSxcbmluZGV4OjAsXG5sZW5ndGg6MCxcbmNhcGFjaXR5fSk7XG5cbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgICAgICAgZW5zdXJlQ2FuU2VlayhyZXF1aXJlZCl7XG5hc3NlcnROYXROdW1iZXIocmVxdWlyZWQpO1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG5sZXQgY2FwYWNpdHk9ZmllbGRzLmNhcGFjaXR5O1xud2hpbGUoY2FwYWNpdHk8cmVxdWlyZWQpe1xuY2FwYWNpdHkqPTI7XG4gfVxuY29uc3QgYnl0ZXM9bmV3IFVpbnQ4QXJyYXkoY2FwYWNpdHkpO1xuY29uc3QgZGF0YT1uZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyKTtcbmJ5dGVzLnNldChmaWVsZHMuYnl0ZXMuc3ViYXJyYXkoMCxmaWVsZHMubGVuZ3RoKSk7XG5maWVsZHMuYnl0ZXM9Ynl0ZXM7XG5maWVsZHMuZGF0YT1kYXRhO1xuZmllbGRzLmNhcGFjaXR5PWNhcGFjaXR5O1xuIH1cblxuLypcblxuICAgKi9cbiAgICBzZWVrKGluZGV4KXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5TZWVrKGluZGV4KTtcbmZpZWxkcy5pbmRleD1pbmRleDtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICAgICAgZW5zdXJlQ2FuV3JpdGUoc2l6ZSl7XG5hc3NlcnROYXROdW1iZXIoc2l6ZSk7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuU2VlayhmaWVsZHMuaW5kZXgrc2l6ZSk7XG4gfVxuXG4vKlxuXG4gICAqL1xuICAgICB3cml0ZShieXRlcyl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoYnl0ZXMuYnl0ZUxlbmd0aCk7XG5maWVsZHMuYnl0ZXMuc2V0KGJ5dGVzLGZpZWxkcy5pbmRleCk7XG5maWVsZHMuaW5kZXgrPWJ5dGVzLmJ5dGVMZW5ndGg7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgIHdyaXRlQ29weShzdGFydCxlbmQpe1xuYXNzZXJ0TmF0TnVtYmVyKHN0YXJ0KTtcbmFzc2VydE5hdE51bWJlcihlbmQpO1xuY29uc3QgZmllbGRzPWdldFByaXZhdGVGaWVsZHModGhpcyk7XG5jb25zdCBzaXplPWVuZC1zdGFydDtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoc2l6ZSk7XG5maWVsZHMuYnl0ZXMuY29weVdpdGhpbihmaWVsZHMuaW5kZXgsc3RhcnQsZW5kKTtcbmZpZWxkcy5pbmRleCs9c2l6ZTtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuICAgKi9cbiAgICAgICAgICB3cml0ZVVpbnQ4KHZhbHVlKXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5Xcml0ZSgxKTtcbmZpZWxkcy5kYXRhLnNldFVpbnQ4KGZpZWxkcy5pbmRleCx2YWx1ZSk7XG5maWVsZHMuaW5kZXgrPTE7XG5maWVsZHMubGVuZ3RoPU1hdGgubWF4KGZpZWxkcy5pbmRleCxmaWVsZHMubGVuZ3RoKTtcbiB9XG5cbi8qXG5cblxuICAgKi9cbiAgICAgICAgICAgd3JpdGVVaW50MTYodmFsdWUsbGl0dGxlRW5kaWFuKXtcbmNvbnN0IGZpZWxkcz1nZXRQcml2YXRlRmllbGRzKHRoaXMpO1xudGhpcy5lbnN1cmVDYW5Xcml0ZSgyKTtcbmNvbnN0IGluZGV4PWZpZWxkcy5pbmRleDtcbmZpZWxkcy5kYXRhLnNldFVpbnQxNihpbmRleCx2YWx1ZSxsaXR0bGVFbmRpYW4pO1xuZmllbGRzLmluZGV4Kz0yO1xuZmllbGRzLmxlbmd0aD1NYXRoLm1heChmaWVsZHMuaW5kZXgsZmllbGRzLmxlbmd0aCk7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgICAgICAgIHdyaXRlVWludDMyKHZhbHVlLGxpdHRsZUVuZGlhbil7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnRoaXMuZW5zdXJlQ2FuV3JpdGUoNCk7XG5jb25zdCBpbmRleD1maWVsZHMuaW5kZXg7XG5maWVsZHMuZGF0YS5zZXRVaW50MzIoaW5kZXgsdmFsdWUsbGl0dGxlRW5kaWFuKTtcbmZpZWxkcy5pbmRleCs9NDtcbmZpZWxkcy5sZW5ndGg9TWF0aC5tYXgoZmllbGRzLmluZGV4LGZpZWxkcy5sZW5ndGgpO1xuIH1cblxuLypcblxuXG5cbiAgICovXG4gICAgICAgIHN1YmFycmF5KGJlZ2luLGVuZCl7XG5jb25zdCBmaWVsZHM9Z2V0UHJpdmF0ZUZpZWxkcyh0aGlzKTtcbnJldHVybiBmaWVsZHMuYnl0ZXMuc3ViYXJyYXkoMCxmaWVsZHMubGVuZ3RoKS5zdWJhcnJheShiZWdpbixlbmQpO1xuIH1cblxuLypcblxuXG5cbiAgICovXG4gICAgIHNsaWNlKGJlZ2luLGVuZCl7XG5yZXR1cm4gdGhpcy5zdWJhcnJheShiZWdpbixlbmQpLnNsaWNlKCk7XG4gfX0kaM2PX29uY2UuIEJ1ZmZlcldyaXRlcihCdWZmZXJXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnVmZmVyV3JpdGVyIjpbIkJ1ZmZlcldyaXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACwsuVsmAEAAJgBAAAjAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvY29tcHJlc3Npb24uanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIlNUT1JFIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vL1xuY29uc3QgICAgICAgIFNUT1JFPTA7JGjNj19vbmNlLlNUT1JFKFNUT1JFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlNUT1JFIjpbIlNUT1JFIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHe4sXWsAwAArAMAAB0AAABAZW5kby96aXAtdjEuMC45L3NyYy9jcmMzMi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiY3JjMzIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmMzMiwgJ25hbWUnLCB7dmFsdWU6IFwiY3JjMzJcIn0pOyRozY9fb25jZS5jcmMzMihjcmMzMik7ICAgLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuZnVuY3Rpb24gbWFrZVRhYmxlKCl7XG5sZXQgYztcbmNvbnN0IHRhYmxlPVtdO1xuXG5mb3IobGV0IG49MDtuPDI1NjtuKz0xKXtcbmM9bjtcbmZvcihsZXQgaz0wO2s8ODtrKz0xKXtcbmM9YyYxPzB4ZWRiODgzMjBeYz4+PjE6Yz4+PjE7XG4gfVxudGFibGVbbl09YztcbiB9XG5cbnJldHVybiB0YWJsZTtcbiB9XG5cbi8vXG5jb25zdCB0YWJsZT1tYWtlVGFibGUoKTtcblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgY3JjMzIoYnl0ZXMsbGVuZ3RoPWJ5dGVzLmxlbmd0aCxpbmRleD0wLGNyYz0wKXtcbmNvbnN0IGVuZD1pbmRleCtsZW5ndGg7XG5cbmNyY149LTE7XG5cbmZvcihsZXQgaT1pbmRleDtpPGVuZDtpKz0xKXtcbmNyYz1jcmM+Pj44XnRhYmxlWyhjcmNeYnl0ZXNbaV0pJjB4ZmZdO1xuIH1cblxucmV0dXJuKGNyY14tMSk+Pj4wO1xuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNyYzMyIjpbImNyYzMyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABotonfZJQAA2SUAACUAAABAZW5kby96aXAtdjEuMC45L3NyYy9mb3JtYXQtcmVhZGVyLmpzeyJpbXBvcnRzIjpbIi4vdHlwZXMuanMiLCIuL2NyYzMyLmpzIiwiLi9zaWduYXR1cmUuanMiLCIuL2NvbXByZXNzaW9uLmpzIl0sImV4cG9ydHMiOlsicmVhZFppcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBjcmMzMixzaWduYXR1cmUsY29tcHJlc3Npb247JGjNj19pbXBvcnRzKFtbXCIuL3R5cGVzLmpzXCIsIFtdXSxbXCIuL2NyYzMyLmpzXCIsIFtbXCJjcmMzMlwiLCBbJGjNj19hID0+IChjcmMzMiA9ICRozY9fYSldXV1dLFtcIi4vc2lnbmF0dXJlLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKHNpZ25hdHVyZSA9ICRozY9fYSldXV1dLFtcIi4vY29tcHJlc3Npb24uanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY29tcHJlc3Npb24gPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZWFkWmlwLCAnbmFtZScsIHt2YWx1ZTogXCJyZWFkWmlwXCJ9KTskaM2PX29uY2UucmVhZFppcChyZWFkWmlwKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IE1BWF9WQUxVRV8xNkJJVFM9NjU1MzU7XG5jb25zdCBNQVhfVkFMVUVfMzJCSVRTPTQyOTQ5NjcyOTU7XG5cbmNvbnN0IHRleHREZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigpO1xuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gaXNFbmNyeXB0ZWQoYml0RmxhZyl7XG5yZXR1cm4oYml0RmxhZyYweDAwMDEpPT09MHgwMDAxO1xuIH1cblxuLypcblxuXG5cblxuICovXG5mdW5jdGlvbiByZWFkRG9zRGF0ZVRpbWUocmVhZGVyKXtcbmNvbnN0IGRvc1RpbWU9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5yZXR1cm4gbmV3IERhdGUoXG5EYXRlLlVUQyhcbihkb3NUaW1lPj4yNSYweDdmKSsxOTgwLC8vXG4oZG9zVGltZT4+MjEmMHgwZiktMSwvL1xuZG9zVGltZT4+MTYmMHgxZiwvL1xuZG9zVGltZT4+MTEmMHgxZiwvL1xuZG9zVGltZT4+NSYweDNmLC8vXG4oZG9zVGltZSYweDFmKTw8MS8vXG4pKTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRIZWFkZXJzKHJlYWRlcil7XG5yZXR1cm57XG52ZXJzaW9uTmVlZGVkOnJlYWRlci5yZWFkVWludDE2KHRydWUpLFxuYml0RmxhZzpyZWFkZXIucmVhZFVpbnQxNih0cnVlKSxcbmNvbXByZXNzaW9uTWV0aG9kOnJlYWRlci5yZWFkVWludDE2KHRydWUpLFxuZGF0ZTpyZWFkRG9zRGF0ZVRpbWUocmVhZGVyKSxcbmNyYzMyOnJlYWRlci5yZWFkVWludDMyKHRydWUpLFxuY29tcHJlc3NlZExlbmd0aDpyZWFkZXIucmVhZFVpbnQzMih0cnVlKSxcbnVuY29tcHJlc3NlZExlbmd0aDpyZWFkZXIucmVhZFVpbnQzMih0cnVlKX07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkQ2VudHJhbEZpbGVIZWFkZXIocmVhZGVyKXtcbmNvbnN0IHZlcnNpb249cmVhZGVyLnJlYWRVaW50OCgpO1xuY29uc3QgbWFkZUJ5PXJlYWRlci5yZWFkVWludDgoKTtcbmNvbnN0IGhlYWRlcnM9cmVhZEhlYWRlcnMocmVhZGVyKTtcbmNvbnN0IG5hbWVMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBleHRyYUZpZWxkc0xlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGNvbW1lbnRMZW5ndGg9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBkaXNrTnVtYmVyU3RhcnQ9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBpbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1yZWFkZXIucmVhZFVpbnQzMih0cnVlKTtcbmNvbnN0IGZpbGVTdGFydD1yZWFkZXIucmVhZFVpbnQzMih0cnVlKTtcblxuY29uc3QgbmFtZT1yZWFkZXIucmVhZChuYW1lTGVuZ3RoKTtcbi8vXG5yZWFkZXIuc2tpcChleHRyYUZpZWxkc0xlbmd0aCk7XG5cbmlmKGhlYWRlcnMudW5jb21wcmVzc2VkTGVuZ3RoPT09TUFYX1ZBTFVFXzMyQklUUyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5pZihoZWFkZXJzLmNvbXByZXNzZWRMZW5ndGg9PT1NQVhfVkFMVUVfMzJCSVRTKXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cbmlmKGZpbGVTdGFydD09PU1BWF9WQUxVRV8zMkJJVFMpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCByZWFkIFppcDY0Jyk7XG4gfVxuaWYoZGlza051bWJlclN0YXJ0PT09TUFYX1ZBTFVFXzMyQklUUyl7XG50aHJvdyBFcnJvcignQ2Fubm90IHJlYWQgWmlwNjQnKTtcbiB9XG5cbmNvbnN0IGNvbW1lbnQ9cmVhZGVyLnJlYWQoY29tbWVudExlbmd0aCk7XG5cbnJldHVybntcbm5hbWUsXG52ZXJzaW9uLFxubWFkZUJ5LFxuLi4uaGVhZGVycyxcbmRpc2tOdW1iZXJTdGFydCxcbmludGVybmFsRmlsZUF0dHJpYnV0ZXMsXG5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzLFxuZmlsZVN0YXJ0LFxuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KHJlYWRlcixsb2NhdG9yKXtcbmNvbnN0e2NlbnRyYWxEaXJlY3RvcnlPZmZzZXQsY2VudHJhbERpcmVjdG9yeVJlY29yZHN9PWxvY2F0b3I7XG5yZWFkZXIuc2VlayhjZW50cmFsRGlyZWN0b3J5T2Zmc2V0KTtcblxuY29uc3QgZW50cmllcz1bXTtcbndoaWxlKHJlYWRlci5leHBlY3Qoc2lnbmF0dXJlLkNFTlRSQUxfRklMRV9IRUFERVIpKXtcbmNvbnN0IGVudHJ5PXJlYWRDZW50cmFsRmlsZUhlYWRlcihyZWFkZXIpO1xuZW50cmllcy5wdXNoKGVudHJ5KTtcbiB9XG5cbmlmKGNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzIT09ZW50cmllcy5sZW5ndGgpe1xuLy9cbi8vXG50aHJvdyBFcnJvcihcbiBgQ29ycnVwdGVkIHppcCBvciBidWc6IGV4cGVjdGVkICR7Y2VudHJhbERpcmVjdG9yeVJlY29yZHN9IHJlY29yZHMgaW4gY2VudHJhbCBkaXIsIGdvdCAke2VudHJpZXMubGVuZ3RofWApO1xuXG4gfVxuXG5yZXR1cm4gZW50cmllcztcbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkRmlsZShyZWFkZXIpe1xucmVhZGVyLmV4cGVjdChzaWduYXR1cmUuTE9DQUxfRklMRV9IRUFERVIpO1xuY29uc3QgaGVhZGVycz1yZWFkSGVhZGVycyhyZWFkZXIpO1xuY29uc3QgbmFtZUxlbmd0aD1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGV4dHJhRmllbGRzTGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgbmFtZT1yZWFkZXIucmVhZChuYW1lTGVuZ3RoKTtcbnJlYWRlci5za2lwKGV4dHJhRmllbGRzTGVuZ3RoKTtcbmNvbnN0IGNvbnRlbnQ9cmVhZGVyLnJlYWQoaGVhZGVycy5jb21wcmVzc2VkTGVuZ3RoKTtcbnJldHVybntuYW1lLC4uLmhlYWRlcnMsY29udGVudH07XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiByZWFkTG9jYWxGaWxlcyhyZWFkZXIscmVjb3Jkcyl7XG5jb25zdCBmaWxlcz1bXTtcbmZvcihjb25zdCByZWNvcmQgb2YgcmVjb3Jkcyl7XG5yZWFkZXIuc2VlayhyZWNvcmQuZmlsZVN0YXJ0KTtcbmNvbnN0IGZpbGU9cmVhZEZpbGUocmVhZGVyKTtcbmZpbGVzLnB1c2goZmlsZSk7XG4gfVxucmV0dXJuIGZpbGVzO1xuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHJlYWRCbG9ja0VuZE9mQ2VudHJhbChyZWFkZXIpe1xuaWYoIXJlYWRlci5leHBlY3Qoc2lnbmF0dXJlLkNFTlRSQUxfRElSRUNUT1JZX0VORCkpe1xudGhyb3cgRXJyb3IoXG4nQ29ycnVwdCB6aXAgZmlsZSwgb3IgemlwIGZpbGUgY29udGFpbmluZyBhbiB1bnN1cHBvcnRlZCB2YXJpYWJsZS13aWR0aCBlbmQtb2YtYXJjaGl2ZSBjb21tZW50LCBvciBhbiB1bnN1cHBvcnRlZCB6aXAgZmlsZSB3aXRoIDY0IGJpdCBzaXplcycpO1xuXG4gfVxuY29uc3QgZGlza051bWJlcj1yZWFkZXIucmVhZFVpbnQxNih0cnVlKTtcbmNvbnN0IGRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVJlY29yZHNPblRoaXNEaXNrPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuY29uc3QgY2VudHJhbERpcmVjdG9yeVJlY29yZHM9cmVhZGVyLnJlYWRVaW50MTYodHJ1ZSk7XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5U2l6ZT1yZWFkZXIucmVhZFVpbnQzMih0cnVlKTtcbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlPZmZzZXQ9cmVhZGVyLnJlYWRVaW50MzIodHJ1ZSk7XG5jb25zdCBjb21tZW50TGVuZ3RoPXJlYWRlci5yZWFkVWludDE2KHRydWUpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGNvbW1lbnQ9dGV4dERlY29kZXIuZGVjb2RlKHJlYWRlci5yZWFkKGNvbW1lbnRMZW5ndGgpKTtcbnJldHVybntcbmRpc2tOdW1iZXIsXG5kaXNrV2l0aENlbnRyYWxEaXJTdGFydCxcbmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzT25UaGlzRGlzayxcbmNlbnRyYWxEaXJlY3RvcnlSZWNvcmRzLFxuY2VudHJhbERpcmVjdG9yeVNpemUsXG5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0LFxuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiByZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKHJlYWRlcil7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGNlbnRyYWxEaXJlY3RvcnlFbmQ9cmVhZGVyLmxlbmd0aC0yMjtcbmlmKGNlbnRyYWxEaXJlY3RvcnlFbmQ8MCl7XG50aHJvdyBFcnJvcignQ29ycnVwdGVkIHppcDogbm90IGVub3VnaCBjb250ZW50Jyk7XG4gfVxucmVhZGVyLnNlZWsoY2VudHJhbERpcmVjdG9yeUVuZCk7XG5jb25zdCBsb2NhdG9yPXJlYWRCbG9ja0VuZE9mQ2VudHJhbChyZWFkZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCB6aXA2ND1cbmxvY2F0b3IuZGlza051bWJlcj09PU1BWF9WQUxVRV8xNkJJVFN8fFxubG9jYXRvci5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PU1BWF9WQUxVRV8xNkJJVFN8fFxubG9jYXRvci5jZW50cmFsRGlyZWN0b3J5UmVjb3Jkc09uVGhpc0Rpc2s9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuY2VudHJhbERpcmVjdG9yeVJlY29yZHM9PT1NQVhfVkFMVUVfMTZCSVRTfHxcbmxvY2F0b3IuY2VudHJhbERpcmVjdG9yeVNpemU9PT1NQVhfVkFMVUVfMzJCSVRTfHxcbmxvY2F0b3IuY2VudHJhbERpcmVjdG9yeU9mZnNldD09PU1BWF9WQUxVRV8zMkJJVFM7XG5cbmlmKHppcDY0KXtcbnRocm93IEVycm9yKCdDYW5ub3QgcmVhZCBaaXA2NCcpO1xuIH1cblxuY29uc3R7XG5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0LFxuY2VudHJhbERpcmVjdG9yeVNpemVcbi8vXG59PWxvY2F0b3I7XG5cbmNvbnN0IGV4cGVjdGVkQ2VudHJhbERpcmVjdG9yeUVuZD1cbmNlbnRyYWxEaXJlY3RvcnlPZmZzZXQrY2VudHJhbERpcmVjdG9yeVNpemU7XG5jb25zdCBleHRyYUJ5dGVzPWNlbnRyYWxEaXJlY3RvcnlFbmQtZXhwZWN0ZWRDZW50cmFsRGlyZWN0b3J5RW5kO1xuXG5yZWFkZXIub2Zmc2V0PWV4dHJhQnl0ZXM7XG5cbnJldHVybiBsb2NhdG9yO1xuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gY2hlY2tSZWNvcmRzKGNlbnRyYWxSZWNvcmQsbG9jYWxSZWNvcmQsYXJjaGl2ZU5hbWUpe1xuY29uc3QgY2VudHJhbE5hbWU9dGV4dERlY29kZXIuZGVjb2RlKGNlbnRyYWxSZWNvcmQubmFtZSk7XG5jb25zdCBsb2NhbE5hbWU9dGV4dERlY29kZXIuZGVjb2RlKGxvY2FsUmVjb3JkLm5hbWUpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5pZihjZW50cmFsTmFtZS5yZXBsYWNlKC9cXFxcL2csJy8nKSE9PWxvY2FsTmFtZSl7XG50aHJvdyBFcnJvcihcbiBgWmlwIGludGVncml0eSBlcnJvcjogY2VudHJhbCByZWNvcmQgZmlsZSBuYW1lICR7cShcbmNlbnRyYWxOYW1lKVxuIH0gbXVzdCBtYXRjaCBsb2NhbCBmaWxlIG5hbWUgJHtxKGxvY2FsTmFtZSl9IGluIGFyY2hpdmUgJHtxKFxuYXJjaGl2ZU5hbWUpXG4gfWApO1xuXG4gfVxuXG4vKlxuXG5cbiAgICovXG5mdW5jdGlvbiBjaGVjayh2YWx1ZSxtZXNzYWdlKXtcbmlmKCF2YWx1ZSl7XG50aHJvdyBFcnJvcihcbiBgWmlwIGludGVncml0eSBlcnJvcjogJHttZXNzYWdlfSBmb3IgZmlsZSAke3EoXG5sb2NhbE5hbWUpXG4gfSBpbiBhcmNoaXZlICR7cShhcmNoaXZlTmFtZSl9YCk7XG5cbiB9XG4gfVxuXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuYml0RmxhZz09PWxvY2FsUmVjb3JkLmJpdEZsYWcsXG4gYENlbnRyYWwgcmVjb3JkIGJpdCBmbGFnICR7Y2VudHJhbFJlY29yZC5iaXRGbGFnLnRvU3RyaW5nKFxuMTYpXG4gfSBtdXN0IG1hdGNoIGxvY2FsIHJlY29yZCBiaXQgZmxhZyAke2xvY2FsUmVjb3JkLmJpdEZsYWcudG9TdHJpbmcoMTYpfWApO1xuXG5jaGVjayhcbmNlbnRyYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2Q9PT1sb2NhbFJlY29yZC5jb21wcmVzc2lvbk1ldGhvZCxcbiBgQ2VudHJhbCByZWNvcmQgY29tcHJlc3Npb24gbWV0aG9kICR7cShcbmNlbnRyYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2QpXG4gfSBtdXN0IG1hdGNoIGxvY2FsIGNvbXByZXNzaW9uIG1ldGhvZCAke3EobG9jYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2QpfWApO1xuXG4vL1xuLy9cbmNoZWNrKFxuY2VudHJhbFJlY29yZC5jcmMzMj09PWxvY2FsUmVjb3JkLmNyYzMyLFxuIGBDZW50cmFsIHJlY29yZCBDUkMtMzIgY2hlY2tzdW0gJHtjZW50cmFsUmVjb3JkLmNyYzMyfSBtdXN0IG1hdGNoIGxvY2FsIGNoZWNrc3VtICR7bG9jYWxSZWNvcmQuY3JjMzJ9YCk7XG5cbmNoZWNrKFxuY2VudHJhbFJlY29yZC5jb21wcmVzc2VkTGVuZ3RoPT09bG9jYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aCxcbiBgQ2VudHJhbCByZWNvcmQgY29tcHJlc3NlZCBzaXplICR7Y2VudHJhbFJlY29yZC5jb21wcmVzc2VkTGVuZ3RofSBtdXN0IG1hdGNoIGxvY2FsICR7bG9jYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aH1gKTtcblxuY2hlY2soXG5jZW50cmFsUmVjb3JkLnVuY29tcHJlc3NlZExlbmd0aD09PWxvY2FsUmVjb3JkLnVuY29tcHJlc3NlZExlbmd0aCxcbiBgQ2VudHJhbCByZWNvcmQgdW5jb21wcmVzc2VkIHNpemUgJHtjZW50cmFsUmVjb3JkLnVuY29tcHJlc3NlZExlbmd0aH0gbXVzdCBtYXRjaCBsb2NhbCAke2xvY2FsUmVjb3JkLnVuY29tcHJlc3NlZExlbmd0aH1gKTtcblxuXG5jb25zdCBjaGVja3N1bT1jcmMzMihsb2NhbFJlY29yZC5jb250ZW50KTtcbmNoZWNrKFxuY2hlY2tzdW09PT1sb2NhbFJlY29yZC5jcmMzMixcbiBgQ1JDLTMyIGNoZWNrc3VtIG1pc21hdGNoLCB3YW50ZWQgJHtsb2NhbFJlY29yZC5jcmMzMn0gYnV0IGFjdHVhbCBjb250ZW50IGlzICR7Y2hlY2tzdW19YCk7XG5cbiB9XG5cbi8qXG5cbiAqL1xuZnVuY3Rpb24gbW9kZUZvckV4dGVybmFsQXR0cmlidXRlcyhleHRlcm5hbEZpbGVBdHRyaWJ1dGVzKXtcbnJldHVybiBleHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiYweGZmZmY7XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiByZWNvcmRUb0ZpbGUoY2VudHJhbFJlY29yZCxsb2NhbFJlY29yZCl7XG5jb25zdCBtb2RlPW1vZGVGb3JFeHRlcm5hbEF0dHJpYnV0ZXMoY2VudHJhbFJlY29yZC5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKTtcbnJldHVybntcbm5hbWU6Y2VudHJhbFJlY29yZC5uYW1lLFxubW9kZSxcbmRhdGU6Y2VudHJhbFJlY29yZC5kYXRlLFxuY3JjMzI6Y2VudHJhbFJlY29yZC5jcmMzMixcbmNvbXByZXNzaW9uTWV0aG9kOmNlbnRyYWxSZWNvcmQuY29tcHJlc3Npb25NZXRob2QsXG5jb21wcmVzc2VkTGVuZ3RoOmNlbnRyYWxSZWNvcmQuY29tcHJlc3NlZExlbmd0aCxcbnVuY29tcHJlc3NlZExlbmd0aDpjZW50cmFsUmVjb3JkLnVuY29tcHJlc3NlZExlbmd0aCxcbmNvbnRlbnQ6bG9jYWxSZWNvcmQuY29udGVudCxcbmNvbW1lbnQ6Y2VudHJhbFJlY29yZC5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGRlY29tcHJlc3NGaWxlKGZpbGUpe1xuaWYoZmlsZS5jb21wcmVzc2lvbk1ldGhvZCE9PWNvbXByZXNzaW9uLlNUT1JFKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgZmluZCBkZWNvbXByZXNzb3IgZm9yIGNvbXByZXNzaW9uIG1ldGhvZCAke3EoXG5maWxlLmNvbXByZXNzaW9uTWV0aG9kKVxuIH0gZm9yIGZpbGUgJHtmaWxlLm5hbWV9YCk7XG5cbiB9XG5yZXR1cm57XG5uYW1lOmZpbGUubmFtZSxcbm1vZGU6ZmlsZS5tb2RlLFxuZGF0ZTpmaWxlLmRhdGUsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnQ6ZmlsZS5jb21tZW50fTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZUZpbGUoZmlsZSl7XG5jb25zdCBuYW1lPXRleHREZWNvZGVyLmRlY29kZShmaWxlLm5hbWUpO1xuY29uc3QgY29tbWVudD10ZXh0RGVjb2Rlci5kZWNvZGUoZmlsZS5jb21tZW50KTtcbnJldHVybntcbm5hbWUsXG50eXBlOidmaWxlJyxcbm1vZGU6ZmlsZS5tb2RlJjBvNzc3LFxuZGF0ZTpmaWxlLmRhdGUsXG5jb250ZW50OmZpbGUuY29udGVudCxcbmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJlYWRaaXAocmVhZGVyLG5hbWU9Jzx1bmtub3duPicpe1xuY29uc3QgbG9jYXRvcj1yZWFkRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKHJlYWRlcik7XG5jb25zdCBjZW50cmFsUmVjb3Jkcz1yZWFkQ2VudHJhbERpcmVjdG9yeShyZWFkZXIsbG9jYXRvcik7XG5jb25zdCBsb2NhbFJlY29yZHM9cmVhZExvY2FsRmlsZXMocmVhZGVyLGNlbnRyYWxSZWNvcmRzKTtcbmNvbnN0IGZpbGVzPW5ldyBNYXAoKTtcblxuZm9yKGxldCBpPTA7aTxjZW50cmFsUmVjb3Jkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBjZW50cmFsUmVjb3JkPWNlbnRyYWxSZWNvcmRzW2ldO1xuY29uc3QgbG9jYWxSZWNvcmQ9bG9jYWxSZWNvcmRzW2ldO1xuXG5jaGVja1JlY29yZHMoY2VudHJhbFJlY29yZCxsb2NhbFJlY29yZCxuYW1lKTtcblxuaWYoaXNFbmNyeXB0ZWQoY2VudHJhbFJlY29yZC5iaXRGbGFnKSl7XG50aHJvdyBFcnJvcignRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCcpO1xuIH1cblxuY29uc3QgaXNEaXI9KGNlbnRyYWxSZWNvcmQuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyYweDAwMTApIT09MDtcbmlmKCFpc0Rpcil7XG5jb25zdCBjb21wcmVzc2VkRmlsZT1yZWNvcmRUb0ZpbGUoY2VudHJhbFJlY29yZCxsb2NhbFJlY29yZCk7XG5jb25zdCBkZWNvbXByZXNzZWRGaWxlPWRlY29tcHJlc3NGaWxlKGNvbXByZXNzZWRGaWxlKTtcbmNvbnN0IGRlY29kZWRGaWxlPWRlY29kZUZpbGUoZGVjb21wcmVzc2VkRmlsZSk7XG5maWxlcy5zZXQoZGVjb2RlZEZpbGUubmFtZSxkZWNvZGVkRmlsZSk7XG4gfVxuLy9cbiB9XG5yZXR1cm4gZmlsZXM7XG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVhZFppcCI6WyJyZWFkWmlwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJPKTdmFFAAAhRQAACUAAABAZW5kby96aXAtdjEuMC45L3NyYy9mb3JtYXQtd3JpdGVyLmpzeyJpbXBvcnRzIjpbIi4vY3JjMzIuanMiLCIuL3NpZ25hdHVyZS5qcyIsIi4vY29tcHJlc3Npb24uanMiXSwiZXhwb3J0cyI6WyJ3cml0ZVppcCIsIndyaXRlWmlwUmVjb3JkcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBjcmMzMixzaWduYXR1cmUsY29tcHJlc3Npb247JGjNj19pbXBvcnRzKFtbXCIuL2NyYzMyLmpzXCIsIFtbXCJjcmMzMlwiLCBbJGjNj19hID0+IChjcmMzMiA9ICRozY9fYSldXV1dLFtcIi4vc2lnbmF0dXJlLmpzXCIsIFtbXCIqXCIsIFskaM2PX2EgPT4gKHNpZ25hdHVyZSA9ICRozY9fYSldXV1dLFtcIi4vY29tcHJlc3Npb24uanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY29tcHJlc3Npb24gPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cml0ZVppcFJlY29yZHMsICduYW1lJywge3ZhbHVlOiBcIndyaXRlWmlwUmVjb3Jkc1wifSk7JGjNj19vbmNlLndyaXRlWmlwUmVjb3Jkcyh3cml0ZVppcFJlY29yZHMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cml0ZVppcCwgJ25hbWUnLCB7dmFsdWU6IFwid3JpdGVaaXBcIn0pOyRozY9fb25jZS53cml0ZVppcCh3cml0ZVppcCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdCBVTklYPTM7XG5jb25zdCBVTklYX1ZFUlNJT049MzA7XG5cbmNvbnN0IHRleHRFbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIHdyaXRlRG9zRGF0ZVRpbWUod3JpdGVyLGRhdGUpe1xuY29uc3QgZG9zVGltZT1cbmRhdGUhPT11bmRlZmluZWQmJmRhdGUhPT1udWxsP1xuKGRhdGUuZ2V0VVRDRnVsbFllYXIoKS0xOTgwJjB4N2YpPDwyNXwvL1xuZGF0ZS5nZXRVVENNb250aCgpKzE8PDIxfC8vXG5kYXRlLmdldFVUQ0RhdGUoKTw8MTZ8Ly9cbmRhdGUuZ2V0VVRDSG91cnMoKTw8MTF8Ly9cbmRhdGUuZ2V0VVRDTWludXRlcygpPDw1fC8vXG5kYXRlLmdldFVUQ1NlY29uZHMoKT4+MS8vXG46MDsvL1xud3JpdGVyLndyaXRlVWludDMyKGRvc1RpbWUsdHJ1ZSk7XG4gfVxuXG4vKlxuXG5cblxuICovXG5mdW5jdGlvbiB3cml0ZUZpbGUod3JpdGVyLGZpbGUpe1xuLy9cbmNvbnN0IGZpbGVTdGFydD13cml0ZXIuaW5kZXg7XG53cml0ZXIud3JpdGUoc2lnbmF0dXJlLkxPQ0FMX0ZJTEVfSEVBREVSKTtcbmNvbnN0IGhlYWRlclN0YXJ0PXdyaXRlci5pbmRleDtcbi8vXG53cml0ZXIud3JpdGVVaW50MTYoMTAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZmlsZS5iaXRGbGFnLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuY29tcHJlc3Npb25NZXRob2QsdHJ1ZSk7XG53cml0ZURvc0RhdGVUaW1lKHdyaXRlcixmaWxlLmRhdGUpO1xud3JpdGVyLndyaXRlVWludDMyKGZpbGUuY3JjMzIsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoZmlsZS5jb21wcmVzc2VkTGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGZpbGUudW5jb21wcmVzc2VkTGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUubmFtZS5sZW5ndGgsdHJ1ZSk7XG5jb25zdCBoZWFkZXJFbmQ9d3JpdGVyLmxlbmd0aDtcblxuLy9cbndyaXRlci53cml0ZVVpbnQxNigwLHRydWUpO1xud3JpdGVyLndyaXRlKGZpbGUubmFtZSk7XG4vL1xud3JpdGVyLndyaXRlKGZpbGUuY29udGVudCk7XG5cbnJldHVybntcbmZpbGVTdGFydCxcbmhlYWRlclN0YXJ0LFxuaGVhZGVyRW5kfTtcblxuIH1cblxuLypcblxuXG5cbiAqL1xuZnVuY3Rpb24gd3JpdGVDZW50cmFsRmlsZUhlYWRlcih3cml0ZXIsZmlsZSxsb2NhdG9yKXtcbndyaXRlci53cml0ZShzaWduYXR1cmUuQ0VOVFJBTF9GSUxFX0hFQURFUik7XG53cml0ZXIud3JpdGVVaW50OChmaWxlLnZlcnNpb24pO1xud3JpdGVyLndyaXRlVWludDgoZmlsZS5tYWRlQnkpO1xud3JpdGVyLndyaXRlQ29weShsb2NhdG9yLmhlYWRlclN0YXJ0LGxvY2F0b3IuaGVhZGVyRW5kKTtcbi8vXG53cml0ZXIud3JpdGVVaW50MTYoMCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihmaWxlLmNvbW1lbnQubGVuZ3RoLHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuZGlza051bWJlclN0YXJ0LHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGZpbGUuaW50ZXJuYWxGaWxlQXR0cmlidXRlcyx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQzMihmaWxlLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIobG9jYXRvci5maWxlU3RhcnQsdHJ1ZSk7XG53cml0ZXIud3JpdGUoZmlsZS5jZW50cmFsTmFtZSk7XG4vL1xud3JpdGVyLndyaXRlKGZpbGUuY29tbWVudCk7XG4gfVxuXG4vKlxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gd3JpdGVFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQoXG53cml0ZXIsXG5lbnRyaWVzQ291bnQsXG5jZW50cmFsRGlyZWN0b3J5U3RhcnQsXG5jZW50cmFsRGlyZWN0b3J5TGVuZ3RoLFxuY29tbWVudEJ5dGVzKVxue1xud3JpdGVyLndyaXRlKHNpZ25hdHVyZS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO1xud3JpdGVyLndyaXRlVWludDE2KDAsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoMCx0cnVlKTtcbndyaXRlci53cml0ZVVpbnQxNihlbnRyaWVzQ291bnQsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MTYoZW50cmllc0NvdW50LHRydWUpO1xud3JpdGVyLndyaXRlVWludDMyKGNlbnRyYWxEaXJlY3RvcnlMZW5ndGgsdHJ1ZSk7XG53cml0ZXIud3JpdGVVaW50MzIoY2VudHJhbERpcmVjdG9yeVN0YXJ0LHRydWUpO1xud3JpdGVyLndyaXRlVWludDE2KGNvbW1lbnRCeXRlcy5sZW5ndGgsdHJ1ZSk7XG53cml0ZXIud3JpdGUoY29tbWVudEJ5dGVzKTtcbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICB3cml0ZVppcFJlY29yZHMod3JpdGVyLHJlY29yZHMsY29tbWVudD0nJyl7XG4vL1xuY29uc3QgbG9jYXRvcnM9W107XG5mb3IobGV0IGk9MDtpPHJlY29yZHMubGVuZ3RoO2krPTEpe1xubG9jYXRvcnMucHVzaCh3cml0ZUZpbGUod3JpdGVyLHJlY29yZHNbaV0pKTtcbiB9XG5cbi8vXG5jb25zdCBjZW50cmFsRGlyZWN0b3J5U3RhcnQ9d3JpdGVyLmluZGV4O1xuZm9yKGxldCBpPTA7aTxsb2NhdG9ycy5sZW5ndGg7aSs9MSl7XG53cml0ZUNlbnRyYWxGaWxlSGVhZGVyKHdyaXRlcixyZWNvcmRzW2ldLGxvY2F0b3JzW2ldKTtcbiB9XG5jb25zdCBjZW50cmFsRGlyZWN0b3J5TGVuZ3RoPXdyaXRlci5pbmRleC1jZW50cmFsRGlyZWN0b3J5U3RhcnQ7XG5cbmNvbnN0IGNvbW1lbnRCeXRlcz10ZXh0RW5jb2Rlci5lbmNvZGUoY29tbWVudCk7XG5cbi8vXG53cml0ZUVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZChcbndyaXRlcixcbnJlY29yZHMubGVuZ3RoLFxuY2VudHJhbERpcmVjdG9yeVN0YXJ0LFxuY2VudHJhbERpcmVjdG9yeUxlbmd0aCxcbmNvbW1lbnRCeXRlcyk7XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBlbmNvZGVGaWxlKGZpbGUpe1xuY29uc3QgbmFtZT10ZXh0RW5jb2Rlci5lbmNvZGUoZmlsZS5uYW1lLnJlcGxhY2UoL1xcXFwvZywnLycpKTtcbmNvbnN0IGNvbW1lbnQ9dGV4dEVuY29kZXIuZW5jb2RlKGZpbGUuY29tbWVudCk7XG5yZXR1cm57XG5uYW1lLFxubW9kZTpmaWxlLm1vZGUsXG5kYXRlOmZpbGUuZGF0ZSxcbmNvbnRlbnQ6ZmlsZS5jb250ZW50LFxuY29tbWVudH07XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBjb21wcmVzc0ZpbGVXaXRoU3RvcmUoZmlsZSl7XG5yZXR1cm57XG5uYW1lOmZpbGUubmFtZSxcbm1vZGU6ZmlsZS5tb2RlLFxuZGF0ZTpmaWxlLmRhdGUsXG5jcmMzMjpjcmMzMihmaWxlLmNvbnRlbnQpLFxuY29tcHJlc3Npb25NZXRob2Q6Y29tcHJlc3Npb24uU1RPUkUsXG5jb21wcmVzc2VkTGVuZ3RoOmZpbGUuY29udGVudC5sZW5ndGgsXG51bmNvbXByZXNzZWRMZW5ndGg6ZmlsZS5jb250ZW50Lmxlbmd0aCxcbmNvbnRlbnQ6ZmlsZS5jb250ZW50LFxuY29tbWVudDpmaWxlLmNvbW1lbnR9O1xuXG4gfVxuXG4vKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIGV4dGVybmFsRmlsZUF0dHJpYnV0ZXMobW9kZSl7XG5yZXR1cm4obW9kZSYwbzc3N3wwbzEwMDAwMCk8PDE2O1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gbWFrZUZpbGVSZWNvcmQoZmlsZSl7XG5yZXR1cm57XG5uYW1lOmZpbGUubmFtZSxcbmNlbnRyYWxOYW1lOmZpbGUubmFtZSxcbm1hZGVCeTpVTklYLFxudmVyc2lvbjpVTklYX1ZFUlNJT04sXG52ZXJzaW9uTmVlZGVkOjAsLy9cbmJpdEZsYWc6MCxcbmNvbXByZXNzaW9uTWV0aG9kOmNvbXByZXNzaW9uLlNUT1JFLFxuZGF0ZTpmaWxlLmRhdGUsXG5jcmMzMjpmaWxlLmNyYzMyLFxuY29tcHJlc3NlZExlbmd0aDpmaWxlLmNvbXByZXNzZWRMZW5ndGgsXG51bmNvbXByZXNzZWRMZW5ndGg6ZmlsZS51bmNvbXByZXNzZWRMZW5ndGgsXG5kaXNrTnVtYmVyU3RhcnQ6MCxcbmludGVybmFsRmlsZUF0dHJpYnV0ZXM6MCxcbmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM6ZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyhmaWxlLm1vZGUpLFxuY29tbWVudDpmaWxlLmNvbW1lbnQsXG5jb250ZW50OmZpbGUuY29udGVudH07XG5cbiB9XG5cbi8qXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICB3cml0ZVppcCh3cml0ZXIsZmlsZXMsY29tbWVudD0nJyl7XG5jb25zdCBlbmNvZGVkRmlsZXM9ZmlsZXMubWFwKGVuY29kZUZpbGUpO1xuY29uc3QgY29tcHJlc3NlZEZpbGVzPWVuY29kZWRGaWxlcy5tYXAoY29tcHJlc3NGaWxlV2l0aFN0b3JlKTtcbi8vXG5jb25zdCBmaWxlUmVjb3Jkcz1jb21wcmVzc2VkRmlsZXMubWFwKG1ha2VGaWxlUmVjb3JkKTtcbndyaXRlWmlwUmVjb3Jkcyh3cml0ZXIsZmlsZVJlY29yZHMsY29tbWVudCk7XG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsid3JpdGVaaXBSZWNvcmRzIjpbIndyaXRlWmlwUmVjb3JkcyJdLCJ3cml0ZVppcCI6WyJ3cml0ZVppcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADR9BYS+gUAAPoFAAAeAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvcmVhZGVyLmpzeyJpbXBvcnRzIjpbIi4vYnVmZmVyLXJlYWRlci5qcyIsIi4vZm9ybWF0LXJlYWRlci5qcyJdLCJleHBvcnRzIjpbIlppcFJlYWRlciIsInJlYWRaaXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQnVmZmVyUmVhZGVyLHJlYWRaaXBGb3JtYXQ7JGjNj19pbXBvcnRzKFtbXCIuL2J1ZmZlci1yZWFkZXIuanNcIiwgW1tcIkJ1ZmZlclJlYWRlclwiLCBbJGjNj19hID0+IChCdWZmZXJSZWFkZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2Zvcm1hdC1yZWFkZXIuanNcIiwgW1tcInJlYWRaaXBcIiwgWyRozY9fYSA9PiAocmVhZFppcEZvcm1hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNsYXNzICAgICAgICBaaXBSZWFkZXJ7XG4vKlxuXG5cblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3IoZGF0YSxvcHRpb25zPXt9KXtcbmNvbnN0e25hbWU9Jzx1bmtub3duPid9PW9wdGlvbnM7XG5jb25zdCByZWFkZXI9bmV3IEJ1ZmZlclJlYWRlcihkYXRhKTtcbnRoaXMuZmlsZXM9cmVhZFppcEZvcm1hdChyZWFkZXIpO1xudGhpcy5uYW1lPW5hbWU7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgcmVhZChuYW1lKXtcbmNvbnN0IGZpbGU9dGhpcy5maWxlcy5nZXQobmFtZSk7XG5pZihmaWxlPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKCBgQ2Fubm90IGZpbmQgZmlsZSAke25hbWV9IGluIFppcCBmaWxlICR7dGhpcy5uYW1lfWApO1xuIH1cbnJldHVybiBmaWxlLmNvbnRlbnQ7XG4gfVxuXG4vKlxuXG5cbiAgICovXG4gICAgc3RhdChuYW1lKXtcbmNvbnN0IGZpbGU9dGhpcy5maWxlcy5nZXQobmFtZSk7XG5pZihmaWxlPT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxucmV0dXJue1xudHlwZTpmaWxlLnR5cGUsXG5tb2RlOmZpbGUubW9kZSxcbmRhdGU6ZmlsZS5kYXRlLFxuY29tbWVudDpmaWxlLmNvbW1lbnR9O1xuXG4gfX1cblxuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLiBaaXBSZWFkZXIoWmlwUmVhZGVyKTtcbmNvbnN0ICAgICAgICByZWFkWmlwPWFzeW5jKGRhdGEsbG9jYXRpb24pPT57XG5jb25zdCByZWFkZXI9bmV3IFppcFJlYWRlcihkYXRhLHtuYW1lOmxvY2F0aW9ufSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlYWQ9YXN5bmMocGF0aCk9PnJlYWRlci5yZWFkKHBhdGgpO1xucmV0dXJue3JlYWR9O1xuIH07JGjNj19vbmNlLnJlYWRaaXAocmVhZFppcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJaaXBSZWFkZXIiOlsiWmlwUmVhZGVyIl0sInJlYWRaaXAiOlsicmVhZFppcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADs3q8+hgYAAIYGAAAhAAAAQGVuZG8vemlwLXYxLjAuOS9zcmMvc2lnbmF0dXJlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJDRU5UUkFMX0RJUkVDVE9SWV9FTkQiLCJDRU5UUkFMX0ZJTEVfSEVBREVSIiwiREFUQV9ERVNDUklQVE9SIiwiTE9DQUxfRklMRV9IRUFERVIiLCJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQiLCJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIHUoc3RyaW5nKXtcbmNvbnN0IGFycmF5PW5ldyBVaW50OEFycmF5KHN0cmluZy5sZW5ndGgpO1xuZm9yKGxldCBpPTA7aTxzdHJpbmcubGVuZ3RoO2krPTEpe1xuYXJyYXlbaV09c3RyaW5nLmNoYXJDb2RlQXQoaSkmMHhmZjtcbiB9XG5yZXR1cm4gYXJyYXk7XG4gfVxuXG5jb25zdCAgICAgICAgTE9DQUxfRklMRV9IRUFERVI9dSgnUEtcXHgwM1xceDA0Jyk7JGjNj19vbmNlLkxPQ0FMX0ZJTEVfSEVBREVSKExPQ0FMX0ZJTEVfSEVBREVSKTtcbmNvbnN0ICAgICAgICBDRU5UUkFMX0ZJTEVfSEVBREVSPXUoJ1BLXFx4MDFcXHgwMicpOyRozY9fb25jZS5DRU5UUkFMX0ZJTEVfSEVBREVSKENFTlRSQUxfRklMRV9IRUFERVIpO1xuY29uc3QgICAgICAgIENFTlRSQUxfRElSRUNUT1JZX0VORD11KCdQS1xceDA1XFx4MDYnKTskaM2PX29uY2UuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKENFTlRSQUxfRElSRUNUT1JZX0VORCk7XG5jb25zdCAgICAgICAgWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj11KCdQS1xceDA2XFx4MDcnKTskaM2PX29uY2UuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUihaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKTtcbmNvbnN0ICAgICAgICBaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9dSgnUEtcXHgwNlxceDA2Jyk7JGjNj19vbmNlLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORChaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO1xuY29uc3QgICAgICAgIERBVEFfREVTQ1JJUFRPUj11KCdQS1xceDA3XFx4MDgnKTskaM2PX29uY2UuREFUQV9ERVNDUklQVE9SKERBVEFfREVTQ1JJUFRPUik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJMT0NBTF9GSUxFX0hFQURFUiI6WyJMT0NBTF9GSUxFX0hFQURFUiJdLCJDRU5UUkFMX0ZJTEVfSEVBREVSIjpbIkNFTlRSQUxfRklMRV9IRUFERVIiXSwiQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIjpbIkNFTlRSQUxfRElSRUNUT1JZX0VORCJdLCJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SIjpbIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IiXSwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIjpbIlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCJdLCJEQVRBX0RFU0NSSVBUT1IiOlsiREFUQV9ERVNDUklQVE9SIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAABAZW5kby96aXAtdjEuMC45L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnyUH8WgGAABoBgAAHgAAAEBlbmRvL3ppcC12MS4wLjkvc3JjL3dyaXRlci5qc3siaW1wb3J0cyI6WyIuL2J1ZmZlci13cml0ZXIuanMiLCIuL2Zvcm1hdC13cml0ZXIuanMiXSwiZXhwb3J0cyI6WyJaaXBXcml0ZXIiLCJ3cml0ZVppcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBCdWZmZXJXcml0ZXIsd3JpdGVaaXBGb3JtYXQ7JGjNj19pbXBvcnRzKFtbXCIuL2J1ZmZlci13cml0ZXIuanNcIiwgW1tcIkJ1ZmZlcldyaXRlclwiLCBbJGjNj19hID0+IChCdWZmZXJXcml0ZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2Zvcm1hdC13cml0ZXIuanNcIiwgW1tcIndyaXRlWmlwXCIsIFskaM2PX2EgPT4gKHdyaXRlWmlwRm9ybWF0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY2xhc3MgICAgICAgIFppcFdyaXRlcntcbi8qXG5cblxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zPXtkYXRlOm5ldyBEYXRlKCl9KXtcbmNvbnN0e2RhdGV9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudGhpcy5maWxlcz1uZXcgTWFwKCk7XG50aGlzLmRhdGU9ZGF0ZTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG4gICAgIHdyaXRlKG5hbWUsY29udGVudCxvcHRpb25zPXt9KXtcbmNvbnN0e21vZGU9MG82NDQsZGF0ZT11bmRlZmluZWQsY29tbWVudD0nJ309b3B0aW9ucztcbmlmKCFjb250ZW50KXtcbnRocm93IEVycm9yKCBgWmlwV3JpdGVyIHdyaXRlIHJlcXVpcmVzIGNvbnRlbnQgZm9yICR7bmFtZX1gKTtcbiB9XG50aGlzLmZpbGVzLnNldChuYW1lLHtcbm5hbWUsXG5tb2RlLFxuZGF0ZSxcbmNvbnRlbnQsXG5jb21tZW50fSk7XG5cbiB9XG5cbi8qXG5cbiAgICovXG4gICAgICAgIHNuYXBzaG90KCl7XG5jb25zdCB3cml0ZXI9bmV3IEJ1ZmZlcldyaXRlcigpO1xud3JpdGVaaXBGb3JtYXQod3JpdGVyLEFycmF5LmZyb20odGhpcy5maWxlcy52YWx1ZXMoKSkpO1xucmV0dXJuIHdyaXRlci5zdWJhcnJheSgpO1xuIH19XG5cblxuLypcblxuICovJGjNj19vbmNlLiBaaXBXcml0ZXIoWmlwV3JpdGVyKTtcbmNvbnN0ICAgICAgICB3cml0ZVppcD0oKT0+e1xuY29uc3Qgd3JpdGVyPW5ldyBaaXBXcml0ZXIoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdyaXRlPWFzeW5jKHBhdGgsZGF0YSk9PntcbndyaXRlci53cml0ZShwYXRoLGRhdGEpO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzbmFwc2hvdD1hc3luYygpPT53cml0ZXIuc25hcHNob3QoKTtcbnJldHVybnt3cml0ZSxzbmFwc2hvdH07XG4gfTskaM2PX29uY2Uud3JpdGVaaXAod3JpdGVaaXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiWmlwV3JpdGVyIjpbIlppcFdyaXRlciJdLCJ3cml0ZVppcCI6WyJ3cml0ZVppcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABmVxEJwwEAAMMBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcmluZzAvbWFpbi5qc1wiLCBbXV0sW1wiLi9yaW5nMS9tYWluLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJBhzwNzAQAAcwEAAB8AAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIkBlbmRvL2ZhciJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOD1uR9vAgAAbwIAACwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNHZW5lcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaM2PX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD/fh925gEAAOYBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbXV0sW1wiLi9tYWtlcnMuanNcIiwgW11dLFtcIi4vYXN5bmMtZ2VuZXJhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANxfQTswHAADMBwAAJAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZU1hcCIsIm1ha2VQcm9taXNlIiwibWFrZVNldCIsIm1ha2VXZWFrTWFwIiwibWFrZVdlYWtTZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVByb21pc2U9KGV4ZWN1dG9yKT0+aGFyZGVuKG5ldyBQcm9taXNlKGV4ZWN1dG9yKSk7JGjNj19vbmNlLm1ha2VQcm9taXNlKG1ha2VQcm9taXNlKTtcbmhhcmRlbihtYWtlUHJvbWlzZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwPShlbnRyaWVzT3JJdGVyYWJsZSk9PmhhcmRlbihuZXcgTWFwKGVudHJpZXNPckl0ZXJhYmxlKSk7JGjNj19vbmNlLm1ha2VNYXAobWFrZU1hcCk7XG5oYXJkZW4obWFrZU1hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVNldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VTZXQobWFrZVNldCk7XG5oYXJkZW4obWFrZVNldCk7XG5cbi8qXG5cblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcD0oZW50cmllcyk9PmhhcmRlbihuZXcgV2Vha01hcChlbnRyaWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrTWFwKG1ha2VXZWFrTWFwKTtcbmhhcmRlbihtYWtlV2Vha01hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0PSh2YWx1ZXMpPT5oYXJkZW4obmV3IFdlYWtTZXQodmFsdWVzKSk7JGjNj19vbmNlLm1ha2VXZWFrU2V0KG1ha2VXZWFrU2V0KTtcbmhhcmRlbihtYWtlV2Vha1NldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZSI6WyJtYWtlUHJvbWlzZSJdLCJtYWtlTWFwIjpbIm1ha2VNYXAiXSwibWFrZVNldCI6WyJtYWtlU2V0Il0sIm1ha2VXZWFrTWFwIjpbIm1ha2VXZWFrTWFwIl0sIm1ha2VXZWFrU2V0IjpbIm1ha2VXZWFrU2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIo2475JAwAASQMAACkAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc3siaW1wb3J0cyI6WyIuLi9yaW5nMC9tYWluLmpzIl0sImV4cG9ydHMiOlsiYXN5bmNEb1doaWxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0RvV2hpbGU9KGJvZHkpPT57XG5yZXR1cm4gbWFrZVByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuY29uc3QgbG9vcD1hc3luYygpPT57XG5jb25zdCBkb0NvbnRpbnVlPWF3YWl0IGJvZHkoKTtcbmlmKCFkb0NvbnRpbnVlKXtcbi8vXG5yZXNvbHZlKHVuZGVmaW5lZCk7XG5yZXR1cm47XG4gfVxuXG4vL1xuLy9cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH07XG5cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH0pO1xuIH07JGjNj19vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAZvJkKIAQAAiAEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2FzeW5jLXRvb2xzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwECHgMKAAAAAAAAAAAAT1GKL34oAQB+KAEAFAAAAAAAAAAAAAAApIEAAAAAY29tcGFydG1lbnQtbWFwLmpzb25QSwECHgMKAAAAAAAAAAAABQu9oH8BAAB/AQAAIAAAAAAAAAAAAAAApIGwKAEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL2hlYXAuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIFtKgEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABLcf+RZCgAAWQoAACQAAAAAAAAAAAAAAKSB/CsBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAADuWrfPawIAAGsCAAAlAAAAAAAAAAAAAACkgZc2AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAHXpQa5YAgAAWAIAACsAAAAAAAAAAAAAAKSBRTkBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAHmlMGXUDAAB1AwAAJAAAAAAAAAAAAAAApIHmOwEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9rZXlzLmpzUEsBAh4DCgAAAAAAAAAAAB9ChiniBgAA4gYAACkAAAAAAAAAAAAAAKSBnT8BAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvbWFrZS1vbmNlLmpzUEsBAh4DCgAAAAAAAAAAAO9qtJJfCQAAXwkAAC0AAAAAAAAAAAAAAKSBxkYBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvd2F0Y2gtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAABczaqHAB0AAAAdAAAmAAAAAAAAAAAAAACkgXBQAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAACBRsWF1AMAANQDAAAnAAAAAAAAAAAAAACkgbRtAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanNQSwECHgMKAAAAAAAAAAAA6KHdGscFAADHBQAAJwAAAAAAAAAAAAAApIHNcQEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAACOOMmo/AgAAPwIAACEAAAAAAAAAAAAAAKSB2XcBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABolNPJahYAAGoWAAAlAAAAAAAAAAAAAACkgVd6AQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzUEsBAh4DCgAAAAAAAAAAAOSrY+7hBQAA4QUAADoAAAAAAAAAAAAAAKSBBJEBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAQYWPeJ8FAACfBQAAOgAAAAAAAAAAAAAApIE9lwEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAACVK3DJZwQAAGcEAAA2AAAAAAAAAAAAAACkgTSdAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAARwq540gGAABIBgAANgAAAAAAAAAAAAAApIHvoQEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAADY/StV/AwAAfwMAACMAAAAAAAAAAAAAAKSBi6gBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzUEsBAh4DCgAAAAAAAAAAAEstp/vrHwAA6x8AACkAAAAAAAAAAAAAAKSBS6wBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzUEsBAh4DCgAAAAAAAAAAAB3E0Qq6EAAAuhAAACEAAAAAAAAAAAAAAKSBfcwBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAACKmWPI1gUAANYFAAAtAAAAAAAAAAAAAACkgXbdAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAEjBwTswYAADMGAAAJgAAAAAAAAAAAAAApIGX4wEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIGn/AEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFbRVxHpGQAA6RkAACcAAAAAAAAAAAAAAKSBNv4BAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc1BLAQIeAwoAAAAAAAAAAAAyA/0ZzQUAAM0FAAAlAAAAAAAAAAAAAACkgWQYAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzUEsBAh4DCgAAAAAAAAAAAJyotJdIBAAASAQAACQAAAAAAAAAAAAAAKSBdB4CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAAAC1eDCjgIAAI4CAAAlAAAAAAAAAAAAAACkgf4iAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzUEsBAh4DCgAAAAAAAAAAAOfyjBRzBQAAcwUAACQAAAAAAAAAAAAAAKSBzyUCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADML6bVHwcAAB8HAAAnAAAAAAAAAAAAAACkgYQrAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvanMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAJm0Uq9MVAADTFQAALwAAAAAAAAAAAAAApIHoMgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAA1VW41hEQAAAREAAAJgAAAAAAAAAAAAAApIEISQIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAtr0hXmsIAABrCAAAKwAAAAAAAAAAAAAApIFdWQIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc1BLAQIeAwoAAAAAAAAAAACaBR+vhh0AAIYdAAAoAAAAAAAAAAAAAACkgRFiAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvc2VzLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAIeqWiD9AgAA/QIAACgAAAAAAAAAAAAAAKSB3X8CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanNQSwECHgMKAAAAAAAAAAAAopUBEE4DAABOAwAAKQAAAAAAAAAAAAAApIEggwIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKgAAAAAAAAAAAAAApIG1hgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJuHQWoSBwAAEgcAACoAAAAAAAAAAAAAAKSBR4gCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc1BLAQIeAwoAAAAAAAAAAACu+GMDBwgAAAcIAAAzAAAAAAAAAAAAAACkgaGPAgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNQSwECHgMKAAAAAAAAAAAAtRbSkN0HAADdBwAAJAAAAAAAAAAAAAAApIH5lwIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAANlbosJxEAAAcRAAACcAAAAAAAAAAAAAAKSBGKACAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9ub3RpZmllci5qc1BLAQIeAwoAAAAAAAAAAAB0ejOhLSsAAC0rAAAqAAAAAAAAAAAAAACkgc6wAgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvcHVibGlzaC1raXQuanNQSwECHgMKAAAAAAAAAAAAqJ0YXBEIAAARCAAALgAAAAAAAAAAAAAApIFD3AIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3JlZC1ub3RpZmllci5qc1BLAQIeAwoAAAAAAAAAAACnEwIz7RUAAO0VAAAnAAAAAAAAAAAAAACkgaDkAgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanNQSwECHgMKAAAAAAAAAAAAFQde8yESAAAhEgAAKAAAAAAAAAAAAAAApIHS+gIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZS5qc1BLAQIeAwoAAAAAAAAAAACHaHtf0QcAANEHAAApAAAAAAAAAAAAAACkgTkNAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlci5qc1BLAQIeAwoAAAAAAAAAAABHWhra7QMAAO0DAAAkAAAAAAAAAAAAAACkgVEVAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdG9waWMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAKgAAAAAAAAAAAAAApIGAGQMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMhA0AaUDQAAlA0AACEAAAAAAAAAAAAAAKSBEhsDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADwIquuNQUAADUFAAAsAAAAAAAAAAAAAACkgeUoAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc1BLAQIeAwoAAAAAAAAAAAC6xE3t9wQAAPcEAAAwAAAAAAAAAAAAAACkgWQuAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNQSwECHgMKAAAAAAAAAAAAO148gpwQAACcEAAAMQAAAAAAAAAAAAAApIGpMwMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACYLN8lzQsAAM0LAAAxAAAAAAAAAAAAAACkgZREAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAOkOOdywDQAAsA0AADUAAAAAAAAAAAAAAKSBsFADAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAFR9JxVzCgAAcwoAADUAAAAAAAAAAAAAAKSBs14DAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAHnbC4erDgAAqw4AAC4AAAAAAAAAAAAAAKSBeWkDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAAAAAAAAAAAApIFweAMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAN94EGYiAgAAIgIAABwAAAAAAAAAAAAAAKSB+XkDAEBhZ29yaWMvdGltZS12MC4zLjIvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAMZ1iznETAABxEwAAIwAAAAAAAAAAAAAApIFVfAMAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdGltZU1hdGguanNQSwECHgMKAAAAAAAAAAAAGgbhCQsJAAALCQAAJQAAAAAAAAAAAAAApIEHkAMAQGFnb3JpYy90aW1lLXYwLjMuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAmAAAAAAAAAAAAAACkgVWZAwBAYWdvcmljL3RpbWUtdjAuMy4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAF/+bAoBYAAKAWAAAoAAAAAAAAAAAAAACkgeOaAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvZXhvLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAALj1FjCoCAAAqAgAACQAAAAAAAAAAAAAAKSBybEDAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAMEXLprBYAAKwWAAAwAAAAAAAAAAAAAACkgbO6AwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanNQSwECHgMKAAAAAAAAAAAAmaKoxJITAACSEwAAKAAAAAAAAAAAAAAApIGt0QMAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY2xlYW5Qcm9wb3NhbC5qc1BLAQIeAwoAAAAAAAAAAACyuS5mewkAAHsJAAA3AAAAAAAAAAAAAACkgYXlAwBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L2FsbG9jYXRpb25NYXRoLmpzUEsBAh4DCgAAAAAAAAAAAL5/zsXmBAAA5gQAADkAAAAAAAAAAAAAAKSBVe8DAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvZXZhbENvbnRyYWN0Q29kZS5qc1BLAQIeAwoAAAAAAAAAAABsCYbwFg0AABYNAAAtAAAAAAAAAAAAAACkgZL0AwBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L2V4aXQuanNQSwECHgMKAAAAAAAAAAAABIpuWnIBAAByAQAANwAAAAAAAAAAAAAApIHzAQQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9pbnRlcm5hbC10eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABIAoFZqwoAAKsKAAA8AAAAAAAAAAAAAACkgboDBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L29mZmVySGFuZGxlclN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAi6WVmvoFAAD6BQAANAAAAAAAAAAAAAAApIG/DgQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9vZmZlclNhZmV0eS5qc1BLAQIeAwoAAAAAAAAAAAArPnYmEQwAABEMAAAzAAAAAAAAAAAAAACkgQsVBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3JlYWxsb2NhdGUuanNQSwECHgMKAAAAAAAAAAAArPgb+rEJAACxCQAAOwAAAAAAAAAAAAAApIFtIQQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC9yaWdodHNDb25zZXJ2YXRpb24uanNQSwECHgMKAAAAAAAAAAAAxL58U24FAABuBQAAMwAAAAAAAAAAAAAApIF3KwQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAjCnLJMAQAATAEAADYAAAAAAAAAAAAAAKSBNjEEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvdHlwZXMtYW1iaWVudC5qc1BLAQIeAwoAAAAAAAAAAAD5Hi+mHwkAAB8JAAAwAAAAAAAAAAAAAACkgdYyBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3ZhdFJvb3QuanNQSwECHgMKAAAAAAAAAAAAS8OeekESAABBEgAAMAAAAAAAAAAAAAAApIFDPAQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RGYWNldC96Y2ZNaW50LmpzUEsBAh4DCgAAAAAAAAAAAFx65lubMAAAmzAAADAAAAAAAAAAAAAAAKSB0k4EAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0RmFjZXQvemNmU2VhdC5qc1BLAQIeAwoAAAAAAAAAAABAg42/fjcAAH43AAAyAAAAAAAAAAAAAACkgbt/BABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdEZhY2V0L3pjZlp5Z290ZS5qc1BLAQIeAwoAAAAAAAAAAAAX7ZyhOQcAADkHAAA5AAAAAAAAAAAAAACkgYm3BABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdFN1cHBvcnQvYXRvbWljVHJhbnNmZXIuanNQSwECHgMKAAAAAAAAAAAAFFYf5uECAADhAgAAKAAAAAAAAAAAAAAApIEZvwQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaGFuZGxlV2FybmluZy5qc1BLAQIeAwoAAAAAAAAAAADTJzWj+A4AAPgOAAAwAAAAAAAAAAAAAACkgUDCBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9pbnN0YW5jZVJlY29yZFN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAm3L50W0EAABtBAAAKQAAAAAAAAAAAAAApIGG0QQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaW50ZXJuYWwtdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAiZe2OdcDAADXAwAAJwAAAAAAAAAAAAAApIE61gQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvaXNzdWVyUmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAADJ19CyfEQAAnxEAACgAAAAAAAAAAAAAAKSBVtoEAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2lzc3VlclN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAM4OyVVEGAABRBgAAJQAAAAAAAAAAAAAApIE77AQAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvbWFrZUhhbmRsZS5qc1BLAQIeAwoAAAAAAAAAAACLew/ZekMAAHpDAAAlAAAAAAAAAAAAAACkgc/yBABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAANt1Ov+IAQAAiAEAAB4AAAAAAAAAAAAAAKSBjDYFAEBhZ29yaWMvem9uZS12MC4yLjIvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAD3utnWChEAAAoRAAAiAAAAAAAAAAAAAACkgVA4BQBAYWdvcmljL3pvbmUtdjAuMi4yL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAIHpHbNhAgAAYQIAABsAAAAAAAAAAAAAAKSBmkkFAEBlbmRvL2Jhc2U2NC12MS4wLjkvYXRvYi5qc1BLAQIeAwoAAAAAAAAAAAAmVF3mAQMAAAEDAAAbAAAAAAAAAAAAAACkgTRMBQBAZW5kby9iYXNlNjQtdjEuMC45L2J0b2EuanNQSwECHgMKAAAAAAAAAAAAc/onj6sBAACrAQAAHQAAAAAAAAAAAAAApIFuTwUAQGVuZG8vYmFzZTY0LXYxLjAuOS9kZWNvZGUuanNQSwECHgMKAAAAAAAAAAAA9/dHQqsBAACrAQAAHQAAAAAAAAAAAAAApIFUUQUAQGVuZG8vYmFzZTY0LXYxLjAuOS9lbmNvZGUuanNQSwECHgMKAAAAAAAAAAAAauZ2Z5YCAACWAgAAHAAAAAAAAAAAAAAApIE6UwUAQGVuZG8vYmFzZTY0LXYxLjAuOS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABdcxYnEQMAABEDAAAhAAAAAAAAAAAAAACkgQpWBQBAZW5kby9iYXNlNjQtdjEuMC45L3NyYy9jb21tb24uanNQSwECHgMKAAAAAAAAAAAA4E5MvncHAAB3BwAAIQAAAAAAAAAAAAAApIFaWQUAQGVuZG8vYmFzZTY0LXYxLjAuOS9zcmMvZGVjb2RlLmpzUEsBAh4DCgAAAAAAAAAAAEcLyqkgBgAAIAYAACEAAAAAAAAAAAAAAKSBEGEFAEBlbmRvL2Jhc2U2NC12MS4wLjkvc3JjL2VuY29kZS5qc1BLAQIeAwoAAAAAAAAAAABU4lu4xwQAAMcEAAArAAAAAAAAAAAAAACkgW9nBQBAZW5kby9jb21tb24tdjEuMi44L2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzUEsBAh4DCgAAAAAAAAAAAJAGV4ZcBAAAXAQAACoAAAAAAAAAAAAAAKSBf2wFAEBlbmRvL2NvbW1vbi12MS4yLjgvZnJvbS11bmlxdWUtZW50cmllcy5qc1BLAQIeAwoAAAAAAAAAAABRcw2kNwIAADcCAAAkAAAAAAAAAAAAAACkgSNxBQBAZW5kby9jb21tb24tdjEuMi44L2lkZW50LWNoZWNrZXIuanNQSwECHgMKAAAAAAAAAAAAYVj+hngCAAB4AgAAJgAAAAAAAAAAAAAApIGccwUAQGVuZG8vY29tbW9uLXYxLjIuOC9saXN0LWRpZmZlcmVuY2UuanNQSwECHgMKAAAAAAAAAAAAD5vAqF0DAABdAwAAKgAAAAAAAAAAAAAApIFYdgUAQGVuZG8vY29tbW9uLXYxLjIuOC9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAFaLCeM5AgAAOQIAACQAAAAAAAAAAAAAAKSB/XkFAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAACtVwZ+AgMAAAIDAAAhAAAAAAAAAAAAAACkgXh8BQBAZW5kby9jb21tb24tdjEuMi44L29iamVjdC1tYXAuanNQSwECHgMKAAAAAAAAAAAAO59fjuEDAADhAwAAJgAAAAAAAAAAAAAApIG5fwUAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWV0YS1tYXAuanNQSwECHgMKAAAAAAAAAAAAwgIay+EDAADhAwAAJAAAAAAAAAAAAAAApIHegwUAQGVuZG8vY29tbW9uLXYxLjIuOC90aHJvdy1sYWJlbGVkLmpzUEsBAh4DCgAAAAAAAAAAAFn7sAJvAgAAbwIAADEAAAAAAAAAAAAAAKSBAYgFAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvaW1wb3J0LWFyY2hpdmUuanNQSwECHgMKAAAAAAAAAAAAmJuoKbYnAAC2JwAANgAAAAAAAAAAAAAApIG/igUAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvY29tcGFydG1lbnQtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAMa67a8BAwAAAQMAADAAAAAAAAAAAAAAAKSBybIFAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2V4dGVuc2lvbi5qc1BLAQIeAwoAAAAAAAAAAAAmQPJEzyQAAM8kAAA6AAAAAAAAAAAAAACkgRi2BQBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9pbXBvcnQtYXJjaGl2ZS1saXRlLmpzUEsBAh4DCgAAAAAAAAAAAC3OD8EFBQAABQUAAD0AAAAAAAAAAAAAAKSBP9sFAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL2ltcG9ydC1hcmNoaXZlLXBhcnNlcnMuanNQSwECHgMKAAAAAAAAAAAA+d2GmVgIAABYCAAANQAAAAAAAAAAAAAApIGf4AUAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvaW1wb3J0LWFyY2hpdmUuanNQSwECHgMKAAAAAAAAAAAA/iUH7Nw4AADcOAAAMgAAAAAAAAAAAAAApIFK6QUAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvaW1wb3J0LWhvb2suanNQSwECHgMKAAAAAAAAAAAASElyuP4CAAD+AgAAKwAAAAAAAAAAAAAApIF2IgYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvanNvbi5qc1BLAQIeAwoAAAAAAAAAAABmFGDOQR4AAEEeAAArAAAAAAAAAAAAAACkgb0lBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9saW5rLmpzUEsBAh4DCgAAAAAAAAAAAAM/TbxZEwAAWRMAADEAAAAAAAAAAAAAAKSBR0QGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL21hcC1wYXJzZXIuanNQSwECHgMKAAAAAAAAAAAAKkvO5HUKAAB1CgAAPAAAAAAAAAAAAAAApIHvVwYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvbm9kZS1tb2R1bGUtc3BlY2lmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAE9MvSHgBAAA4AQAADIAAAAAAAAAAAAAAKSBvmIGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLWJ5dGVzLmpzUEsBAh4DCgAAAAAAAAAAAN0SwojIEAAAyBAAAEYAAAAAAAAAAAAAAKSB7mcGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLWNqcy1zaGFyZWQtZXhwb3J0LXdyYXBwZXIuanNQSwECHgMKAAAAAAAAAAAA92/PPtwEAADcBAAAMQAAAAAAAAAAAAAApIEaeQYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtanNvbi5qc1BLAQIeAwoAAAAAAAAAAAC1zG8YKwcAACsHAAA0AAAAAAAAAAAAAACkgUV+BgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wYXJzZS1wcmUtY2pzLmpzUEsBAh4DCgAAAAAAAAAAAOlbEhjuBAAA7gQAADQAAAAAAAAAAAAAAKSBwoUGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BhcnNlLXByZS1tanMuanNQSwECHgMKAAAAAAAAAAAAuTwRNJIEAACSBAAAMQAAAAAAAAAAAAAApIECiwYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvcGFyc2UtdGV4dC5qc1BLAQIeAwoAAAAAAAAAAACbwNI3LhYAAC4WAAA0AAAAAAAAAAAAAACkgeOPBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wb2xpY3ktZm9ybWF0LmpzUEsBAh4DCgAAAAAAAAAAAE3wXPAZJQAAGSUAAC0AAAAAAAAAAAAAAKSBY6YGAEBlbmRvL2NvbXBhcnRtZW50LW1hcHBlci12MS40LjAvc3JjL3BvbGljeS5qc1BLAQIeAwoAAAAAAAAAAABNzEJuDQgAAA0IAAAtAAAAAAAAAAAAAACkgcfLBgBAZW5kby9jb21wYXJ0bWVudC1tYXBwZXItdjEuNC4wL3NyYy9wb3dlcnMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAANQAAAAAAAAAAAAAApIEf1AYAQGVuZG8vY29tcGFydG1lbnQtbWFwcGVyLXYxLjQuMC9zcmMvdHlwZXMtZXh0ZXJuYWwuanNQSwECHgMKAAAAAAAAAAAAxRjnOpQBAACUAQAAIQAAAAAAAAAAAAAApIG81QYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJK3R37sDQAA7A0AACsAAAAAAAAAAAAAAKSBj9cGAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAA/HBpMd8HAADfBwAAHAAAAAAAAAAAAAAApIHE5QYAQGVuZG8vZXJyb3JzLXYxLjIuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB+XVUrpRAAAKUQAAAjAAAAAAAAAAAAAACkgd3tBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAApAAAAAAAAAAAAAACkgcP+BgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAQIOOsqgwAAKoMAAAnAAAAAAAAAAAAAACkgVQABwBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAAY5wTOkMAADpDAAANQAAAAAAAAAAAAAApIFDDQcAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAAAAAAAAAAAApIF/GgcAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAAhqimx18JAABfCQAALQAAAAAAAAAAAAAApIH5HQcAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAAAAAAAAAAAAAKSBoycHAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAALFYNphSAgAAUgIAABkAAAAAAAAAAAAAAKSBOioHAEBlbmRvL2V4by12MS41LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAPoHfvdcUAADXFAAAIgAAAAAAAAAAAAAApIHDLAcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAADO7lsG5i8AAOYvAAAhAAAAAAAAAAAAAACkgdpBBwBAZW5kby9leG8tdjEuNS43L3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAARpM8bjYCAAA2AgAAJQAAAAAAAAAAAAAApIH/cQcAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAAAAAAAAAAACkgXh0BwBAZW5kby9leG8tdjEuNS43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAALSpg4VgIAAFYCAAAdAAAAAAAAAAAAAACkgf11BwBAZW5kby9mYXItdjEuMS45L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABp8BmfMwoAADMKAAA1AAAAAAAAAAAAAACkgY54BwBAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMi9zcmMvY29tcGFydG1lbnQtd3JhcHBlci5qc1BLAQIeAwoAAAAAAAAAAAAcxpBeIwwAACMMAAAnAAAAAAAAAAAAAACkgRSDBwBAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjMuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAuIFp8HQHAAB0BwAAHQAAAAAAAAAAAAAApIF8jwcAQGVuZG8vbWFyc2hhbC12MS42LjIvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA12xbpVlDAABZQwAAKgAAAAAAAAAAAAAApIErlwcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAF+c8DJSIgAAUiIAACsAAAAAAAAAAAAAAKSBzNoHAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb0NhcERhdGEuanNQSwECHgMKAAAAAAAAAAAAD0obqy4iAAAuIgAALQAAAAAAAAAAAAAApIFn/QcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzUEsBAh4DCgAAAAAAAAAAAEULMv0QIwAAECMAACoAAAAAAAAAAAAAAKSB4B8IAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1BLAQIeAwoAAAAAAAAAAABEEqbnXAYAAFwGAAAtAAAAAAAAAAAAAACkgThDCABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNQSwECHgMKAAAAAAAAAAAAKcNSTionAAAqJwAAIwAAAAAAAAAAAAAApIHfSQgAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAu+NNiZwnAACcJwAAJQAAAAAAAAAAAAAApIFKcQgAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3JhbmtPcmRlci5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAhAAAAAAAAAAAAAACkgSmZCABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAX+pOglkFAABZBQAAHgAAAAAAAAAAAAAApIGymggAQGVuZG8vbmF0LXY1LjAuMTMvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAKEpqrw/CgAAPwoAACAAAAAAAAAAAAAAAKSBR6AIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJeovyVUBgAAVAYAACgAAAAAAAAAAAAAAKSBxKoIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5QXJyYXkuanNQSwECHgMKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAAAAAAAAAAAApIFesQgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlSZWNvcmQuanNQSwECHgMKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAAAAAAAAAAAApIHOuQgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1BLAQIeAwoAAAAAAAAAAABDm4qoNBIAADQSAAAkAAAAAAAAAAAAAACkgXDECABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAQU/8T48FAACPBQAAKwAAAAAAAAAAAAAApIHm1ggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2l0ZXItaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABkz+JvQREAAEERAAAnAAAAAAAAAAAAAACkgb7cCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZS1mYXIuanNQSwECHgMKAAAAAAAAAAAAK9Ggv4AEAACABAAAKQAAAAAAAAAAAAAApIFE7ggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2VUYWdnZWQuanNQSwECHgMKAAAAAAAAAAAADSKSdxQVAAAUFQAAMAAAAAAAAAAAAAAApIEL8wgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAABQMTX6wJAAAsCQAACoAAAAAAAAAAAAAAKSBbQgJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGVPZi5qc1BLAQIeAwoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAAAAAAAAAAACkgWUtCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcmVtb3RhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAMUYAMyGDAAAhgwAACsAAAAAAAAAAAAAAKSBUUUJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zYWZlLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAAAAAAAAAAAApIEgUgkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N0cmluZy5qc1BLAQIeAwoAAAAAAAAAAABmP1mV/AkAAPwJAAAlAAAAAAAAAAAAAACkgRVaCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvc3ltYm9sLmpzUEsBAh4DCgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAAAAAAAAAAAAAKSBVGQJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90YWdnZWQuanNQSwECHgMKAAAAAAAAAAAADr8JLf4IAAD+CAAAKQAAAAAAAAAAAAAApIGrawkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJAAAAAAAAAAAAAAApIHwdAkAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAMWHV+m3DgAAtw4AAB4AAAAAAAAAAAAAAKSBfHYJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABbpTkMOTIAADkyAAAqAAAAAAAAAAAAAACkgW+FCQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY2hlY2tLZXkuanNQSwECHgMKAAAAAAAAAAAAhD+LBxMVAAATFQAALQAAAAAAAAAAAAAApIHwtwkAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzUEsBAh4DCgAAAAAAAAAAAEybZhbHDQAAxw0AACkAAAAAAAAAAAAAAKSBTs0JAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb3B5QmFnLmpzUEsBAh4DCgAAAAAAAAAAACmeZ2zOCwAAzgsAACkAAAAAAAAAAAAAAKSBXNsJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb3B5U2V0LmpzUEsBAh4DCgAAAAAAAAAAAE2RIifgEgAA4BIAADkAAAAAAAAAAAAAAKSBcecJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAABbOtXLUhYAAFIWAAA1AAAAAAAAAAAAAACkgaj6CQBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAAB9YIszixwAAIscAAA1AAAAAAAAAAAAAACkgU0RCgBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAACkQyco7RgAAO0YAAA2AAAAAAAAAAAAAACkgSsuCgBAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanNQSwECHgMKAAAAAAAAAAAAHTgMlMitAADIrQAANQAAAAAAAAAAAAAApIFsRwoAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAIgAAAAAAAAAAAAAApIGH9QoAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADSAaLEQgYAAEIGAAAhAAAAAAAAAAAAAACkgRH3CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAs11bRlUCAABVAgAAKgAAAAAAAAAAAAAApIGS/QoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAAAAAAAAAAAAAKSBLwALAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAAAAAAAAAAAAAKSBEggLAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJQAAAAAAAAAAAAAApIHgDQsAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADcaPdCkBEAAJARAAAcAAAAAAAAAAAAAACkgW0PCwBAZW5kby9zdHJlYW0tdjEuMi44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAACoQ7JGRAQAAkQEAACAAAAAAAAAAAAAAAKSBNyELAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPJouaAgBwAAIAcAACkAAAAAAAAAAAAAAKSBBiMLAEBlbmRvL3RyYW1wb2xpbmUtdjEuMC4zL3NyYy90cmFtcG9saW5lLmpzUEsBAh4DCgAAAAAAAAAAANcAT7OMAgAAjAIAABkAAAAAAAAAAAAAAKSBbSoLAEBlbmRvL3ppcC12MS4wLjkvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAZKqSA0ISAABCEgAAJQAAAAAAAAAAAAAApIEwLQsAQGVuZG8vemlwLXYxLjAuOS9zcmMvYnVmZmVyLXJlYWRlci5qc1BLAQIeAwoAAAAAAAAAAAA5EpWQQg4AAEIOAAAlAAAAAAAAAAAAAACkgbU/CwBAZW5kby96aXAtdjEuMC45L3NyYy9idWZmZXItd3JpdGVyLmpzUEsBAh4DCgAAAAAAAAAAALCy5WyYAQAAmAEAACMAAAAAAAAAAAAAAKSBOk4LAEBlbmRvL3ppcC12MS4wLjkvc3JjL2NvbXByZXNzaW9uLmpzUEsBAh4DCgAAAAAAAAAAAHe4sXWsAwAArAMAAB0AAAAAAAAAAAAAAKSBE1ALAEBlbmRvL3ppcC12MS4wLjkvc3JjL2NyYzMyLmpzUEsBAh4DCgAAAAAAAAAAABotonfZJQAA2SUAACUAAAAAAAAAAAAAAKSB+lMLAEBlbmRvL3ppcC12MS4wLjkvc3JjL2Zvcm1hdC1yZWFkZXIuanNQSwECHgMKAAAAAAAAAAAAk8pN2YUUAACFFAAAJQAAAAAAAAAAAAAApIEWegsAQGVuZG8vemlwLXYxLjAuOS9zcmMvZm9ybWF0LXdyaXRlci5qc1BLAQIeAwoAAAAAAAAAAADR9BYS+gUAAPoFAAAeAAAAAAAAAAAAAACkgd6OCwBAZW5kby96aXAtdjEuMC45L3NyYy9yZWFkZXIuanNQSwECHgMKAAAAAAAAAAAA7N6vPoYGAACGBgAAIQAAAAAAAAAAAAAApIEUlQsAQGVuZG8vemlwLXYxLjAuOS9zcmMvc2lnbmF0dXJlLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAAAAAAAAAAAAAKSB2ZsLAEBlbmRvL3ppcC12MS4wLjkvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAJ8lB/FoBgAAaAYAAB4AAAAAAAAAAAAAAKSBXp0LAEBlbmRvL3ppcC12MS4wLjkvc3JjL3dyaXRlci5qc1BLAQIeAwoAAAAAAAAAAABmVxEJwwEAAMMBAAAcAAAAAAAAAAAAAACkgQKkCwBqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAJBhzwNzAQAAcwEAAB8AAAAAAAAAAAAAAKSB/6ULAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanNQSwECHgMKAAAAAAAAAAAA4PW5H28CAABvAgAALAAAAAAAAAAAAAAApIGvpwsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanNQSwECHgMKAAAAAAAAAAAA/34fduYBAADmAQAAIgAAAAAAAAAAAAAApIFoqgsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAAA3F9BOzAcAAMwHAAAkAAAAAAAAAAAAAACkgY6sCwBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanNQSwECHgMKAAAAAAAAAAAAijbjvkkDAABJAwAAKQAAAAAAAAAAAAAApIGctAsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAABm8mQogBAACIAQAAIgAAAAAAAAAAAAAApIEsuAsAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc1BLBQYAAAAA0QDRACdHAAD0uQsAAAA=","endoZipBase64Sha512":"39d3ff05629b7676cb5bd998627a38c1a2cfbbfff3426902f9fec2d1588fb9f083ad7c5f4aa06960a90b141ad9fcdc6ecdb32d29740d1b20951b31f87b43338a"};