xiaomianao666

插件名:global_自动展开全文阅读更多

Sep 28th, 2023
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_自动展开全文阅读更多@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIOiHquWKqOWxleW8gOWFqOaWh+mYheivu+abtOWkmgovLyBAdmVyc2lvbiAgICAgMS4xMTUuMQovLyBAYXV0aG9yICAgICAgYmFzdGVyCi8vIEBkZXNjcmlwdGlvbiDoh6rliqjlsZXlvIDnvZHnq5nlhajmloflhoXlrrnogIzml6DpnIDngrnlh7vvvIzljrvmjonkuIDkupvng6bkurrlub/lkYrvvIzljrvmjonpnIDopoHmiZPlvIBhcHDnmoTmj5DnpLrvvIznq5nlpJbpk77nm7Tovr4o5pSv5oyB6byg5qCH5bem5Y+z6ZSu5ZKM5ouW5ou95omT5byAKe+8jOmBv+WFjee9keWdgOmHjeWumuWQkea1qui0ueaXtumXtO+8jOaUr+aMgeWFjeeZu+mZhuWkjeWItuaWh+Wtl++8jOWFvOWuueaJi+acuuWSjOeUteiEkeerr+OAgiAtLSDjgJDnm67liY3lt7LmlK/mjIHlh6DljYHkuKrnvZHnq5njgJEKLy8gQHN1cHBvcnRVUkwgIGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvemgtQ04vdXNlcnMvMzA2NDMzCi8vIEBob21lcGFnZVVSTCBodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3VzZXJzLzMwNjQzMwovLyBAbmFtZXNwYWNlICAgaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy96aC1DTi91c2Vycy8zMDY0MzMKLy8gQGljb24gICAgICAgIGh0dHBzOi8vaW1nLmljb25zOC5jb20vc3RpY2tlcnMvMTAwLzAwMDAwMC9kb3VibGUtZG93bi5wbmcKLy8gQG1hdGNoICAgICAgICo6Ly9tLjM2a3IuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9leHQuYmFpZHUuY29tL2FwaS9jb21tZW50LyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cueHo1NzcuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmh1YW5xaXUuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9pa25vdy5sZW5vdm8uY29tLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly9nLnBjb25saW5lLmNvbS5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3Lml0MTM1Mi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5qaWFuc2h1LmNvbS9wLyoKLy8gQG1hdGNoICAgICAgICo6Ly9ibG9nLmNzZG4ubmV0LyoKLy8gQG1hdGNoICAgICAgICo6Ly9kb3dubG9hZC5jc2RuLm5ldC9kb3dubG9hZC8qCi8vIEBtYXRjaCAgICAgICAqOi8vamluZ3lhbi5iYWlkdS5jb20vYXJ0aWNsZS8qCi8vIEBtYXRjaCAgICAgICAqOi8vYmFpamlhaGFvLmJhaWR1LmNvbS9zKgovLyBAbWF0Y2ggICAgICAgKjovL2hhb2thbi5iYWlkdS5jb20vdioKLy8gQG1hdGNoICAgICAgICo6Ly96aGlkYW8uYmFpZHUuY29tL3F1ZXN0aW9uLyoKLy8gQG1hdGNoICAgICAgICo6Ly9tLjIxamluZ2ppLmNvbS9hcnRpY2xlLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuYmp0emRienouY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9jaGVqaWFoYW8ubS5hdXRvaG9tZS5jb20uY24vaW5mby8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmJhbmRiYnMuY24vdGhyZWFkcy8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5lbGVjZmFucy5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3lpaWRpYW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlpaWRpYW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9tLmpiNTEuY2MvKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5qYjUxLmNjLyoKLy8gQG1hdGNoICAgICAgICo6Ly9iYWlrZS5iYWlkdS5jb20vaXRlbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd2FwLnBlb3BsZWFwcC5jb20vYXJ0aWNsZS8qCi8vIEBtYXRjaCAgICAgICAqOi8vYmxvZy41MWN0by5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3h1ZWRpbmdtaWFvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8veHcucXEuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9tYmQuYmFpZHUuY29tL25ld3NwYWdlLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuY25iZXRhLmNvbS9hcnRpY2xlcy8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LnpoaWh1LmNvbS9xdWVzdGlvbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vemh1YW5sYW4uemhpaHUuY29tL3AvKgovLyBAbWF0Y2ggICAgICAgKjovLyouaW1vb2MuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnB5LmNuL2NvZGUvKgovLyBAbWF0Y2ggICAgICAgKjovL2ZpbmFuY2Uuc2luYS5jb20uY24vKgovLyBAbWF0Y2ggICAgICAgKjovL2p1ZWppbi5jbi9wb3N0LyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cub3NjaGluYS5uZXQvKgovLyBAbWF0Y2ggICAgICAgKjovL2lzd2JtLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbS5zby5jb20vcz9xPSoKLy8gQG1hdGNoICAgICAgICo6Ly93YXAuc29nb3UuY29tL3dlYi8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5kb3ViYW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cud3hubWguY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuY2hpbmF6LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vZ2l0ZWUuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cudGlhbnlhbmNoYS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5zaGFkdWl6aS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3Nob3cuYm9va21hcmtlYXJ0aC5jb20vdmlldy8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LjQyM2Rvd24uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuaXRkYWFuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3Lml0ZXllLmNvbS9ibG9nLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuMzYwZG9jLmNvbS9jb250ZW50LyoKLy8gQG1hdGNoICAgICAgICo6Ly9kZXZlbG9wZXIuYWxpeXVuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vY2xvdWQudGVuY2VudC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL21haWwucXEuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly90aWViYS5iYWlkdS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy50aWViYS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouaWZlbmcuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnhpbWFsYXlhLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LnNhbnpoaW1hLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbS5tZWlzaGljaGluYS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5sb2dvbmV3cy5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vY24uYmluZy5jb20vc2VhcmNoPyoKLy8gQG1hdGNoICAgICAgICo6Ly9zZWdtZW50ZmF1bHQuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9sZDI0Ni5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5iaWxpYmlsaS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudG91dGlhby5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy5pdGJhb2t1LmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly9zdXBwb3J0LnFxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbS5kb3dueGlhLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5zb2h1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbS53ZWliby5jbi91LyoKLy8gQG1hdGNoICAgICAgICo6Ly9jYXJkLndlaWJvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3Lnl1bnFpc2hpLm5ldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vc3RhY2tvb20uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuY29kZXByai5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL20ueWV6aWNjLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5hbGkyMTMubmV0LyoKLy8gQG1hdGNoICAgICAgICo6Ly9pdHBjYi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudm92b3Nvc28uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cubGlzaGl4aW56aGkuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuYW5xdWFua2UuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly9tLmhleHVuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmphdmFzY3JpcHRjbi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouem9sLmNvbS5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LjVheHh3LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vM2cuMTYzLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5qcy1jb2RlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKndlbmRhLnNvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5keHkuY24vKgovLyBAbWF0Y2ggICAgICAgKjovLypoZWlkb25nLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LnRvZmFjZWJvb2suY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cubmd1aS5jYy8qCi8vIEBtYXRjaCAgICAgICAqOi8vZGRydi5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LnFjYy5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouY25yLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qdGlueW1pbmQubmV0LmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly92aWV3LmluZXdzLnFxLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKmdhbWVyc2t5LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5idWdzY2FuZXIuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmRncnQuY24vKgovLyBAbWF0Y2ggICAgICAgKjovL2Rldm5vdGUucHJvLyoKLy8gQG1hdGNoICAgICAgICo6Ly9iZXRoZW1lLm5ldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5yc3RrLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnRhb2R1ZHUuY2MvKgovLyBAbWF0Y2ggICAgICAgKjovL3dlaWJvLmNvbS90dGFydGljbGUvcC9zaG93KgovLyBAbWF0Y2ggICAgICAgKjovL3dlaWJvLmNvbS9jbWJjaGluYSoKLy8gQG1hdGNoICAgICAgICo6Ly93ZWliby5jb20vdS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmN0ZmlvdC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3d3dy50YWtlZm90by5jbi8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3LmF1dG9ob3RrZXkuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly93d3cuOTVwbS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouYmV0aGVtZS5uZXQvKgovLyBAbWF0Y2ggICAgICAgKjovLyouem91a2Fua2FuLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5oZXh1bi5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoueGp4MTAwLmNuLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlpaTY2Ni5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoucGlhbnNoZW4uY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmtub3diYWlrZS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovL3B5dGhvbmppc2h1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vbS5mcmVlYnVmLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vd3d3Lm51b21pcGhwLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vZGhleHguY24vKgovLyBAbWF0Y2ggICAgICAgKjovLyouZXh5Yi5jbi8qCi8vIEBncmFudCAgICAgICBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICB1bnNhZmVXaW5kb3cKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uICgpIHsKICAgIHZhciB3ZWJzaXRlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9tLmZyZWVidWYuY29tLyoiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQpIHsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKCdtLmZyZWVidWYuY29tJywgJ3d3dy5mcmVlYnVmLmNvbScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cubnVvbWlwaHAuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIucXVlc3Rpb24tcmljaHRleHQgLnJlYWQtbW9yZSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLnF1ZXN0aW9uLXJpY2h0ZXh0Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9weXRob25qaXNodS5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIi5lbnRyeS1yZWFkbW9yZSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmVudHJ5LWNvbnRlbnQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyoua25vd2JhaWtlLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiI3JlYWQtbW9yZSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydC10eHQiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgIGRvY3VtZW50Lm9uY29udGV4dG1lbnUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9OwogICAgICAgICAgICAgICAgZG9jdW1lbnQub25rZXlkb3duID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZTsgfTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyDmioTooq3nq5nnm7TmjqXot7PovazliLDljp/mlofljbPlj68KICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyoucGlhbnNoZW4uY29tLyoiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIG5hbWU9InJlZmVycmVyIiBjb250ZW50PSJuZXZlciI+Jyk7CiAgICAgICAgICAgICAgICBsZXQgdXJsID0gJCgnI2dvdG9zb3VyY2UgYScpLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgICAgIGlmICh1cmwpIHsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIOaKhOiireermeebtOaOpei3s+i9rOWIsOWOn+aWh+WNs+WPrwogICAgICAgICAgICBtYXRjaDogWyIqOi8vKi55aWk2NjYuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIjdmlwUmVhZEFsbCIsICIuc2lkZWJhciJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGUtY29udGVudC1oZWlnaHQiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIG5hbWU9InJlZmVycmVyIiBjb250ZW50PSJuZXZlciI+Jyk7CiAgICAgICAgICAgICAgICBsZXQgdXJsID0gJCgnLk9wZW5Ub1VybCcpLmF0dHIoJ2RhdGEtaHJlZicpOwogICAgICAgICAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyoueGp4MTAwLmNuLyoiLCAiKjovL2RoZXh4LmNuLyoiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxtZXRhIG5hbWU9InJlZmVycmVyIiBjb250ZW50PSJuZXZlciI+Jyk7CgogICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGV4dE1ldGhvZCA9ICQuZm4udGV4dDsKICAgICAgICAgICAgICAgICQuZm4udGV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRleHRNZXRob2QuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmUgPSBvcmlnaW5hbFRleHRNZXRob2QuY2FsbCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gJCgnLnNvdXJjZV91cmwnKS50ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0ICYmICh0ZXh0LmluY2x1ZGVzKCJodHRwOi8vIikgfHwgdGV4dC5pbmNsdWRlcygiaHR0cHM6Ly8iKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IC8oaHR0cHM/OlwvXC9bXlxzXSspLzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0ZXh0Lm1hdGNoKHJlZ2V4KVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gJCgnLnNvdXJjZV91cmwnKS50ZXh0KCk7CiAgICAgICAgICAgICAgICBpZiAodGV4dCAmJiAodGV4dC5pbmNsdWRlcygiaHR0cDovLyIpIHx8IHRleHQuaW5jbHVkZXMoImh0dHBzOi8vIikpKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gLyhodHRwcz86XC9cL1teXHNdKykvOwogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB0ZXh0Lm1hdGNoKHJlZ2V4KVswXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRlc3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2NyaXB0VGFncyA9ICQoInNjcmlwdCIpOwogICAgICAgICAgICAgICAgICAgIHNjcmlwdFRhZ3MuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSAkKHRoaXMpLmF0dHIoInNyYyIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjICYmIHNyYy5pbmNsdWRlcygiP3NvdXJjZV91cmw9IikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7IHNvdXJjZV91cmwgfSA9IHBhcnNlVXJsKHNyYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlX3VybCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBzb3VyY2VfdXJsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSAkKCcjdmlwJykuZmluZCgnYScpLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICQoJyN2aXAnKS5maW5kKCdhJykuYXR0cignaHJlZicpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyouem91a2Fua2FuLmNvbS8qIl0sCiAgICAgICAgICAgIGpzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAkKCdoZWFkJykuYXBwZW5kKCc8bWV0YSBuYW1lPSJyZWZlcnJlciIgY29udGVudD0ibmV2ZXIiPicpOwogICAgICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gcXVlcnlTZWxlY3RvckluY2x1ZGVzVGV4dCgnYVtocmVmXj0iaHR0cCJdJywgJ+afpeeci+WFqOaWhycpOwogICAgICAgICAgICAgICAgaWYgKG5vZGVMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gbm9kZUxpc3RbMF0uaHJlZjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKi5oZXh1bi5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbImRpdi5zaG93QWxsIiwgImRpdi5ib3R0b21MYXllciJdLAogICAgICAgICAgICBleHBhbmQ6IFsiZGl2LmFydF9jb250ZXh0Qm94Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly8qLmJldGhlbWUubmV0LyoiXSwKICAgICAgICAgICAgaGlkZTogWyIjdmlwIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuYXJ0aWNsZUhlaWdodCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3Ljk1cG0uY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIucmVhZGFsbF9ib3giXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5yZWFkYWxsLWJvZHkiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy50YWtlZm90by5jbi8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLmNvbnRlbnQgLmFydGljbGUgLmFydGljbGUtdGV4dCAubG9hZCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGUtdGV4dCJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIGV4cGFuZDogWyIuY29udGVudCAuYXJ0aWNsZSAuYXJ0aWNsZS10ZXh0Il0sCiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cuYXV0b2hvdGtleS5jb20vKiJdLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29kZWJveCA+IHAgPiBhOmZpcnN0LWNoaWxkICsgOm50aC1jaGlsZCgyKScpOwogICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgICAgICAgICAgICBleHBhbmRDb2RlKGl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cuY3RmaW90LmNvbS8qIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsKICAgICAgICAgICAgICAgICIqL2dvLz91cmw9KiIsCiAgICAgICAgICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGxldCB7IHVybCB9ID0gcGFyc2VVcmwobm9kZS5ocmVmKTsKICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaHJlZiA9IGF0b2IodXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsICJfYmxhbmsiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyBodHRwczovL3dlaWJvLmNvbS9jbWJjaGluYQogICAgICAgICAgICBtYXRjaDogWyIqOi8vd2VpYm8uY29tL2NtYmNoaW5hKiIsICIqOi8vd2VpYm8uY29tL3UvKiJdLAogICAgICAgICAgICB3YWl0OiBbCiAgICAgICAgICAgICAgICBbInNwYW4uZXhwYW5kIiwgImNsaWNrIl0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyBodHRwczovL3dlaWJvLmNvbS90dGFydGljbGUvcC9zaG93P2lkPTIzMDk0MDQ4OTA0NDE2Njg0OTM2NDcKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3dlaWJvLmNvbS90dGFydGljbGUvcC9zaG93KiJdLAogICAgICAgICAgICBoaWRlOiBbIi5hcnRpY2FsX2FkZF9ib3giXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5XQl9lZGl0b3JfaWZyYW1lX25ldyJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKi5yc3RrLmNuLyoiLCAiKjovLyoudGFvZHVkdS5jYy8qIiwgIio6Ly8qLmRncnQuY24vKiIsICIqOi8vKi5leHliLmNuLyoiXSwKICAgICAgICAgICAgaGlkZTogWyJkaXYjdmlwIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuYXJ0aWNsZV9jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9iZXRoZW1lLm5ldC8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiZGl2I3ZpcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGVIZWlnaHQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL2Rldm5vdGUucHJvLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIucmVhZG1vcmUtYm94Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIucG9zdC1tYXNrIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly8qLmJ1Z3NjYW5lci5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIiNkaXZfcXJjb2RlX2NvbnRhaW5lciIsICIjdG9wLWhlYWRlciJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKnRpbnltaW5kLm5ldC5jbi8qIl0sCiAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7CiAgICAgICAgICAgICAgICAvLyDmiJbogIXlup/mjolET01Nb3VzZVNjcm9sbAogICAgICAgICAgICAgICAgdW5zYWZlV2luZG93LnZlcmlmeV9mbGFnID0gMTsKICAgICAgICAgICAgICAgIHVuc2FmZVdpbmRvdy5waG9uZV92ZXJpZnlfZmxhZyA9IDE7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5zYWZlV2luZG93LCAidmVyaWZ5X2ZsYWciLCB7CiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodW5zYWZlV2luZG93LCAicGhvbmVfdmVyaWZ5X2ZsYWciLCB7CiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vdmlldy5pbmV3cy5xcS5jb20vay8yMDIxMDYwOEEwNDVCRDAwCiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly92aWV3LmluZXdzLnFxLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiZGl2W2NsYXNzXj1zaG93LW1vcmVfb3V0ZXJdIiwgImRpdltjbGFzc149c2xpZGVyLXRvcC1iYXJfc2xpZGVyV3JhcHBlcl0iXSwKICAgICAgICAgICAgZXhwYW5kOiBbImRpdltjbGFzc149c2hvdy1tb3JlX2hlaWdodC1ub3QtZnVsbF0iXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgLy8gaHR0cHM6Ly93YXAuZ2FtZXJza3kuY29tL25ld3MvQ29udGVudC0xNTcxMjQ0Lmh0bWwKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLypnYW1lcnNreS5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIi5nc0FyZWFDb250ZXh0T3BlbiIsICIueW13Qm9vdERvd25sb2FkIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjZ3NBcmVhQ29udGV4dCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3LnFjYy5jb20vKiJdLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIio6Ly93d3cucWNjLmNvbS93ZWIvdHJhbnNmZXItbGluaz9saW5rPSoiLCAibGluayJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKi5jbnIuY24vKiJdLAogICAgICAgICAgICBoaWRlOiBbIiNyZWFkbW9yZSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI3Blcm55LW1haW4iXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy5uZ3VpLmNjLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIjdmlwIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjY29udGVudFdyYXBlciIsICIuYXJ0aWNsZV9jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9kZHJ2LmNuLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIjcmVhZC1tb3JlLXdyYXAiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIiNjb250YWluZXIiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyouZHh5LmNuLyoiXSwKICAgICAgICAgICAgaGlkZTogWyJkaXZbY2xhc3NePWNvbnRlbnRXcmFwQm90dG9tX10iXSwKICAgICAgICAgICAgZXhwYW5kOiBbImRpdltjbGFzc149Y29udGVudFdyYXBfXSJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3LnRvZmFjZWJvb2suY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIudG9waWMgLm1vcmUtYm94Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIudG9waWMiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyp3ZW5kYS5zby5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIiNzaG93LXJlc3QtZW50cnkiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIiNkZXQtY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKi5qcy1jb2RlLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiI3JlYWQtbW9yZS13cmFwIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjY29kZUNvbnRlbnQiLCAiI2NvbnRhaW5lciJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vKmhlaWRvbmcuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuZ2dib3giXSwKICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgICAgIC8vIOmYu+atoueJm+earueZo+W8ueahhgogICAgICAgICAgICAgICAgdW5zYWZlV2luZG93LnVzZXJfbG9naW4gPSB0cnVlOwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVuc2FmZVdpbmRvdywgInVzZXJfbG9naW4iLCB7CiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyouem9sLmNvbS5jbi8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLnVuZm9sZC1hcnRpY2xlLWJ0biJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGUtY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vM2cuMTYzLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLmJhY2tmbG93LWZsb2F0aW5nLmpzLW9wZW4tYXBwIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIOafkOS6m+mHh+mbhuacuue/u+W8lea1geermeeCuQogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3LjVheHh3LmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiI2d6aC1tYXNrIiwgIiNnemgtbW9kYWwiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL20uaGV4dW4uY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuYXJ0aWNsZS1vcGVuIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuYXJ0aWNsZSJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyB2YXIga2V5ID0gJ3JlYWQnICsgKG5ldyBEYXRlKS50b0pTT04oKS5zdWJzdHJpbmcoMCwgNyk7IGxvY2FsU3RvcmFnZQogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3LmphdmFzY3JpcHRjbi5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIi5yZWFkYWxsX2JveCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLm1hcmtkb3duLWJvZHkiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy5hbnF1YW5rZS5jb20vKiJdLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIio6Ly8qL291dExpbmtQYWdlLz90YXJnZXQ9KiIsICJ0YXJnZXQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovLyoudm92b3Nvc28uY29tLyoiXSwKICAgICAgICAgICAgZGlyZWN0TGluazogWwogICAgICAgICAgICAgICAgIiovanVtcC5odG1sP3VybD0qIiwKICAgICAgICAgICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHsgdXJsIH0gPSBwYXJzZVVybChub2RlLmhyZWYpOwogICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ocmVmID0gYXRvYih1cmwpOwogICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgidGFyZ2V0IiwgIl9ibGFuayIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9pdHBjYi5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIiNyZWFkLW1vcmUtd3JhcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI2NvbnRhaW5lciJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3Lmxpc2hpeGluemhpLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiI3Nob3didG4iXSwKICAgICAgICAgICAgZXhwYW5kOiBbIiNlbmR0ZXh0Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly8qLmFsaTIxMy5uZXQvKiJdLAogICAgICAgICAgICBoaWRlOiBbIi51bmZvbGQtZmllbGQudW5mb2xkLWZpZWxkLWRvd25sb2FkIiwgIi5yZWFkLWFsbC1jb24iLCAiLmRvd25sb2FkLXRleHQiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5kZXRhaWxfY29udGVudCIsICIjQ29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vbS55ZXppY2MuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuZnVsbHRleHQtYnV0dG9uIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjYXJ0aWNsZS1ib2R5ID4gLndyYXAiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3N0YWNrb29tLmNvbS8qIiwgIio6Ly93d3cuY29kZXByai5jb20vKiJdLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgaWYgKCEkLmNvb2tpZSgib3BlbmlkIikgfHwgISQuY29va2llKCJsb2dpbkNvZGUiKSkgewogICAgICAgICAgICAgICAgICAgICQuY29va2llKCJvcGVuaWQiLCAiMSIsIHsgZXhwaXJlczogNyB9KTsKICAgICAgICAgICAgICAgICAgICAkLmNvb2tpZSgibG9naW5Db2RlIiwgIjEiLCB7IGV4cGlyZXM6IDcgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cueXVucWlzaGkubmV0LyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuY2tnZCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLnR3X2NvbnRhaW4iXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL2NhcmQud2VpYm8uY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuZi1hcnQtb3B0Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuZi1hcnQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL20ud2VpYm8uY24vdS8qIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovL3dlaWJvLmNuL3NpbmF1cmw/dT0qIiwgInUiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgLy8gaHR0cHM6Ly9tLnNvaHUuY29tL2EvNDQyOTA5MDk2XzEyMDQ1OTAyMi8/cHZpZD0wMDAxMTVfM3dfYQogICAgICAgICAgICBtYXRjaDogIio6Ly8qLnNvaHUuY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5sb29rYWxsLWJveCJdLAogICAgICAgICAgICBjc3M6IGAKICAgICAgICAgICAgICAgIC5oaWRkZW4tY29udGVudC5oaWRlLC5jb250cm9sLWhpZGUgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGAsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL20uZG93bnhpYS5jb20vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiYS5zbGlkZS1idG4iXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5jaGFwdGVyLWNvbnQiXSwKICAgICAgICAgICAgY3NzOiBgCiAgICAgICAgICAgICAgICAuY2hhcHRlci1jb250LnNuYmcgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB1bnNldCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBgLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vc3VwcG9ydC5xcS5jb20vKiJdLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIio6Ly9zdXBwb3J0LnFxLmNvbS8qL2xpbmstanVtcD9qdW1wPSoiLCAianVtcCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3Lml0YmFva3UuY24vKiJdLAogICAgICAgICAgICBoaWRlOiBbIi5xYS1jb250ZW50LW1vcmUiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIiNxYS1jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3Vrb25nLnRvdXRpYW8uY29tL3F1ZXN0aW9uLzY3MTI3NTcxODMxMTg4MzU5NzIvCiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly8qLnRvdXRpYW8uY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyJhLmotZXhwYW5kLXNob3dmdWxsLmV4cGFuZC1ib3R0b20iLCAiLm0tc2hhcmUtYW5zd2VyIC5uZWNrIC5tYXNrIiwgIi5mbG9hdC1vcGVuYXBwIiwgIi5leHBhbmQtY29udGFpbmVyIC5leHBhbmQtYnV0dG9uLXdyYXBwZXIiXSwKICAgICAgICAgICAgZXhwYW5kOiBbImRpdi5hbnN3ZXItdGV4dC1mdWxsIiwgImFydGljbGUuY29udGVudCIsICIuZXhwYW5kLWNvbnRhaW5lci5mb2xkZWQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy5iaWxpYmlsaS5jb20vKiJdLAogICAgICAgICAgICBoaWRlOiBbIi5oNS1kb3dubG9hZC1iYXIiLCAiLnJlYWQtYXJ0aWNsZS1ib3ggLnJlYWQtbW9yZSAuYXJyb3ctY250Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIucmVhZC1hcnRpY2xlLWJveC5saW1pdCJdLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgLy8g5Y675o6J5aSN5Yi255qE5pe25YCZ5oC75piv5bim5LiK55qE5bC+5be0CiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcnRpY2xlLWNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBub2RlLm9uY29weSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIC8vIHsgICDljrvmjonov5nkuKrlip/og73vvIznm67liY3nnIvotbfmnaXnlKjlpITkuI3lpKcKICAgICAgICAvLyAgICAgbWF0Y2g6IFsiKjovL20uYmlsaWJpbGkuY29tL3ZpZGVvLyoiXSwKICAgICAgICAvLyAgICAgaGlkZTogWyIubGF1bmNoLWFwcC1idG4iXSwKICAgICAgICAvLyB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL2xkMjQ2LmNvbS8qIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovLypsZDI0Ni5jb20vZm9yd2FyZD9nb3RvPSoiLCAiZ290byJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vc2VnbWVudGZhdWx0LmNvbS8qIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsKICAgICAgICAgICAgICAgICIqOi8vbGluay5zZWdtZW50ZmF1bHQuY29tLz9lbmM9KiIsCiAgICAgICAgICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgICAgICAgICAgIC8vIHNlZ21lbnRmYXVsdOi/meS4nOilv+S5n+WOu+WKoOWvhuS6hj8KICAgICAgICAgICAgICAgICAgICBpZiAoL15odHRwcz86XC9cLy8udGVzdChub2RlLmlubmVyVGV4dCkgJiYgIW5vZGUuaW5uZXJUZXh0LmVuZHNXaXRoKCIuLi4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICBub2RlLmhyZWYgPSBub2RlLmlubmVyVGV4dDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyBodHRwczovL2NuLmJpbmcuY29tL3NlYXJjaD9mb3JtPU1PWlNCUiZwYz1NT1pJJnE9R0lUX0NMRUFOX0ZMQUdTCiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9jbi5iaW5nLmNvbS9zZWFyY2g/KiJdLAogICAgICAgICAgICBiaW5kQ2xpY2s6IFsKICAgICAgICAgICAgICAgICJhW2hyZWZePWh0dHBdIiwKICAgICAgICAgICAgICAgIChub2RlLCBlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudGFyZ2V0ID09ICJfYmxhbmsiICYmICFub2RlLmhvc3RuYW1lLmluY2x1ZGVzKCJiaW5nLmNvbSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy5sb2dvbmV3cy5jbi8qIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovL2xpbmsubG9nb25ld3MuY24vP3VybD0qIiwgInVybCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyBodHRwczovL20ubWVpc2hpY2hpbmEuY29tL3JlY2lwZS82OTQ3Ny8KICAgICAgICAgICAgbWF0Y2g6IFsiKjovL20ubWVpc2hpY2hpbmEuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuc2hvd21vcmVfcGFnZV9hIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjc2hvd21vcmVhcnRpY2xlIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cuc2FuemhpbWEuY29tLyoiXSwKICAgICAgICAgICAgZGlyZWN0TGluazogWwogICAgICAgICAgICAgICAgIio6Ly93d3cuc2FuemhpbWEuY29tL2p1bXAuaHRtbD91cmw9KiIsCiAgICAgICAgICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGxldCB7IHVybCB9ID0gcGFyc2VVcmwobm9kZS5ocmVmKTsKICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaHJlZiA9IGF0b2IodXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoInRhcmdldCIsICJfYmxhbmsiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAvLyBodHRwczovL3d3dy54aW1hbGF5YS5jb20vc291bmQvMzU3MDkzODU4CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly93d3cueGltYWxheWEuY29tLyoiLCAiKjovL20ueGltYWxheWEuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIubW9yZS1pbnRyby13cmFwcGVyLmNZXyIsICIuc3RyZXRjaC1ib3ggLm1hc2suaWJfIiwgImEuaW5pdC1jb2RlLnNjaGVtYS1saW5rIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuZHJhZnQuX0ZjLCAuc291bmQtaW50cm8gLmludHJvLl9GYyIsICIuc3RyZXRjaC1ib3guaWJfIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vYXV0by5pZmVuZy5jb20vYy84RUs2UlFiRDVVMgogICAgICAgICAgICAvLyBodHRwczovL2kuaWZlbmcuY29tL2MvOEVKb1FodlNrVDMKICAgICAgICAgICAgLy8gaHR0cHM6Ly9paG91c2UuaWZlbmcuY29tL25ld3MvMjAyMl8wM18xMi01NTI2MzA0NF8wLnNodG1sCiAgICAgICAgICAgIG1hdGNoOiAiKjovLyouaWZlbmcuY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbInNlY3Rpb25bY2xhc3NePSdib3R0b21TbGlkZS0nXSIsICJoZWFkZXJbY2xhc3NePSdoZWFkZXJJbi0nXSIsICJkaXZbY2xhc3NePSdjYWxsdXBCdG4tJ10iLCAiZGl2W2NsYXNzXj0nbW9yZS0nXSIsICJkaXZbY2xhc3NePSd0aXAtJ10iLCAiZGl2LnNob3dhbGwiLCAiZGl2W2NsYXNzXj0nbW9yZS0xLSddIiwgImRpdltjbGFzc149J2JvdHRvbV9ib3gtJ10gPiBkaXZbY2xhc3NePSdib3gtJ10iLCAiZGl2W2NsYXNzXj0nY29udGFpbmVyQm94LSddID4gIGRpdltjbGFzc149J3NoYWRvdy0nXSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiZGl2W2NsYXNzXj0nbWFpbl9jb250ZW50LSddIiwgInNlY3Rpb24uYXJ0aWNsZSIsICJkaXZbY2xhc3NePSdjb250YWluZXJCb3gtJ10iXSwKICAgICAgICAgICAgY3NzOiAiI3Jvb3Q+ZGl2W2NsYXNzXj0nbWFpbi0nXSB7bWFyZ2luLWJvdHRvbTogdW5zZXQgIWltcG9ydGFudDt9IiwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgLy8gaHR0cHM6Ly90aWViYS5iYWlkdS5jb20vcC83NDEyOTYyMjk2CiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnRpZWJhLmNvbS9wLzc3NDU0NzQzNzEKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3RpZWJhLmJhaWR1LmNvbS8qIiwgIio6Ly93d3cudGllYmEuY29tLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIuYXBwUHJvbW90ZSIsICIuYXBwQm90dG9tUHJvbW90ZSIsICIuZnJzX2Rhb2xpdV9mb3JfYXBwIiwgIi5wYl9jdXRfaG90X3JlY29tbWVuZCIsICIuZmF0aGVyLWN1dC1kYW9saXUtbm9ybWFsLWJveCIsICIuZmF0aGVyLWN1dC1kYW9saXUtZnJvbS10b3V0aWFvLWJveCJdLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbCiAgICAgICAgICAgICAgICAiKjovL2p1bXAqLmJkaW1nLmNvbS9zYWZlY2hlY2svaW5kZXg/dXJsPSoiLAogICAgICAgICAgICAgICAgKG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoL15odHRwcz86XC9cLy8udGVzdChub2RlLmlubmVyVGV4dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ocmVmID0gbm9kZS5pbm5lclRleHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vbWFpbC5xcS5jb20vKiIsCiAgICAgICAgICAgIGJpbmRDbGljazogWwogICAgICAgICAgICAgICAgImFbaHJlZl49aHR0cF0iLAogICAgICAgICAgICAgICAgKG5vZGUsIGUpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50YXJnZXQgPT0gIl9ibGFuayIgJiYgIW5vZGUuaHJlZi5pbmNsdWRlcygibWFpbC5xcS5jb20iKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZGV2ZWxvcGVyL2FydGljbGUvMTk1MzU1MgogICAgICAgICAgICBtYXRjaDogIio6Ly9jbG91ZC50ZW5jZW50LmNvbS8qIiwKICAgICAgICAgICAgaGlkZTogWyIuY2RjLWV4cGFuZC1hcmVhX190b2dnbGUiLCAiLmNvbS1tYXJrZG93bi1jb2xscGFzZS1oaWRlIC5jb20tbWFya2Rvd24tY29sbHBhc2UtdG9nZ2xlIiwgIi5KLWhlYWRlckFkdmVydGlzaW5nIiwgIi5jLW5hdi1hZHZlcnRpc2luZyJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmNkYy1leHBhbmQtYXJlYV9fbWFpbiIsICIuY29tLW1hcmtkb3duLWNvbGxwYXNlLWhpZGUgLmNvbS1tYXJrZG93bi1jb2xscGFzZS1tYWluIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFsaXl1bi5jb20vYXJ0aWNsZS84NzUxNzMKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vZGV2ZWxvcGVyLmFsaXl1bi5jb20vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiI2J0bi1yZWFkbW9yZSIsICIuYXJ0aWNsZS1oaWRlLWJveCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGUtaGlkZS1jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuMzYwZG9jLmNvbS9jb250ZW50LzIwLzA4MDUvMDUvNzEwNTcyNzJfOTI4NTc4NzgyLnNodG1sCiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy4zNjBkb2MuY29tL2NvbnRlbnQvKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmFydGljbGVfc2hvd2FsbCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI2FydGljbGVjb250ZW50Il0sCiAgICAgICAgICAgIGJpbmRDbGljazogWwogICAgICAgICAgICAgICAgImFbaHJlZl49aHR0cF0iLAogICAgICAgICAgICAgICAgKG5vZGUsIGUpID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50YXJnZXQgPT0gIl9ibGFuayIgJiYgIW5vZGUuaG9zdG5hbWUuaW5jbHVkZXMoIjM2MGRvYy5jb20iKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lml0ZXllLmNvbS9ibG9nL2FnaWxlLWJveS0yNzQzNjYKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vd3d3Lml0ZXllLmNvbS9ibG9nLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5oaWRlLWFydGljbGUtYm94Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjYmxvZ19jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy40MjNkb3duLmNvbS8qIiwKICAgICAgICAgICAgZGlyZWN0TGluazogWwogICAgICAgICAgICAgICAgIio6Ly93d3cuNDIzZG93bi5jb20vZ28ucGhwP3VybD0qIiwKICAgICAgICAgICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHsgdXJsIH0gPSBwYXJzZVVybChub2RlLmhyZWYpOwogICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ocmVmID0gYXRvYih1cmwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3Lml0ZGFhbi5jb20vYmxvZy8yMDE5LzA4LzA2LzFiNDA3ZWE2N2MzM2RmMWM2MjVhYjY1NzQ0M2NjZDQ1Lmh0bWwKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vd3d3Lml0ZGFhbi5jb20vKiIsCiAgICAgICAgICAgIGpzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoISQuY29va2llKCJvcGVuaWQiKSB8fCAhJC5jb29raWUoImxvZ2luQ29kZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgJC5jb29raWUoIm9wZW5pZCIsICIxIiwgeyBleHBpcmVzOiA3IH0pOwogICAgICAgICAgICAgICAgICAgICQuY29va2llKCJsb2dpbkNvZGUiLCAiMSIsIHsgZXhwaXJlczogNyB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkLmNvb2tpZSgidmlwdXNlciIpICE9ICIxIikgewogICAgICAgICAgICAgICAgICAgICQuY29va2llKCJ2aXB1c2VyIiwgIjEiLCB7IGV4cGlyZXM6IDcgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsKICAgICAgICAgICAgICAgICIqOi8vd3d3Lml0ZGFhbi5jb20vbGluay8qIiwKICAgICAgICAgICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IG5vZGUuaHJlZi5zcGxpdCgiL2xpbmsvIiwgMilbMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgICAgICAgICAgICAgICBub2RlLmhyZWYgPSBhdG9iKHVybCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vc2hvdy5ib29rbWFya2VhcnRoLmNvbS92aWV3LyoiLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJwLmxpbmsiKTsKICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShub2RlLmlubmVyVGV4dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy5zaGFkdWl6aS5jb20vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmNvbnRlbnQtY29udGFpbmVyLW9wZW4tYnRuIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuY29udGVudC1zZWN0aW9uLmNvbnRlbnQtc2VjdGlvbi1jb250YWluZXIiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vd3d3LmNoaW5hei5jb20vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmNvbnRlbnRQYWRkaW5nIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjYXJ0aWNsZS1jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy50aWFueWFuY2hhLmNvbS8qIiwKICAgICAgICAgICAgYmluZENsaWNrOiBbCiAgICAgICAgICAgICAgICAiYVtocmVmXj1odHRwXSIsCiAgICAgICAgICAgICAgICAobm9kZSwgZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnRhcmdldCA9PSAiX2JsYW5rIikgewogICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovL3d3dy50aWFueWFuY2hhLmNvbS9zZWN1cml0eT90YXJnZXQ9KiIsICJ0YXJnZXQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vZ2l0ZWUuY29tLyoiLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIio6Ly9naXRlZS5jb20vbGluaz90YXJnZXQ9KiIsICJ0YXJnZXQiXSwKICAgICAgICB9LAogICAgICAgIC8vIHsKICAgICAgICAvLyAgICAgLy8g55m+5bqm5pCc57Si56e75Yqo56uv77yM6K+l5Yqf6IO96L+Y5pyJYnVn77yM5YWN6YeN5a6a5ZCR6Lez6L2s5Y675o6J77yMaHR0cHM6Ly9naXRodWIuY29tL1ZpQ3JhY2svdGVtcGVybW9ua2V5LXNjcmlwdC9pc3N1ZXMvMyNpc3N1ZWNvbW1lbnQtMTUwNzM1Nzc0NgogICAgICAgIC8vICAgICBtYXRjaDogIio6Ly9tLmJhaWR1LmNvbS8qIiwKICAgICAgICAvLyAgICAgYmluZENsaWNrOiBbCiAgICAgICAgLy8gICAgICAgICAiZGl2LnJlc3VsdCIsCiAgICAgICAgLy8gICAgICAgICAobm9kZSkgPT4gewogICAgICAgIC8vICAgICAgICAgICAgIGlmIChub2RlLmRhdGFzZXQubG9nKSB7CiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGxldCBsaW5rID0gSlNPTi5wYXJzZShub2RlLmRhdGFzZXQubG9nKS5tdTsKICAgICAgICAvLyAgICAgICAgICAgICAgICAgbm9kZS5xdWVyeVNlbGVjdG9yKCJhcnRpY2xlIikuc2V0QXR0cmlidXRlKCJybC1saW5rLWhyZWYiLCBsaW5rKTsKICAgICAgICAvLyAgICAgICAgICAgICB9CiAgICAgICAgLy8gICAgICAgICB9LAogICAgICAgIC8vICAgICBdLAogICAgICAgIC8vIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93d3cud3hubWguY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5oaWRlLWFydGljbGUtYm94Il0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjbWVzc2FnZV9jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovLyouZG91YmFuLmNvbS8qIiwKICAgICAgICAgICAgZGlyZWN0TGluazogWyIqLmRvdWJhbi5jb20vbGluazIvP3VybD0qIiwgInVybCJdLAogICAgICAgICAgICBoaWRlOiBbIi5vaWEtcmVhZGFsbCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLm5vdGUtY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93YXAuc29nb3UuY29tL3dlYi8qIiwKICAgICAgICAgICAgZGlyZWN0TGluazogWyIqOi8vd2FwLnNvZ291LmNvbS93ZWIvaWQ9KiZ1cmw9KiIsICJ1cmwiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vbS5zby5jb20vcz9xPSoiLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIiouc28uY29tL2p1bXA/dT0qIiwgInUiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vaXN3Ym0uY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIiNyZWFkLW1vcmUtd3JhcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI2NvbnRhaW5lciJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93d3cub3NjaGluYS5uZXQvKiIsCiAgICAgICAgICAgIGhpZGU6IFsiZGl2LmNvbGxhcHNlLWJhciJdLAogICAgICAgICAgICBleHBhbmQ6IFsiZGl2LmFydGljbGUtZGV0YWlsIl0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovL3d3dy5vc2NoaW5hLm5ldC9hY3Rpb24vR29Ub0xpbms/dXJsPSoiLCAidXJsIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL2p1ZWppbi5jbi9wb3N0LyoiLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIipsaW5rLmp1ZWppbi5jbi8/dGFyZ2V0PSoiLCAidGFyZ2V0Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy4zaDMuY29tL3NvZnQvKiIsCiAgICAgICAgICAgIGhpZGU6IFsiI3Nob3dtb3JlIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjY3RleHQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vZmluYW5jZS5zaW5hLmNvbS5jbi8qIiwKICAgICAgICAgICAgaGlkZTogWyIjc2luYS1jb250MDAwIiwgIiNzaW5hLXBhZ2VzLXUiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vKi5weS5jbi9jb2RlLyoiLAogICAgICAgICAgICBzdGFydDogKCkgPT4gewogICAgICAgICAgICAgICAgdW5zYWZlV2luZG93LklzTGV2ZWxEYXRlID0gMTsKICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bnNhZmVXaW5kb3csICJJc0xldmVsRGF0ZSIsIHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVuc2FmZVdpbmRvdywgImlzX2xvZ2luIiwgewogICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL20uMzZrci5jb20vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmtyLW1vYmlsZS1nb2FwcCIsICIuYXJ0aWNsZS1nb2FwcCIsICIuZmxvYXQtYXBwLWJ1dHRvbi13cnAiLCAiLmFydGljbGUtdG9wLXN3aXBlci1nb2FwcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI2JvZHktY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vbS5pbW9vYy5jb20vKiIsICIqOi8vd3d3Lmltb29jLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLndlbmRhLW1vcmUtd3JhcC5qcy13ZW5kYS1tb3JlIiwgIiNqcy1hcHBsb2FkIiwgIi5qcy1mb290ZXItYXBwbG9hZCIsICIuZGV0YWlsLWNvbnRlbnQubG9uZy1jb250ZW50IC5zaG93TW9yZSIsICIuaGlkZS1hcnRpY2VsLWJveCIsICIuanMtc2hvdy1yZXBseS1idG4uaGlkZS1hbnN3ZXItbW9yZWJ0biJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI3dhcF93ZW5kYV9kZXRhaWwiLCAiI3dlbmRhX2NvbnRlbnQiLCAiLmRldGFpbC1jb250ZW50LmxvbmctY29udGVudCIsICIjanMtcWEtd2VuZGEiLCAiLmFuc3dlci1jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3podWFubGFuLnpoaWh1LmNvbS9wLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5PcGVuSW5BcHBCdXR0b24iXSwKICAgICAgICAgICAgY3NzOiBgCiAgICAgICAgICAgICAgICBbY2xhc3NePSJjc3MtIl1baHJlZl17CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgYCwKICAgICAgICAgICAgZGlyZWN0TGluazogWyIqbGluay56aGlodS5jb20vP3RhcmdldD0qIiwgInRhcmdldCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93d3cuemhpaHUuY29tL3F1ZXN0aW9uLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5PcGVuSW5BcHBCdXR0b24iLCAiLm9wZW5JbkFwcCIsICIuRG93bmxvYWRHdWlkZSIsICIuUGMtZmVlZEFkLWNvbnRhaW5lciIsICIuTW9iaWxlQXBwSGVhZGVyLWRvd25sb2FkTGluayIsICIuQ29udGVudEl0ZW0tZXhwYW5kQnV0dG9uIiwgIi5BZEJlbG93TW9yZUFuc3dlcnMiLCAiLk1CYW5uZXJBZCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLlJpY2hDb250ZW50LWlubmVyLS1jb2xsYXBzZWQiLCAiLlJpY2hDb250ZW50LWlubmVyIl0sCiAgICAgICAgICAgIHdhaXQ6IFsKICAgICAgICAgICAgICAgIFsiLk1vZGFsRXhwLW1vZGFsU2hvdyIsIChub2RlKSA9PiAoKG5vZGUucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiKSwgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJNb2RhbFdyYXAtYm9keSIpKV0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgIi5pcy1jb2xsYXBzZWQiLAogICAgICAgICAgICAgICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY29sbGFwc2VkIik7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKmxpbmsuemhpaHUuY29tLz90YXJnZXQ9KiIsICJ0YXJnZXQiXSwKICAgICAgICAgICAgY3NzOiBgCiAgICAgICAgICAgICAgICAuUmljaENvbnRlbnQtLXVuZXNjYXBhYmxlLmlzLWNvbGxhcHNlZCAuUmljaENvbnRlbnQtaW5uZXIgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtbWFzay1pbWFnZTogdW5zZXQgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICBtYXNrLWltYWdlOiB1bnNldCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLlJpY2hDb250ZW50LmlzLWNvbGxhcHNlZCB7CiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiB1bnNldCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBgLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93d3cuY25iZXRhLmNvbS9hcnRpY2xlcy8qIiwKICAgICAgICAgICAgaGlkZTogWyJkaXZbc3R5bGU9J2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDtwb3NpdGlvbjpmaXhlZDtib3R0b206MDttYXJnaW4tdG9wOjEwcHg7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNjNDQ7Y29sb3I6I2ZmZjtmb250LXNpemU6MTVweDt6LWluZGV4Ojk5OTk5J10iXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8veHcucXEuY29tL2Ntc2lkLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5jb2xsYXBzZVdyYXBwZXIiLCAiLnJlZGJhZy5pdGVtIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjYXJ0aWNsZV9ib2R5Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8veHcucXEuY29tL2FtcGh0bWwvMjAyMjAyMjJBMDNaRkYwMAogICAgICAgICAgICBtYXRjaDogIio6Ly94dy5xcS5jb20vYW1waHRtbC8qIiwKICAgICAgICAgICAgaGlkZTogWyJkaXYuY3QtdW5mb2xkIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuYXJ0aWNsZS1tYWluLmZvbGQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8veHVlZGluZ21pYW8uY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIiNyZWFkLW1vcmUtd3JhcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiI21haW4tY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly9ibG9nLjUxY3RvLmNvbS8qIiwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgJCgiLmNvcHlfYnRuIikucmVtb3ZlQ2xhc3MoImRpc2FibGUiKTsKICAgICAgICAgICAgICAgICAgICAkKCIuY29weV9idG4iKS50ZXh0KCLlhY3nmbvlvZXlpI3liLYiKTsKICAgICAgICAgICAgICAgICAgICAkKCJib2R5IikKICAgICAgICAgICAgICAgICAgICAgICAgLm9mZigiY2xpY2suY29weV9idG4iKQogICAgICAgICAgICAgICAgICAgICAgICAub24oImNsaWNrIiwgIi5jb3B5X2J0biIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gJCh0aGlzKS5wYXJlbnQoIi5obGpzLWN0byIpLmZpbmQoInByZSIpLmZpbmQoIi5sYW5ndWFnZS0iKVswXS50ZXh0Q29udGVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkodGV4dCkudGhlbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRleHQoIuW3suWkjeWItiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRleHQoIuWFjeeZu+W9leWkjeWItiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnRleHQoIuWkjeWItuWksei0pToiICsgZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMudGV4dCgi5YWN55m75b2V5aSN5Yi2Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3dhcC5wZW9wbGVhcHAuY29tL2FydGljbGUvKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLnJlYWQtbW9yZSJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydGljbGUtd3JhcHBlci5oYXMtbW9yZS1oaWdoIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL2JhaWtlLmJhaWR1LmNvbS9pdGVtLyoiLAogICAgICAgICAgICB3YWl0OiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgLy8g6ZyA6KaB5b6q546vPwogICAgICAgICAgICAgICAgICAgICIueXgtbG9hZC1tb3JlLWlubmVyLkoteXgtbG9hZC1tb3JlQ29udGVudCIsCiAgICAgICAgICAgICAgICAgICAgKG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgidGFwIikpOwogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWlfcmVmcmVzaF9kb3duIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vbS5qYjUxLmNjLyoiLCAiKjovL3d3dy5qYjUxLmNjLyoiXSwKICAgICAgICAgICAgaGlkZTogWyIjcmVhZC1tb3JlLXdyYXAiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIiNjb250YWluZXIiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL3d3dy55aWlkaWFuLmNvbS8qIiwgIio6Ly95aWlkaWFuLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiI3JlYWQtbW9yZS13cmFwIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjeUFydGljbGUiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vYmJzLmVsZWNmYW5zLmNvbS9tLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5jb25Nb3JlIiwgIi5sb2dpbi1yZWctZml4ZWQiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5wb3N0TGlzdENvbiJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vd3d3LmVsZWNmYW5zLmNvbS8qIiwgIio6Ly9tLmVsZWNmYW5zLmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLnNlZUhpZGVfbmV3X2xvZ2luIiwgIi5vcGVuX2FwcC5vcGVuX2FwcF9maXhlZCIsICIubG9naW4tcmVnLWZpeGVkIiwgIi5zZWVIaWRlIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuYXJ0aWNsZV9jb250ZW50IiwgIi5zaW1kaXRvci1ib2R5Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy5iYW5kYmJzLmNuL3RocmVhZHMvKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmJiQ29kZUJsb2NrLWV4cGFuZExpbmsuanMtZXhwYW5kTGluayJdLAogICAgICAgICAgICB3YWl0OiBbWyIuanMtZXhwYW5kV2F0Y2g6bm90KC5pcy1leHBhbmRlZCkiLCAobm9kZSkgPT4gbm9kZS5jbGFzc0xpc3QuYWRkKCJpcy1leHBhbmRlZCIpXV0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL2NoZWppYWhhby5tLmF1dG9ob21lLmNvbS5jbi9pbmZvLyoiLAogICAgICAgICAgICBoaWRlOiBbIiNjb250aW51ZV9yZWFkaW5nIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIubWFqb3ItbG9uZy1kZXRhaWxzIl0sCiAgICAgICAgICAgIHdhaXQ6IFtbIi5wZ2MtZGV0YWlscyAuZm4taGlkZSIsIChub2RlKSA9PiBub2RlLmNsYXNzTGlzdC5yZW1vdmUoImZuLWhpZGUiKV1dLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly93d3cuYmp0emRienouY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5wYy1yZXF1ZXN0LWJ0biIsICIubWItcmVxdWVzdC1idG4iXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5kZXRhaWwtY29udGVudC1kZXNjLXNob3ciXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vbS4yMWppbmdqaS5jb20vYXJ0aWNsZS8qIiwKICAgICAgICAgICAgaGlkZTogWyIuY29udGVudCAubWFzayJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLnR4dENvbnRlbnQiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgLy8gaHR0cHM6Ly96aGlkYW8uYmFpZHUuY29tL3F1ZXN0aW9uLzQyMzI3NTI2My5odG1sCiAgICAgICAgICAgIG1hdGNoOiAiKjovL3poaWRhby5iYWlkdS5jb20vcXVlc3Rpb24vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLnctZGV0YWlsLWRpc3BsYXktYnRuLXRleHQiLCAiLndndC1iZXN0LW1hc2siLCAiLndndC1hbnN3ZXJzLW1hc2siLCAiLndndC1xdWVzdGlvbi1kZXNjLWFjdGlvbiIsICIudy1yZXBseS10ZXh0IC51bmZvbGQiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi53LWRldGFpbC1jb250YWluZXIudy1kZXRhaWwtaW5kZXgiLCAiZGl2W2lkXj1iZXN0LWNvbnRlbnQtXSIsICJkaXZbaWRePWFuc3dlci1jb250ZW50LV0iLCAiLndndC1xdWVzdGlvbi1kZXNjLWlubmVyIiwgIi53LXJlcGx5LXRleHQiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgIGxldCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNob3ctYW5zd2VyLWhpZGUiKTsKICAgICAgICAgICAgICAgIGlmIChlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiY2xpY2siKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL2hhb2thbi5iYWlkdS5jb20vdioiLAogICAgICAgICAgICBoaWRlOiBbIi5zaGFyZS1vcmlnaW4ud3gtc2hhcmUtbGF1bmNoIiwgIi5wbGF5ZXItcGF1c2UtY29kZS1ib3R0b20tdGV4dCIsICIucGxheWVyLXBhdXNlLWNvZGUtaW5uZXIiXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vd3d3Lnh6NTc3LmNvbS8qIiwKICAgICAgICAgICAgaGlkZTogWyIuYXJ0aWNsZS1jb250ZW50LWJvZHktbW9yZTEiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5jb24yIl0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy5pdDEzNTIuY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5hcmMtYm9keS1tYWluLW1vcmUiXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5hcmMtYm9keS1tYWluIl0sCiAgICAgICAgICAgIGpzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAkLmNvb2tpZSgib2xkdXNlciIsICIxIiwgewogICAgICAgICAgICAgICAgICAgIGRvbWFpbjogIml0MTM1Mi5jb20iLAogICAgICAgICAgICAgICAgICAgIGV4cGlyZXM6IDE1MDAsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vZy5wY29ubGluZS5jb20uY24vKiIsCiAgICAgICAgICAgIGhpZGU6IFsiLmJ0bkZvckFwcE9wZW5BIiwgIi5idG5Gb3JBcHBPcGVuSW1nIiwgIi5hZGRfYXJ0aWxjZV9oYW5kbGUiLCAiLldha2VVcHRvcCJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLmFydC1jb250ZW50Il0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG1hdGNoOiAiKjovLzN3Lmh1YW5xaXUuY29tLyoiLAogICAgICAgICAgICBoaWRlOiBbIiNtb3JlIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjY29udGVudCJdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogWyIqOi8vbS5odWFucWl1LmNvbS8qIl0sCiAgICAgICAgICAgIGhpZGU6IFsiLnVuZm9sZC1idG4iXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5hcnRpY2xlLWNvbnRlbnQiLCAiLmFydGljbGUgLmNvbnRlbnQiXSwKICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLl9hdHRhY2hTaGFkb3cgPSBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3c7CiAgICAgICAgICAgICAgICBFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hTaGFkb3cgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IGNzcyA9IGAKICAgICAgICAgICAgICAgICAgICAudW5mb2xkLWJ0bgogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC5hcnRpY2xlLWNvbnRlbnQsIC5hcnRpY2xlIC5jb250ZW50CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4LWhlaWdodDogdW5zZXQgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IHVuc2V0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogdW5zZXQgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYDsKICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgICAgICAgICAgICAgIHN0eWxlLnR5cGUgPSAidGV4dC9jc3MiOwogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmlubmVySFRNTCA9IGNzczsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmlubmVyVGV4dCA9IGNzczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbGV0IHNoYWRvdyA9IHRoaXMuX2F0dGFjaFNoYWRvdyh7IG1vZGU6ICJvcGVuIiB9KTsKICAgICAgICAgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3c7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICB3YWl0OiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgIi51bmZvbGQtYnRuIiwKICAgICAgICAgICAgICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJjbGljayIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgidGFwIikpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly9pa25vdy5sZW5vdm8uY29tLmNuLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5jb3ZlclFSQ29kZSJdLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjYW5RUkNvZGUiLCAiMSIpOwogICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCJzY3JvbGwudW5hYmxlIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvZTdkYzQxYjZlYTU0CiAgICAgICAgICAgIG1hdGNoOiAiKjovL3d3dy5qaWFuc2h1LmNvbS9wLyoiLAogICAgICAgICAgICBoaWRlOiBbIi5ub3RlLWdyYWNlZnVsLWJ1dHRvbiBwIiwgIi5kb3dubG9hZC1hcHAtZ3VpZGFuY2UiLCAiLmNhbGwtYXBwLWJ0biIsICIjamlhbnNodS1oZWFkZXIiLCAiI25vdGUtc2hvdyAuY29udGVudCAuc2hvdy1jb250ZW50LWZyZWUgLmNvbGxhcHNlLXRpcHMiLCAiLmRvd25sb2FkIiwgIi5ub3RlLWNvbW1lbnQtYWJvdmUtYWQtd3JhcCIsICIuY2xvc2UtY29sbGFwc2UtYnRuIiwgIi5vcGVuLWFwcC1idG4iLCAiLmFwcC1vcGVuIiwgIiNndWFuZ3R1aSIsICIjZml4ZWQtYWQtY29udGFpbmVyIiwgIi5mdWJpYW8tZGlhbG9nIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIjbm90ZS1zaG93IC5jb250ZW50IC5zaG93LWNvbnRlbnQtZnJlZSAuY29sbGFwc2UtZnJlZS1jb250ZW50Il0sCiAgICAgICAgICAgIGRpcmVjdExpbms6IFsiKjovL2xpbmsuamlhbnNodS5jb20vP3Q9KiIsICJ0IiwgIio6Ly9saW5rcy5qaWFuc2h1LmNvbS9nbz90bz0qIiwgInRvIl0sCiAgICAgICAgICAgIGpzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5jb2xsYXBzZS1mcmVlLWNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIC8vIOeZvuW6puaWsOmXuywg55m+5a625Y+3CiAgICAgICAgICAgIG1hdGNoOiBbIio6Ly9iYWlqaWFoYW8uYmFpZHUuY29tL3MqIiwgIio6Ly9leHQuYmFpZHUuY29tL2FwaS9jb21tZW50L3YxL3BhZ2UvbGlzdCoiLCAiKjovL21iZC5iYWlkdS5jb20vbmV3c3BhZ2UvKiIsICIqOi8vd3d3LmJhaWR1LmNvbS8jaWFjdD13aXNlaW5kZXgvdGFicy9uZXdzL2FjdGl2aXR5L25ld3NkZXRhaWw9KiJdLAogICAgICAgICAgICBoaWRlOiBbIi5wYWNrdXBCdXR0b24iLCAiLm9QYWRkaW5nIiwgIi5uZXdVbmZvbGRGdWxsQm94LmNvbnRlbnRQYWRkaW5nIiwgIi51bmRlZmluZWQiLCAiLmZvbGRNYXNrV3JhcHBlciIsICIjaGVhZERlZmxlY3RvckNvbnRhaW5lciJdLAogICAgICAgICAgICBleHBhbmQ6IFsiLm1haW5Db250ZW50IiwgIiNtYWluQ29udGVudENvbnRhaW5lciJdLAogICAgICAgICAgICB3YWl0OiBbCiAgICAgICAgICAgICAgICBbInA6Y29udGFpbnMoJ+eZvuW6pkFQUOWGhemYheivuycpIiwgKG5vZGUpID0+IG5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUucGFyZW50Tm9kZSldLAogICAgICAgICAgICAgICAgWyIubGF5ZXItY29udGVudC5sYXllci1jb250ZW50LXNob3duIiwgKG5vZGUpID0+IG5vZGUucXVlcnlTZWxlY3RvcigiLmxheWVyLWl0ZW1CdG4ubm9ybWFsIikuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImNsaWNrIikpXSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6IFsiKjovL2Rvd25sb2FkLmNzZG4ubmV0L2Rvd25sb2FkLyoiXSwKICAgICAgICAgICAganM6ICgpID0+IHsKICAgICAgICAgICAgICAgIGxldCBidG4gPSAkKCIubW9yZS13cmFwIikuZmluZCgiLmVsLWJ1dHRvbiIpOwogICAgICAgICAgICAgICAgYnRuLnJlbW92ZUF0dHIoImRhdGEtcmVwb3J0LWNsaWNrIik7CiAgICAgICAgICAgICAgICBidG4uY2xpY2soKQogICAgICAgICAgICAgICAgJCgiI2Rlc2MtdGV4dCIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBtYXRjaDogIio6Ly9ibG9nLmNzZG4ubmV0LyoiLAogICAgICAgICAgICBoaWRlOiBbIi53ZWl4aW4tc2hhZG93Ym94LndhcC1zaGFkb3dib3giLCAiLmFzaWRlLWhlYWRlci1maXhlZCIsICIuaGlkZS1wcmVDb2RlLWJveCIsICIjbV90b29sYmFyX2xlZnQgLm1fdG9vbGJhcl9sZWZ0X2FwcF9idG4iLCAiLnJlYWRhbGxfYm94IiwgIi5mZWVkLVNpZ24tc3BhbiIsICIuYnRuX21vZCIsICIuYnRuX2FwcF9saW5rIiwgIi5idG4tcmVhZG1vcmUiLCAiLmNvbW1lbnRfcmVhZF9tb3JlX2JveCIsICIuYnRuX29wZW5fYXBwX3Byb21wdF9kaXYiLCAiLmZlZWQtU2lnbi13ZWl4aW4iXSwKICAgICAgICAgICAgZXhwYW5kOiBbIi5hcnRpY2xlX2NvbnRlbnQiLCAiI2FydGljbGVfY29udGVudCIsICIjY29tbWVudCIsICIuc2V0LWNvZGUtaGlkZSJdLAogICAgICAgICAgICBkaXJlY3RMaW5rOiBbIio6Ly9saW5rLmNzZG4ubmV0Lz90YXJnZXQ9KiIsICJ0YXJnZXQiXSwKICAgICAgICAgICAgYmluZENsaWNrOiBbCiAgICAgICAgICAgICAgICAiYVtocmVmXj1odHRwXSIsCiAgICAgICAgICAgICAgICAobm9kZSwgZSkgPT4gewogICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnRhcmdldCA9PSAiX2JsYW5rIiAmJiAhbm9kZS5ob3N0bmFtZS5pbmNsdWRlcygiLmNzZG4ubmV0IikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBjc3M6IGAKCiAgICAgICAgICAgICAgICAjY29udGVudF92aWV3cyxjb2RlLHByZSB7CiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIC1raHRtbC11c2VyLXNlbGVjdDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB1c2VyLXNlbGVjdDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICBgLAogICAgICAgICAgICBqczogKCkgPT4gewogICAgICAgICAgICAgICAgc2FmZVdhaXRKUXVlcnkoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIi5yZWNvbW1lbmQtanVtcC1hcHAiKS5yZW1vdmVBdHRyKCJpZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCIucmVjb21tZW5kLWp1bXAtYXBwIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAub2ZmKCJjbGljayIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCJjbGljayIsIChlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBqUXVlcnkodGhpcykuZmluZCgiYS5mbGFnIikuYXR0cigiaHJlZiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gdXJsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoImFbZGF0YS1yZXBvcnQtY2xpY2tdIikucmVtb3ZlQXR0cigiZGF0YS1yZXBvcnQtY2xpY2siKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgiYVtkYXRhLXJlcG9ydC1xdWVyeV0iKS5yZW1vdmVBdHRyKCJkYXRhLXJlcG9ydC1xdWVyeSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB1bnNhZmVXaW5kb3cuY3NkbiAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGxlcmVkL0NTRE5HcmVlbmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCJjb2RlIikuYXR0cigib25jbGljayIsICJtZGNwLmNvcHlDb2RlKGV2ZW50KSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2FmZVdpbmRvdy5jc2RuLmNvcHlyaWdodC5pbml0KCIiLCAiIiwgIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHVuc2FmZVdpbmRvdy5jc2RuLnJlcG9ydCwgInJlcG9ydENsaWNrIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1bnNhZmVXaW5kb3csICJhcnRpY2xlVHlwZSIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgbWF0Y2g6ICIqOi8vamluZ3lhbi5iYWlkdS5jb20vYXJ0aWNsZS8qIiwKICAgICAgICAgICAgaGlkZTogWyIucmVhZC13aG9sZS1tYXNrIl0sCiAgICAgICAgICAgIGV4cGFuZDogWyIuZXhwLWNvbnRlbnQtY29udGFpbmVyIl0sCiAgICAgICAgfSwKICAgIF07CgogICAgZnVuY3Rpb24gbWF0Y2hSdWxlKHN0ciwgcnVsZSkgewogICAgICAgIHZhciBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFtcXVwvXFxdKS9nLCAiXFwkMSIpOwogICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCJeIiArIHJ1bGUuc3BsaXQoIioiKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oIi4qIikgKyAiJCIpLnRlc3Qoc3RyKTsKICAgIH0KCiAgICAvLyBodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvNDE2MzM4CiAgICBmdW5jdGlvbiBwYXJzZVVybChocmVmKSB7CiAgICAgICAgaWYgKCFocmVmKSByZXR1cm4ge307CiAgICAgICAgbGV0IHNlYXJjaDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8g6ZO+5o6lCiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoaHJlZik7CiAgICAgICAgICAgICh7IHNlYXJjaCB9ID0gdXJsKTsgLy8g5Li76KaB5aSE55CG5a+5aGFzaOeahHNlYXJjaAoKICAgICAgICAgICAgaWYgKCFzZWFyY2ggJiYgdXJsLmhhc2guaW5jbHVkZXMoIj8iKSkgewogICAgICAgICAgICAgICAgc2VhcmNoID0gdXJsLmhhc2guc3BsaXQoIj8iKVsxXTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAvLyDpnZ7pk77mjqUs5aaC77yaYT0xJmI9MuOAgT9hPTHjgIEvZm9vP2E9MeOAgS9mb28jYmFyP2E9MQogICAgICAgICAgICBpZiAoaHJlZi5pbmNsdWRlcygiPyIpKSB7CiAgICAgICAgICAgICAgICBzZWFyY2ggPSBocmVmLnNwbGl0KCI/IilbMV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWFyY2ggPSBocmVmOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7CiAgICAgICAgcmV0dXJuIFsuLi5zZWFyY2hQYXJhbXMuZW50cmllcygpXS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoKGFjY1trZXldID0gdmFsdWUpLCBhY2MpLCB7fSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCwgY2hhcnMpIHsKICAgICAgICBsZXQgcmVzdWx0ID0gIiI7CiAgICAgICAgZm9yIChsZXQgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgcmVzdWx0ICs9IGNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCldOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Q29va2llKG5hbWUsIHZhbHVlLCBkYXlzKSB7CiAgICAgICAgbGV0IGV4cGlyZXMgPSAiIjsKICAgICAgICBpZiAoZGF5cykgewogICAgICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKTsKICAgICAgICAgICAgZXhwaXJlcyA9ICI7IGV4cGlyZXM9IiArIGRhdGUudG9VVENTdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArICI9IiArICh2YWx1ZSB8fCAiIikgKyBleHBpcmVzICsgIjsgcGF0aD0vIjsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewogICAgICAgIGxldCBuYW1lRVEgPSBuYW1lICsgIj0iOwogICAgICAgIGxldCBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2EubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTsKICAgICAgICAgICAgd2hpbGUgKGMuY2hhckF0KDApID09ICIgIikgYyA9IGMuc3Vic3RyaW5nKDEsIGMubGVuZ3RoKTsKICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lRVEpID09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIGVyYXNlQ29va2llKG5hbWUpIHsKICAgICAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgIj07IE1heC1BZ2U9LTk5OTk5OTk5OyI7CiAgICB9CgogICAgZnVuY3Rpb24gY2xlYXJBZExvb3AoKSB7CiAgICAgICAgbGV0IGlkID0gc2V0VGltZW91dCgiOyIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWQ7IGkrKykgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoaSk7CiAgICAgICAgfQogICAgICAgIGlkID0gc2V0SW50ZXJ2YWwoIjsiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkOyBpKyspIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2FmZVdhaXRKUXVlcnkoY2FsbGJhY2tGdW5jKSB7CiAgICAgICAgbGV0IGpRdWVyeVRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodHlwZW9mIGpRdWVyeSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoalF1ZXJ5VGltZXIpOwogICAgICAgICAgICAgICAgY2FsbGJhY2tGdW5jKGpRdWVyeSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCAzMDApOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvcHkodmFsdWUpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkCiAgICAgICAgICAgICAgICA/IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKS50aGVuKHJlc29sdmUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBuYXRpdmVDb3B5KHRleHQpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICA6IG5hdGl2ZUNvcHkodGV4dCkudGhlbihyZXNvbHZlLCByZWplY3QpOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIG5hdGl2ZUNvcHkodmFsdWUpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBsZXQgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICB0ZXh0QXJlYS5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIHRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgICAgIHRleHRBcmVhLmZvY3VzKCk7CiAgICAgICAgICAgIHRleHRBcmVhLnNlbGVjdCgpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpOwogICAgICAgICAgICAgICAgfSwgMSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgICAgIH0sIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JJbmNsdWRlc1RleHQoc2VsZWN0b3IsIHRleHQpIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKChlbCkgPT4gZWwudGV4dENvbnRlbnQuaW5jbHVkZXModGV4dCkpOwogICAgfQoKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TaGF3YWsvVHdpdGNoU3F1YWQvYmxvYi9tYWluL3R3aXRjaHNxdWFkLnVzZXIuanMKICAgIGlmICh0eXBlb2YgR01fYWRkU3R5bGUgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgR01fYWRkU3R5bGUgPSBmdW5jdGlvbiAoY3NzKSB7CiAgICAgICAgICAgIGxldCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSwKICAgICAgICAgICAgICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3R5bGUudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSBjc3M7CiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHsKICAgICAgICAgICAgICAgIHN0eWxlLmlubmVyVGV4dCA9IGNzczsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKICAgICAgICB9OwogICAgfQogICAgaWYgKHR5cGVvZiB1bnNhZmVXaW5kb3cgPT0gInVuZGVmaW5lZCIpIHVuc2FmZVdpbmRvdyA9IHdpbmRvdzsKCiAgICBjb25zdCByZWFkeU5hbWUgPSByYW5kb21TdHJpbmcoOCwgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iik7CgogICAgZm9yICh2YXIgd2Vic2l0ZSBvZiB3ZWJzaXRlcykgewogICAgICAgIGxldCBoaXQgPSBmYWxzZTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh3ZWJzaXRlLm1hdGNoKSkgewogICAgICAgICAgICBoaXQgPSB3ZWJzaXRlLm1hdGNoLnNvbWUoKHMpID0+IG1hdGNoUnVsZSh3aW5kb3cubG9jYXRpb24uaHJlZiwgcykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhpdCA9IG1hdGNoUnVsZSh3aW5kb3cubG9jYXRpb24uaHJlZiwgd2Vic2l0ZS5tYXRjaCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaGl0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHdlYnNpdGUpOwogICAgICAgICAgICBsZXQgc3R5bGUgPSAiIjsKICAgICAgICAgICAgaWYgKCJoaWRlIiBpbiB3ZWJzaXRlICYmIHdlYnNpdGUuaGlkZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBzdHlsZSArPQogICAgICAgICAgICAgICAgICAgIHdlYnNpdGUuaGlkZS5qb2luKCIsXG4iKSArCiAgICAgICAgICAgICAgICAgICAgYAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCJleHBhbmQiIGluIHdlYnNpdGUgJiYgd2Vic2l0ZS5leHBhbmQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgc3R5bGUgKz0KICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlLmV4cGFuZC5qb2luKCIsXG4iKSArCiAgICAgICAgICAgICAgICAgICAgYAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IHVuc2V0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IHVuc2V0ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiB1bnNldCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCJkaXNhYmxlIiBpbiB3ZWJzaXRlICYmIHdlYnNpdGUuZGlzYWJsZS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBzdHlsZSArPQogICAgICAgICAgICAgICAgICAgIHdlYnNpdGUuZGlzYWJsZS5qb2luKCIsXG4iKSArCiAgICAgICAgICAgICAgICAgICAgYAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoImNzcyIgaW4gd2Vic2l0ZSAmJiB3ZWJzaXRlLmNzcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBzdHlsZSArPSB3ZWJzaXRlLmNzczsKICAgICAgICAgICAgfQogICAgICAgICAgICBHTV9hZGRTdHlsZShzdHlsZSk7CgogICAgICAgICAgICBpZiAoIndhaXQiIGluIHdlYnNpdGUpIHsKICAgICAgICAgICAgICAgIC8vIFRPRE8g6ZyA6KaB5o2i56eN5pa55byP5LyY5YyWCiAgICAgICAgICAgICAgICBsZXQgcmVhZHkgPSBbXTsKICAgICAgICAgICAgICAgIGxldCBpZCA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3IG9mIHdlYnNpdGUud2FpdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEod1swXSBpbiByZWFkeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG0gPSB3WzBdLm1hdGNoKC8oLis/KTpjb250YWluc1woXHMqWyciXSguKz8pWyciXVxzKlwpLyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUxpc3QgPSBxdWVyeVNlbGVjdG9ySW5jbHVkZXNUZXh0KG1bMV0sIG1bMl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh3WzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFsbE5vZGVGaW5pc2ggPSBub2RlTGlzdC5sZW5ndGggPiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVMaXN0LmZvckVhY2goKG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmRhdGFzZXRbcmVhZHlOYW1lXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdbMV0gPT09ICJjbGljayIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJjbGljayIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJ0YXAiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jbGljaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FsbHJldCA9IHdbMV0uY2FsbChub2RlLCBub2RlKTsgLy8g6L+U5Zue5YC8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxyZXQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbE5vZGVGaW5pc2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YXNldFtyZWFkeU5hbWVdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxOb2RlRmluaXNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5LnB1c2god1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkeS5sZW5ndGggPT0gd2Vic2l0ZS53YWl0Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIDIwMDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoImRpcmVjdExpbmsiIGluIHdlYnNpdGUpIHsKICAgICAgICAgICAgICAgIC8vIOWOu+mZpOmTvuaOpemHjeWumuWQkQoKICAgICAgICAgICAgICAgIC8vIOaUr+aMgem8oOagh+W3puWPs+mUruWSjOaLluaLveaJk+W8gOi2hemTvuaOpQogICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgICAgICAgICAibW91c2Vkb3duIiwKICAgICAgICAgICAgICAgICAgICAoZSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvMjA0MzEtemhpaHUtbGluay1yZWRpcmVjdC1maXgKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbSA9IGUudGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZG9tLmNsb3Nlc3QoImFbaHJlZl0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSB3ZWJzaXRlLmRpcmVjdExpbms7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hSdWxlKHRhcmdldC5ocmVmLCBkW2ldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRbaSArIDFdID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW2kgKyAxXS5jYWxsKHRhcmdldCwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbSA9IHBhcnNlVXJsKHRhcmdldC5ocmVmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbVtkW2kgKyAxXV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuaHJlZiA9IHBhcmFtW2RbaSArIDFdXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDpgb/lhY3ms4TpnLLmnaXmupAsIOWKoOW8uumakOengeS/neaKpAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnRhcmdldCA9PSAiX2JsYW5rIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoInJlbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWwuaW5jbHVkZXMoIm5vcmVmZXJyZXIiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCJyZWwiLCByZWwgKyAiIG5vcmVmZXJyZXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoInJlbCIsICJub3JlZmVycmVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgiYmluZENsaWNrIiBpbiB3ZWJzaXRlKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgICAgICAgICAgICJjbGljayIsCiAgICAgICAgICAgICAgICAgICAgKGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbSA9IGUudGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IHdlYnNpdGUuYmluZENsaWNrOwogICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gZG9tLmNsb3Nlc3QoZFswXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbMV0uY2FsbCh0YXJnZXQsIHRhcmdldCwgZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgic3RhcnQiIGluIHdlYnNpdGUpIHsKICAgICAgICAgICAgICAgIHdlYnNpdGUuc3RhcnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCJqcyIgaW4gd2Vic2l0ZSkgewogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgICAgIHdlYnNpdGUuanMoKTsKICAgICAgICAgICAgICAgICAgICAvLyBhbGVydCgi56iL5bqP5Ye6546w5byC5bi4Iik7CiAgICAgICAgICAgICAgICAgICAgLy8gR01fb3BlbkluVGFiKCJodHRwczovL2dyZWFzeWZvcmsub3JnL3poLUNOL3NjcmlwdHMvNDQwNDAwL2ZlZWRiYWNrIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB3ZWJzaXRlLmpzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9KSgpOwo=
Add Comment
Please, Sign In to add comment