xiaomianao666

插件名:global_百度网盘SVIP解析高速下载-度娘加速

Apr 17th, 2025
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_百度网盘SVIP解析高速下载-度娘加速@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgIOeZvuW6pue9keebmFNWSVDop6PmnpDpq5jpgJ/kuIvovb0t5bqm5aiY5Yqg6YCfCi8vIEBuYW1lc3BhY2UgICAgICAgICBtb21vegovLyBAdmVyc2lvbiAgICAgICAgICAgMi4zCi8vIEBhdXRob3IgICAgICAgICAgICBtb21vCi8vIEBkZXNjcmlwdGlvbiAgICAgICDnmb7luqbnvZHnm5hTVklQ6Kej5p6Q6auY6YCf5LiL6L29LDI05bCP5pe257u05oqkMTAwJeWPr+S7peeUqO+8geS9v+eUqElETeS4i+i9veabtOWKoOeos+WumklETSBVQeiuvue9ru+8mkxvZ1N0YXRpc3RpYyAgQ2hyb21l5rWP6KeI5Zmo5LiA5a6a5omT5byA5byA5Y+R6ICF5qih5byP5omN6IO95q2j5bi45pi+56S65Ye65p2lIQovLyBAYW50aWZlYXR1cmUgICAgICAgYWRzCi8vIEBhbnRpZmVhdHVyZSAgICAgICB0cmFja2luZwovLyBAYW50aWZlYXR1cmUgICAgICAgbWVtYmVyc2hpcAovLyBAbGljZW5zZSAgICAgICAgICAgIE1JVAovLyBAaWNvbiAgICAgICAgICAgICAgaHR0cHM6Ly9uZC1zdGF0aWMuYmRzdGF0aWMuY29tL20tc3RhdGljL3YyMC1tYWluL2hvbWUvaW1nL2ljb24taG9tZS1uZXcuYjQwODMzNDUucG5nCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vcGFuLmJhaWR1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8veXVuLmJhaWR1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vcGFuLmJhaWR1LmNvbS9kaXNrL2hvbWUqCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8veXVuLmJhaWR1LmNvbS9kaXNrL2hvbWUqCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vcGFuLmJhaWR1LmNvbS9kaXNrL21haW4qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8veXVuLmJhaWR1LmNvbS9kaXNrL21haW4qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vcGFuLmJhaWR1LmNvbS9zLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly95dW4uYmFpZHUuY29tL3MvKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovL3Bhbi5iYWlkdS5jb20vc2hhcmUvKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovL3l1bi5iYWlkdS5jb20vc2hhcmUvKgovLyBAbWF0Y2ggICAgICAgICAgICAgaHR0cDovLzEyNy4wLjAuMTo1NTAwLyoKLy8gQGNvbm5lY3QgICAgICAgICAgIGJhaWR1LmNvbQovLyBAY29ubmVjdCAgICAgICAgICAgMTI3LjAuMC4xCi8vIEBjb25uZWN0ICAgICAgICAgICB0eS5zaHp4a3EuY29tCi8vIEBncmFudCAgICAgICAgICAgICBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fZ2V0UmVzb3VyY2VUZXh0Ci8vIEBydW4tYXQgICAgICAgICAgICBkb2N1bWVudC1pZGxlCi8vIEByZXF1aXJlICAgICAgICAgICBodHRwczovL2xpYi5iYW9taXR1LmNvbS9sYXl1aS8yLjkuMy9sYXl1aS5taW4uanMKLy8gQGRvd25sb2FkVVJMIGh0dHBzOi8vdXBkYXRlLmdyZWFzeWZvcmsub3JnL3NjcmlwdHMvNTEyOTg0LyVFNyU5OSVCRSVFNSVCQSVBNiVFNyVCRCU5MSVFNyU5QiU5OFNWSVAlRTglQTclQTMlRTYlOUUlOTAlRTklQUIlOTglRTklODAlOUYlRTQlQjglOEIlRTglQkQlQkQtJUU1JUJBJUE2JUU1JUE4JTk4JUU1JThBJUEwJUU5JTgwJTlGLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzUxMjk4NC8lRTclOTklQkUlRTUlQkElQTYlRTclQkQlOTElRTclOUIlOThTVklQJUU4JUE3JUEzJUU2JTlFJTkwJUU5JUFCJTk4JUU5JTgwJTlGJUU0JUI4JThCJUU4JUJEJUJELSVFNSVCQSVBNiVFNSVBOCU5OCVFNSU4QSVBMCVFOSU4MCU5Ri5tZXRhLmpzCi8vID09L1VzZXJTY3JpcHQ9PQoKCgooZnVuY3Rpb24gKCkgewoKICAgIGFkZFN0eWxlc2hlZXQoJ2h0dHBzOi8vbGliLmJhb21pdHUuY29tL2xheXVpLzIuOS4zL2Nzcy9sYXl1aS5jc3MnKTsKCgoKICAgIHZhciBjb25maWcgPSB7CiAgICAgICAgZ29uZ2dhbzogIuavjzjlsI/ml7Y45qyhMjAwR+Wkp+aWh+S7tuino+aekO+8jDQw5qyhMS41R+W3puWPs+Wwj+aWh+S7tuino+aekO+8jOWwj+aWh+S7tuino+aekOetieW+heaXtumXtDHliLAyMOWIhumSn+W3puWPs++8gUlETSBVQeiuvue9ru+8mkxvZ1N0YXRpc3RpYyIsCiAgICAgICAgaG9zdF9saXN0OiB7CiAgICAgICAgICAgICIxIjogImh0dHBzOi8vYmRiLnNoenhrcS5jb20iLAogICAgICAgICAgICAiMiI6ICJodHRwczovL3R5LnNoenhrcS5jb20iLAogICAgICAgICAgICAiMyI6ICIiCiAgICAgICAgfSwKICAgICAgICBiZF9wYXNzd29yZDogImFzZGYiLAogICAgICAgIHRpdGxlX25hbWU6ICLluqblqJjliqDpgJ8iLAogICAgICAgIGZpbGVfbmFtZToiIiwKICAgICAgICBzYXZlUGF0aDogJ0Q6XFwnLAogICAgICAgIGpzb25ycGM6ICdodHRwOi8vbG9jYWxob3N0OjY4MDAvanNvbnJwYycsCiAgICAgICAgdXNlcm5hbWU6ICIiLAogICAgICAgIHRhYl9pZDogIjEiLAogICAgICAgIHVhOiAibmV0ZGlzazsiLAogICAgICAgIHdpbmRvd19oZWlnaHQ6IDUyNSwgIC8v55WM6Z2i6auY5bqmCiAgICAgICAgd29ya2RhdGE6IHt9LAogICAgICAgIGRyb3Bkb3duOiBudWxsLAogICAgICAgIGZpbGVfc2l6ZTowCiAgICB9CiAgICBjb25maWcubWFpbl91cmwgPSBjb25maWcuaG9zdF9saXN0WycxJ107CiAgICBjb25maWcubWFpbl9pbWdfdXJsID0gY29uZmlnLmhvc3RfbGlzdFsnMSddICsgJy94Y3guanBnJzsKCgogICAgZnVuY3Rpb24gYWRkU3R5bGVzaGVldCh1cmwpIHsKICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsKICAgICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JzsKICAgICAgICBsaW5rLmhyZWYgPSB1cmw7CiAgICAgICAgbGluay50eXBlID0gJ3RleHQvY3NzJzsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldGRyb3Bkb3duX29mZl9vbihzdGF0ZSA9IGZhbHNlKSB7CiAgICAgICAgbGV0IGRvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0YWIke2NvbmZpZy50YWJfaWR9IC5kZW1vLWRyb3Bkb3duLW9uYCk7CiAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwgIiIpOwogICAgICAgICAgICBkb20uY2xhc3NMaXN0LmFkZCgnbGF5dWktYnRuLWRpc2FibGVkJyk7CiAgICAgICAgICAgIGRvbS5jbGFzc0xpc3QucmVtb3ZlKCdkZW1vLWRyb3Bkb3duLW9uX29uZGlzYWJsZWQnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb20ucmVtb3ZlQXR0cmlidXRlKCJkaXNhYmxlZCIpOwogICAgICAgICAgICBkb20uY2xhc3NMaXN0LnJlbW92ZSgnbGF5dWktYnRuLWRpc2FibGVkJyk7CiAgICAgICAgICAgIGRvbS5jbGFzc0xpc3QuYWRkKCdkZW1vLWRyb3Bkb3duLW9uX29uZGlzYWJsZWQnKTsKICAgICAgICB9CiAgICB9CgoKICAgIGxheXVpLnVzZShbJ2xheWVyJ10sIGFzeW5jIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbGF5ZXIgPSBsYXl1aS5sYXllciwgJCA9IGxheXVpLiQsIGVsZW1lbnQgPSBsYXl1aS5lbGVtZW50OwogICAgICAgIHZhciBkcm9wZG93biA9IGxheXVpLmRyb3Bkb3duOwogICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCA4ODgpKSk7CgogICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLnN0YXJ0c1dpdGgoImh0dHBzOi8vcGFuLmJhaWR1LmNvbS9zLyIpKSB7CiAgICAgICAgICAgIC8v5YiG5Lqr55WM6Z2i5Yqg5oyJ6ZKuCiAgICAgICAgICAgICQoJy54LWJ1dHRvbi1ib3gnKS5wcmVwZW5kKCc8YSBjbGFzcz0iZy1idXR0b24iIGlkPSJkb3duYnRuX3NoYXJlIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogIzY4MDBmZjtjb2xvcjogI2ZmZjtib3JkZXItY29sb3I6ICM2ODAwZmY7IiAgaHJlZj0iamF2YXNjcmlwdDo7IiA+PHNwYW4gY2xhc3M9ImctYnV0dG9uLXJpZ2h0Ij48ZW0gY2xhc3M9Imljb24gaWNvbi1kb3dubG9hZCIgdGl0bGU9IiI+PC9lbT48c3BhbiBjbGFzcz0idGV4dCIgc3R5bGU9IndpZHRoOiBhdXRvOyI+JyArIGNvbmZpZy50aXRsZV9uYW1lICsgJzwvc3Bhbj48L3NwYW4+PC9hPicpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWFtuS7lueVjOmdouWKoOaMiemSrgogICAgICAgICAgICBpZiAoJCgnLnRjdUxBdScpLmlzKCcqJykpIHsKICAgICAgICAgICAgICAgIC8v5pen54mICiAgICAgICAgICAgICAgICAkKCcudGN1TEF1JykucHJlcGVuZCgnPHNwYW4gY2xhc3M9ImctZHJvcGRvd24tYnV0dG9uIj48YSBpZD0iZG93bmJ0bl9tYWluIiAgc3R5bGU9IiBtYXJnaW4tcmlnaHQ6IDEwcHg7Y29sb3I6ICNmZmY7YmFja2dyb3VuZC1jb2xvcjogIzY4MDBmZjtib3JkZXItY29sb3I6ICM2ODAwZmY7IiBpZD0iZG93bmJ0bl9tYWluIiBjbGFzcz0iZy1idXR0b24iID48c3BhbiBjbGFzcz0iZy1idXR0b24tcmlnaHQiPjxlbSBjbGFzcz0iaWNvbiBpY29uLWRvd25sb2FkIiA+PC9lbT48c3BhbiBjbGFzcz0idGV4dCIgc3R5bGU9IndpZHRoOiBhdXRvOyI+JyArIGNvbmZpZy50aXRsZV9uYW1lICsgJzwvc3Bhbj48L3NwYW4+PC9hPjwvc3Bhbj4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8v5paw54mICiAgICAgICAgICAgICAgICAkKCcud3Atcy1hZ2lsZS10b29sLWJhcl9faGVhZGVyLmlzLWhlYWRlci10b29sJykucHJlcGVuZCgnPGRpdiBjbGFzcz0id3Atcy1hZ2lsZS10b29sLWJhcl9faC1ncm91cCI+PGJ1dHRvbiBzdHlsZT0iIG1hcmdpbi1yaWdodDogMTBweDtjb2xvcjogI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiAjNjgwMGZmO2JvcmRlci1jb2xvcjogIzY4MDBmZjsiIGlkPSJkb3duYnRuX21haW4iIGNsYXNzPSJ1LWJ1dHRvbiBuZC1maWxlLWxpc3QtdG9vbGJhci1hY3Rpb24taXRlbSIgPjxpIGNsYXNzPSJpY29uZm9udCBpY29uLWRvd25sb2FkIj48L2k+IDxzcGFuPicgKyBjb25maWcudGl0bGVfbmFtZSArICc8L3NwYW4+PC9idXR0b24+PC9kaXY+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICQoJyNkb3duYnRuX3NoYXJlJykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICBteV9hbGVydCgi5o+Q56S6Ouivt+WFiOS/neWtmOWIsOiHquW3seeahOe9keebmOWQju+8jOS7jue9keebmOmHjOino+aekCEiKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKCiAgICAgICAgJCgnI2Rvd25idG5fbWFpbicpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgbGV0IHh1YW56aGVfbGlzdCA9IGdldF94dWFuemhlX2xpc3QoKTsKICAgICAgICAgICAgbGV0IHh1YW56aGVfbGlzdDIgPSBPYmplY3Qua2V5cyh4dWFuemhlX2xpc3QpOwogICAgICAgICAgICBpZiAoeHVhbnpoZV9saXN0Mi5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgbXlfYWxlcnQoIuaPkOekujror7flhYjpgInmi6nkuIDkuKrmlofku7YiKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIGlmICh4dWFuemhlX2xpc3QyLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLmj5DnpLo655uu5YmN5LuF5pSv5oyB5LiA5Liq5paH5Lu26Kej5p6QIik7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoeHVhbnpoZV9saXN0W3h1YW56aGVfbGlzdDJbMF1dLmlzZGlyID09IDEpIHsKICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLmj5DnpLo655uu5YmN5LiN5pSv5oyB5paH5Lu25aS56Kej5p6Q77yBIik7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICBsZXQgZmlsZV9pbmZvX29iaiA9IHh1YW56aGVfbGlzdFt4dWFuemhlX2xpc3QyWzBdXTsKCiAgICAgICAgICAgIGNvbmZpZy5maWxlX3NpemUgPSBmaWxlX2luZm9fb2JqLnNpemU7CiAgICAgICAgICAKCiAgICAgICAgICAgIGxldCBodG1sX2NvZGUgPSBgCiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgIC5waW5jb2RlLWlucHV0IHt3aWR0aDogMzhweDtoZWlnaHQ6IDM4cHg7bGluZS1oZWlnaHQ6IDUwcHg7Ym9yZGVyLXJhZGl1czogM3B4O2JvcmRlcjogMnB4IHNvbGlkIGdyYXk7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZTogMS41cmVtfQogICAgICAgICAgICAgICAgLnBpbmNvZGUtaW5wdXQ6bm90KDpsYXN0LWNoaWxkKSB7bWFyZ2luLXJpZ2h0OiAxcmVtfQogICAgICAgICAgICAgICAgLnBpbmNvZGUtaW5wdXQucGluY29kZS1pbnB1dC0tZm9jdXNlZCB7Ym9yZGVyLWNvbG9yOiAjMDAwfQogICAgICAgICAgICAgICAgLnBpbmNvZGUtaW5wdXQucGluY29kZS1pbnB1dC0tZmlsbGVkIHtib3JkZXItY29sb3I6IGRvZGdlcmJsdWV9CiAgICAgICAgICAgICAgICAubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1jbG9zZTIge3Bvc2l0aW9uOiBhYnNvbHV0ZTtyaWdodDogLTVweCAhaW1wb3J0YW50O3RvcDogLTVweCAhaW1wb3J0YW50O30KICAgICAgICAgICAgICAgIC5sYXl1aS1sYXllci1jbG9zZTo6YmVmb3JlIHtjb250ZW50OiAiWCIgIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAuc3dhbDItY29udGFpbmVyIHt6LWluZGV4OiA5OTk5OTk5OTkgIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAuc3dhbDItcG9wdXAge3BhZGRpbmctdG9wOiAyMHB4ICFpbXBvcnRhbnQ7anVzdGlmeS1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7fQogICAgICAgICAgICAgICAgLmJsb2NrcXVvdGUge2Rpc3BsYXk6IGlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTogbm93cmFwO3dpZHRoOiAxMDAlO292ZXJmbG93OiBoaWRkZW47dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7fQogICAgICAgICAgICAgICAgLmxheXVpLXRhYiAubGF5dWktdGFiLXRpdGxlIHtib3JkZXItYm90dG9tLXdpZHRoOiAwO30KICAgICAgICAgICAgICAgIC5sYXl1aS10YWItYnJpZWY+LmxheXVpLXRhYi10aXRsZSBsaSB7Y29sb3I6ICM2YTZhNmE7Zm9udC13ZWlnaHQ6IDcwMDtmb250LXNpemU6IDE2cHg7fQogICAgICAgICAgICAgICAgLmxheXVpLXRhYi1icmllZj4ubGF5dWktdGFiLXRpdGxlIC5sYXl1aS10aGlzIHtjb2xvcjogIzIxOTZmMztmb250LXdlaWdodDogNzAwO2ZvbnQtc2l6ZTogMTZweDt9CiAgICAgICAgICAgICAgICAubGF5dWktdGFiLWJyaWVmPi5sYXl1aS10YWItbW9yZSBsaS5sYXl1aS10aGlzOmFmdGVyLAogICAgICAgICAgICAgICAgLmxheXVpLXRhYi1icmllZj4ubGF5dWktdGFiLXRpdGxlIC5sYXl1aS10aGlzOmFmdGVyIHtib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czogMDt3aWR0aDogNTAlO2xlZnQ6IDI1JTtib3JkZXItYm90dG9tOiA1cHggc29saWQgIzIxOTZmMzt9CiAgICAgICAgICAgICAgICAubGF5dWktdGFiIHttYXJnaW46IDA7fQogICAgICAgICAgICAgICAgLmxheXVpLXRhYi10aXRsZSB7YmFja2dyb3VuZDogI2ZmZjt9CiAgICAgICAgICAgICAgICAubGF5dWktbGF5ZXItcGFnZSB7Ym9yZGVyLXJhZGl1czogMjVweDt9CiAgICAgICAgICAgICAgICAuZGVtbyB7ZGlzcGxheTogbm9uZTttYXJnaW4tdG9wOiAxMnB4O30KICAgICAgICAgICAgICAgICNwb3B1cCB7d2lkdGg6IDMyMHB4O2hlaWdodDogMTk1cHg7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiA2cHg7Ym90dG9tOiA1OHB4O2JvcmRlcjogMXB4IHNvbGlkICMwMDA7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtkaXNwbGF5OiBub25lO30KICAgICAgICAgICAgICAgICNkaWFsb2dEaXZTYXZlUGF0aCB7dGV4dC1hbGlnbjogbGVmdDtsaW5lLWhlaWdodDogMjNweDtwb3NpdGlvbjogYWJzb2x1dGU7cGFkZGluZzogMTVweDtjb2xvcjogcmdiYSgwLCAwLCAwLCAuODYpO30KICAgICAgICAgICAgICAgIC5sYXl1aS1idG4tc20ge2hlaWdodDogNDVweDtsaW5lLWhlaWdodDogMzBweDtwYWRkaW5nOiAwIDE1cHg7Zm9udC1zaXplOiAxNHB4O30KICAgICAgICAgICAgICAgIC5waWFvIHtiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYigxMTQsIDksIDIxMiksIHJnYig0MCwgNTAsIDIxMikgMzMlLCByZ2IoMCwgMTY1LCAxNzgpKTtjb2xvcjogcmdiYSgwLCAwLCAwLCAwKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtmb250LXN0eWxlOiBub3JtYWw7fQogICAgICAgICAgICAgICAgLmxheXVpLWxheWVyLWNvbnRlbnQge292ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAuaDEge2ZvbnQtZmFtaWx5OiBQaW5nRmFuZ1NDLVJlZ3VsYXIsIHNhbnMtc2VyaWYsIE1pY3Jvc29mdCBZYUhlaSwgU2ltSGVpLCBUYWhvbWEgIWltcG9ydGFudDtmb250LXdlaWdodDogNzAwO21hcmdpbi1ib3R0b206IDE2cHg7Zm9udC1zaXplOiAzMnB4O2xpbmUtaGVpZ2h0OiA0OHB4O30KICAgICAgICAgICAgICAgIC5oMiB7Zm9udC1zaXplOiAyMXB4O2xpbmUtaGVpZ2h0OiAyO30KICAgICAgICAgICAgICAgIC5oMyB7Zm9udC1zaXplOiAxNi4zOHB4O2xpbmUtaGVpZ2h0OiAyO30KICAgICAgICAgICAgICAgIC5sYXl1aS1jYXJkLWJvZHkge3Bvc2l0aW9uOiByZWxhdGl2ZTtwYWRkaW5nOiAxMHB4IDE1cHg7bGluZS1oZWlnaHQ6IDIycHg7fQogICAgICAgICAgICAgICAgLmltZ3NldCB7cG9zaXRpb246IGFic29sdXRlO2N1cnNvcjogcG9pbnRlcjtmb250LXNpemU6IDlweDtyaWdodDogMTVweDtib3R0b206IDIzcHg7d2lkdGg6IDM1cHg7fQogICAgICAgICAgICAgICAgLm15X2J1dHRvbl9jbGFzczEge2JhY2tncm91bmQtY29sb3I6ICNmZjQzNmE7Y29sb3I6ICNmZmY7Ym9yZGVyLWNvbG9yOiAjZmY0MzZhO2ZvbnQtd2VpZ2h0OiA3MDA7fQogICAgICAgICAgICAgICAgI215X2xvYWRpbmd0ZXh0IHtkaXNwbGF5OiBub25lO3BhZGRpbmc6IDFweDtiYWNrZ3JvdW5kOiByZ2IoMjU1IDI1NSAyNTUpO3Bvc2l0aW9uOiBhYnNvbHV0ZTt6LWluZGV4OiAyMTQ3NDgzNjQ3O3RleHQtYWxpZ246IGNlbnRlcjt0b3A6IDU3JTtmb250LXdlaWdodDogNTAwO2NvbG9yOiByZ2IoMywgMTY5LCAyNDQpO2ZvbnQtc2l6ZTogMjVweDtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7fQogICAgICAgICAgICAgICAgLnN3YWwyLWNvbnRhaW5lciB7ei1pbmRleDogOTk5OTk5OTk5OSAhaW1wb3J0YW50OyB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLmxheXVpLWxheWVyLXBhZ2Uge2JvcmRlci1yYWRpdXM6IDBweCAhaW1wb3J0YW50O30KCgoKICAgICAgICAgICAgICAgIC5ib3JkZXJOb19ib3R0b20ge2JvcmRlci10b3A6IDJweCAjMDAwMDAwIHNvbGlkO2JvcmRlci1sZWZ0OiAycHggIzAwMDAwMCBzb2xpZDtib3JkZXItcmlnaHQ6IDJweCAjMDAwMDAwIHNvbGlkO30KICAgICAgICAgICAgICAgIC5ib3JkZXJOb190b3BBTkRsZWZ0IHtib3JkZXItcmlnaHQ6IDJweCAjMDAwMDAwIHNvbGlkO30KICAgICAgICAgICAgICAgIC5PdGhlcl9sYXl1aS10YWItaXRlbSB7Ym9yZGVyOiAycHggc29saWQgYmxhY2s7aGVpZ2h0OiA1NTBweDt0ZXh0LWFsaWduOiBjZW50ZXI7fQogICAgICAgICAgICAgICAgLnRhYl9pdGVtX2NvbnRlbnQge3Bvc2l0aW9uOiByZWxhdGl2ZTtoZWlnaHQ6IDUwMHB4O3dpZHRoOiA4MDBweDttYXJnaW46IDAgYXV0bztkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7fQogICAgICAgICAgICAgICAgLmxheXVpLXRoaXMge2NvbG9yOiAjMDAwICFpbXBvcnRhbnQ7fQogICAgICAgICAgICAgICAgLmxheXVpLWxheWVyLXBhZ2Uge2JvcmRlci1yYWRpdXM6IDBweCAhaW1wb3J0YW50O30KICAgICAgICAgICAgICAgIC5sYXl1aS10YWItdGl0bGUgLmxheXVpLXRoaXM6OmFmdGVyIHtoZWlnaHQ6IDQwcHggIWltcG9ydGFudDs7fQogICAgICAgICAgICAgICAgLmxheXVpLXRoaXM6YWZ0ZXIge2JhY2tncm91bmQtY29sb3I6IHJnYmEoMzAsIDI0LCAyMCwgMC40NSkgIWltcG9ydGFudDtib3JkZXItYm90dG9tOiAwcHggc29saWQgcmVkICFpbXBvcnRhbnQ7d2lkdGg6IDEwMCUgIWltcG9ydGFudDtsZWZ0OiAwcHggIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAubGF5dWktYnRue2JhY2tncm91bmQtY29sb3I6ICNmYjdkNGIgIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAubGF5dWktYnRuLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6ICNmYmZiZmIgIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgICAubGF5dWktdGFiLXRpdGxle2JhY2tncm91bmQtY29sb3I6ICNmZmY7Ym9yZGVyOiAycHggc29saWQgYmxhY2s7fQogICAgICAgICAgICAgICAgLm15X3RhYl9icntib3JkZXItcmlnaHQ6MnB4IHNvbGlkIGJsYWNrO30KCiAgICAgICAgICAgICAgICAuZGVtby1kcm9wZG93bi1vbntoZWlnaHQ6IDQ1cHg7Zm9udC1zaXplOiAxOHB4O2NvbG9yOiAjZmZmO30KICAgICAgICAgICAgICAgIC5kZW1vLWRyb3Bkb3duLW9uX29uZGlzYWJsZWQge2JhY2tncm91bmQtY29sb3I6ICMxNmJhYWEgIWltcG9ydGFudDt9CiAgICAgICAgICAgICAgIAoKCiAgICAgICAgPC9zdHlsZT5gOwoKICAgICAgICAgICAgZnVuY3Rpb24gdGFiX2h0bWwodGFiaWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy53b3JrZGF0YVtTdHJpbmcodGFiaWQpXSA9IFtdOwogICAgICAgICAgICAgICAgcmV0dXJuIGAKICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXl1aS1jYXJkIiBzdHlsZT0iYm9yZGVyOiAycHggc29saWQgYmxhY2s7bWFyZ2luLWJvdHRvbTogLTJweDtwYWRkaW5nOjFweCAyNXB4OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPuWFrOWRijoke2NvbmZpZy5nb25nZ2FvfTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXl1aS1jYXJkIiBzdHlsZT0iYm9yZGVyOiAycHggc29saWQgYmxhY2s7bWFyZ2luLWJvdHRvbTogLTJweDtwYWRkaW5nOjEwcHggMjVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VydmVyX2ZpbGVuYW1lIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij7lvZPliY3mlofku7blkI06PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsiPuaJq+aPj+S6jOe7tOeggeiOt+WPluino+aekOWvhueggeWQju+8jOeCueWHu+ino+aekOaMiemSrjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGlkPSJjb2RlX2ltZyIgc3JjPSIke2NvbmZpZy5ob3N0X2xpc3RbY29uZmlnLnRhYl9pZF19L3hjeC5qcGciIHN0eWxlPSJ3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxheXVpLWNhcmQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMXB4O2JvcmRlci1sZWZ0OiAycHggc29saWQgYmxhY2s7cGFkZGluZzoxMHB4IDI1cHg7Ym9yZGVyLXRvcDogMHhwIHNvbGlkIGJsYWNrO2JvcmRlci1yaWdodDogMnB4ICMwMDAwMDAgc29saWQ7Ym9yZGVyLWJvdHRvbTogMnB4ICMwMDAgc29saWQ7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibWFpbl9zdGFydCBsYXl1aS1idG4gbGF5dWktYnRuLXNtIiBzdHlsZT0iLyohIGZsb2F0OiByaWdodDsgKi9tYXJnaW4tbGVmdDogMzU1cHg7Ij7mj5DkuqTop6PmnpA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrO2JvcmRlci10b3A6IDB4cCBzb2xpZCBibGFjaztib3JkZXItcmlnaHQ6IDJweCAjMDAwMDAwIHNvbGlkO2JvcmRlci1ib3R0b206IDJweCAjMDAwIHNvbGlkO3BhZGRpbmc6IDE1cHggMjVweDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibGF5dWktYnRuIGxheXVpLWJ0bi1wcmltYXJ5IGRlbW8tZHJvcGRvd24tb24gbGF5dWktYnRuLWRpc2FibGVkIiBzdHlsZT0iIiAgaWQ9ImRyb3Bkb3duX3RhYiR7dGFiaWR9IiBsYXktb3B0aW9ucz0ie3RyaWdnZXI6ICdtb3VzZWRvd24nfSIgZGlzYWJsZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg54K55Ye75aSN5Yi26Kej5p6Q55u06ZO+SURN5LiL6L29CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImxheXVpLWljb24gbGF5dWktaWNvbi1kb3duIGxheXVpLWZvbnQtMTIiPjwvaT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJtYWluX3N0YXJ0X3F1ZXJ5IGxheXVpLWJ0biBsYXl1aS1idG4tc20iIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij7mn6Xor6Lku7vliqE8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGh0bWxfY29kZSArPSBgPGJvZHk+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxheXVpLXRhYiBsYXl1aS10YWItY2FyZCIgaWQ9InRhYiIgbGF5LWZpbHRlcj0iZGVtbyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImxheXVpLXRhYi10aXRsZSIgc3R5bGU9IiI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsYXl1aS10aGlzIG15X3RhYl9iciIgbGF5LWlkPSIxIj7lpKfmlofku7bop6PmnpA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibXlfdGFiX2JyIiBsYXktaWQ9IjIiPjJH5bem5Y+z5bCP5paH5Lu26Kej5p6QPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im15X3RhYl9iciIgbGF5LWlkPSIzIj7nrbnlu7rkuK0wMzwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJteV90YWJfYnIiIGxheS1pZD0iaGVscCI+6IGU57O75oiR5LusPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXl1aS10YWItY29udGVudCIgc3R5bGU9InBhZGRpbmctdG9wOjBweCI+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxheXVpLXRhYi1pdGVtIGxheXVpLXNob3ciICBpZD0idGFiMSIgc3R5bGU9Im1hcmdpbi10b3A6IDJweDsiPgogICAgICAgICAgICAgICAgICAgICR7dGFiX2h0bWwoMSl9CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxheXVpLXRhYi1pdGVtIiBpZD0idGFiMiIgc3R5bGU9Im1hcmdpbi10b3A6IDJweDsiPgogICAgICAgICAgICAgICAgICAgICR7dGFiX2h0bWwoMil9CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxheXVpLXRhYi1pdGVtIiBpZD0idGFiMyIgc3R5bGU9Im1hcmdpbi10b3A6IDJweDsiPgogICAgICAgICAgICAgICAgICAgICR7dGFiX2h0bWwoMyl9CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYXl1aS10YWItaXRlbSIgc3R5bGU9Im1hcmdpbi10b3A6IDJweDsiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6IDJweCBzb2xpZCBibGFjaztoZWlnaHQ6JHtjb25maWcud2luZG93X2hlaWdodCAtIDIwfXB4O3Bvc2l0aW9uOnJlbGF0aXZlOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlRHOiBodHRwczovL3QubWUveGlhb21venljYzwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9ib2R5PmA7CiAgICAgICAgICAgIC8vIOa4suafkwoKCgogICAgICAgICAgICBsYXllci5vcGVuKHsKICAgICAgICAgICAgICAgIHR5cGU6IDEsCiAgICAgICAgICAgICAgICB0aXRsZTogZmFsc2UsCiAgICAgICAgICAgICAgICBjbG9zZUJ0bjogMSwKICAgICAgICAgICAgICAgIHNoYWRlQ2xvc2U6IHRydWUsCiAgICAgICAgICAgICAgICAvLyBzaGFkZTogMC45LCAvLyDpga7nvanpgI/mmI7luqYKICAgICAgICAgICAgICAgIC8vIGFyZWE6IFsnNTAwcHgnLCAnMzY3cHgnXSwvL+WuvSDpq5gKICAgICAgICAgICAgICAgIGFyZWE6IFsnNTAwcHgnLCBjb25maWcud2luZG93X2hlaWdodCArICdweCddLC8v5a69IOmrmAogICAgICAgICAgICAgICAgY29udGVudDogaHRtbF9jb2RlLAogICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGxheWVybywgaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YV9qc29uID0ge307CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnRhYl9pZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLndvcmtkYXRhID0ge307CiAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1haW5fdXJsID0gY29uZmlnLmhvc3RfbGlzdFtjb25maWcudGFiX2lkXTsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdGFiJHsgY29uZmlnLnRhYl9pZH0gI2NvZGVfaW1nYCkuc3JjID0gY29uZmlnLm1haW5fdXJsICsgIi94Y3guanBnIjsKCgogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfanNvbiA9ICQoImh0bWwiKS5odG1sKCkubWF0Y2goLyg/PD1sb2NhbHNcLm1zZXRcKCkoLio/KSg/PVwpOykvKVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9qc29uID0gSlNPTi5wYXJzZShkYXRhX2pzb24pOwogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudXNlcm5hbWUgPSBkYXRhX2pzb24udXNlcm5hbWU7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2pzb24gPSAkKCJodG1sIikuaHRtbCgpLm1hdGNoKC8oPzw9d2luZG93XC5sb2NhbHNccz1ccykoLio/KSg/PTspLylbMF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfanNvbiA9IEpTT04ucGFyc2UoZGF0YV9qc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVzZXJuYW1lID0gZGF0YV9qc29uLnVzZXJJbmZvLnVzZXJuYW1lOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjb25maWcuZGF0YV9qc29uID0gZGF0YV9qc29uOwoKICAgICAgICAgICAgICAgICAgICBkcm9wZG93bi5yZW5kZXIoewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtOiAnLmRlbW8tZHJvcGRvd24tb24nLCAvLyDnu5HlrprlhYPntKDpgInmi6nlmajvvIzmraTlpITmjIflkJEgY2xhc3Mg5Y+v5ZCM5pe257uR5a6a5aSa5Liq5YWD57SgCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxldDogZnVuY3Rpb24gKGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2RpY3QgPSBbImxheXVpLWljb24tbG9jayIsImxheXVpLWljb24tbG9hZGluZy0xIiwibGF5dWktaWNvbi1zdWNjZXNzIl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uX2NsYXNzID0gIGQud29ya3N0YXRlID49IDM/ImxheXVpLWljb24tcXVlc3Rpb24iOnN0YXRlX2RpY3RbZC53b3Jrc3RhdGVdOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkLndvcmtzdGF0ZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZyhkLmRvd25sb2FkX3VybCkuaW5kZXhPZigiaHR0cCIpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fY2xhc3MgPSAibGF5dWktaWNvbi1lcnJvciI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fY29sb3IgPSAicmVkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uX2NvbG9yID0gImdyZWVuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25fY29sb3IgPSAicmVkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9ImxheXVpLW1lbnUtYm9keS10aXRsZSIgPiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImxheWFkbWluLXRleHRpbWciIHN0eWxlPSJjb2xvcjogJHtpY29uX2NvbG9yfTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0ibGF5dWktaWNvbiAke2ljb25fY2xhc3N9IiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+PC9pPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2QudGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAob2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChvYmoudGl0bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZyhvYmouZG93bmxvYWRfdXJsKS5pbmRleE9mKCJodHRwIikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coIuaOkumYn+ino+aekOS4re+8jOivt+iAkOW/g+etieW+hTHliLA15YiG6ZKf5ZCO5p+l6K+i55u06ZO+77yB77yB77yB77yBIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhLnN0eWxlLm9wYWNpdHkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWEudmFsdWUgPSBvYmouZG93bmxvYWRfdXJsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRhcmVhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyhvYmoudGl0bGUgKyAn55qE5LiL6L2955u06ZO+5bey5aSN5Yi2Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuZHJvcGRvd24gPSBkcm9wZG93bjsKCiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmRyb3Bkb3duLnJlbG9hZERhdGEoYGRyb3Bkb3duX3RhYiR7Y29uZmlnLnRhYl9pZH1gLCB7ICdkYXRhJzogc2V0X2Ryb3Bkb3duX2RhdGEoKSB9KQoKICAgICAgICAgICAgICAgICAgICAvLyDnm5HlkKxUYWLliIfmjaIKICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9uKCd0YWIoZGVtbyknLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkdGhpcywgZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qEVGFi55qEbGF5LWlk5bGe5oCn5YC8CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJJZCA9IGRhdGEuZWxlbS5jb250ZXh0LmF0dHJpYnV0ZXNbJ2xheS1pZCddLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcudGFiX2lkID0gdGFiSWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5kcm9wZG93bi5yZWxvYWREYXRhKGBkcm9wZG93bl90YWIke2NvbmZpZy50YWJfaWR9YCwgeyAnZGF0YSc6IHNldF9kcm9wZG93bl9kYXRhKCkgfSkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYklkID09PSAnaGVscCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICR0aGlzLnRleHQoJ+mHjeaWsOWKoOi9veeahOWGheWuuTpoZWxwJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjb25maWcpCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcubWFpbl91cmwgPSBjb25maWcuaG9zdF9saXN0W3RhYklkXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0YWIke3RhYklkfSAjY29kZV9pbWdgKS5zcmMgPSBjb25maWcubWFpbl91cmwgKyAiL3hjeC5qcGciOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAkKCIubXlfc2V0dGluZyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy/kvZzlup8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnQoIuiuvue9riIpCiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9tcHRJID0gbGF5ZXIucHJvbXB0KHsgdGl0bGU6ICfovpPlhaXkuIvovb3ot6/lvoQnLCBmb3JtVHlwZTogMCwgdmFsdWU6IGNvbmZpZy5zYXZlUGF0aCB9LCBmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZShwcm9tcHRJKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zYXZlUGF0aCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKCLkuIvovb3ot6/lvoTorr7nva7lrozmiJDvvJoiICsgY29uZmlnLnNhdmVQYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICBjb25maWcuZmlsZV9uYW1lID0gZmlsZV9pbmZvX29iai5zZXJ2ZXJfZmlsZW5hbWU7CiAgICAgICAgICAgICAgICAgICAgJCgiLnNlcnZlcl9maWxlbmFtZSIpLnRleHQoIuW9k+WJjeaWh+S7tuWQjToiICsgZmlsZV9pbmZvX29iai5zZXJ2ZXJfZmlsZW5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAkKCcubWFpbl9zdGFydF9xdWVyeScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FsbF9kb3duX3VybCgpOwogICAgICAgICAgICAgICAgICAgIH0pCgoKICAgICAgICAgICAgICAgICAgICAkKCcubWFpbl9zdGFydCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnLmNvcHknKS5hZGRDbGFzcygnbGF5dWktYnRuLWRpc2FibGVkJykucmVtb3ZlQXR0cignZG93bi11cmwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gJCgnLnB1c2hhcmlhJykuYWRkQ2xhc3MoJ2xheXVpLWJ0bi1kaXNhYmxlZCcpLnJlbW92ZUF0dHIoJ2Rvd24tdXJsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRfcGFyc2Vfa2V5X3ZhbHVlKGNvbmZpZy50YWJfaWQpICYmIGdldF9wYXJzZV9rZXlfdGltZShjb25maWcudGFiX2lkKSAmJiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA8IE51bWJlcihnZXRfcGFyc2Vfa2V5X3RpbWUoY29uZmlnLnRhYl9pZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5sb2FkKDIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZTogWzAuMywgJyNGRkYnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVfb25lX2JhaWR1KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbXB0SSA9IGxheWVyLnByb21wdCh7IHRpdGxlOiAn5a+G56CB5bey6YeN572u77yM6K+36YeN5paw6L6T5YWlJywgZm9ybVR5cGU6IDEgfSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKHByb21wdEkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGF5ZXIubXNnKCLlr4bnoIHovpPlhaXlrozmiJAiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3BhcnNlX2tleShjb25maWcudGFiX2lkLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5sb2FkKDIsIHsgc2hhZGU6IFswLjMsICcjRkZGJ10sIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlX29uZV9iYWlkdSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgJCgnLmNvcHknKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8v5L2c5bqfCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcygnbGF5dWktYnRuLWRpc2FibGVkJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYS5zdHlsZS5vcGFjaXR5ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhLnZhbHVlID0gJCh0aGlzKS5hdHRyKCdkb3duLXVybCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRhcmVhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZygn6ZO+5o6l5aSN5Yi25oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgJCgnLnB1c2hhcmlhJykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAvL+S9nOW6nwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ2xheXVpLWJ0bi1kaXNhYmxlZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gJCh0aGlzKS5hdHRyKCdkb3duLXVybCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRBcmlhMih1cmwsICQoJy5zZXJ2ZXJfZmlsZW5hbWUnKS50ZXh0KCkucmVwbGFjZSgi5b2T5YmN5paH5Lu25ZCNOiIsICIiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZW5kQXJpYTIodXJsLCBmaWxlX2luZm9fb2JqLnNlcnZlcl9maWxlbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coJ+aOqOmAgeaIkOWKnycpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKCgogICAgfSk7CgogICAgZnVuY3Rpb24gc2V0X3BhcnNlX2tleSh0YWJpZCwgdmFsdWUpIHsKICAgICAgICAvLyBsb2NhbFN0b3JhZ2UubXlfcGFzc3dvcmQgPSB2YWx1ZTsKICAgICAgICAvLyBsb2NhbFN0b3JhZ2UubXlfcGFzc3dvcmRfZW5kID0gZ2V0X2VuZFRpbWUoKTsKICAgICAgICBsb2NhbFN0b3JhZ2VbJ215X3Bhc3N3b3JkXycgKyB0YWJpZF0gPSB2YWx1ZTsKICAgICAgICBsb2NhbFN0b3JhZ2VbJ215X3Bhc3N3b3JkXycgKyB0YWJpZCArICJfZW5kIl0gPSBnZXRfZW5kVGltZSgpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0X3BhcnNlX2tleV92YWx1ZSh0YWJpZCkgewogICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2VbJ215X3Bhc3N3b3JkXycgKyB0YWJpZF07CiAgICB9CiAgICBmdW5jdGlvbiBnZXRfcGFyc2Vfa2V5X3RpbWUodGFiaWQpIHsKICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlWydteV9wYXNzd29yZF8nICsgdGFiaWQgKyAiX2VuZCJdOwogICAgfQogICAgZnVuY3Rpb24gc2V0X2Ryb3Bkb3duX2RhdGEoKSB7CiAgICAgICAgZHJvcGRvd25fdGVtcF9kYXRhID0gY29uZmlnWyJ3b3JrZGF0YSJdW2NvbmZpZy50YWJfaWRdOwogICAgICAgIGRyb3Bkb3duX2RhdGEgPSBbXTsKICAgICAgICBmb3IgKGxldCBvIGluIGRyb3Bkb3duX3RlbXBfZGF0YSkgewogICAgICAgICAgICBkcm9wZG93bl9kYXRhLnB1c2goewogICAgICAgICAgICAgICAgdGl0bGU6IGRyb3Bkb3duX3RlbXBfZGF0YVtvXS5maWxlbmFtZSwKICAgICAgICAgICAgICAgIGRvd25sb2FkX3VybDogZHJvcGRvd25fdGVtcF9kYXRhW29dLmRvd25sb2FkX3VybCwKICAgICAgICAgICAgICAgIHdvcmtpZDogZHJvcGRvd25fdGVtcF9kYXRhW29dLndvcmtpZCwKICAgICAgICAgICAgICAgIGZpbGVfaWQ6IGRyb3Bkb3duX3RlbXBfZGF0YVtvXS5maWxlX2lkLAogICAgICAgICAgICAgICAgZG93bmxvYWRfZW5kdGltZTogZHJvcGRvd25fdGVtcF9kYXRhW29dLmRvd25sb2FkX2VuZHRpbWUsCiAgICAgICAgICAgICAgICB3b3Jrc3RhdGU6IGRyb3Bkb3duX3RlbXBfZGF0YVtvXS53b3Jrc3RhdGUsCiAgICAgICAgICAgICAgICBkb3dubG9hZF9lbmR0aW1lX3RpbWVzdGFtcDogZHJvcGRvd25fdGVtcF9kYXRhW29dLmRvd25sb2FkX2VuZHRpbWVfdGltZXN0YW1wLAogICAgICAgICAgICB9KQogICAgICAgIH0KCiAgICAgICAgY29uc29sZS5sb2coZHJvcGRvd25fZGF0YSk7CiAgICAgICAgcmV0dXJuIGRyb3Bkb3duX2RhdGE7CiAgICB9CgoKCgogICAgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYSwgYiA9IDIpIHsKICAgICAgICBpZiAoMCA9PT0gYSkgcmV0dXJuICIwIEJ5dGVzIjsKICAgICAgICBjb25zdCBjID0gMCA+IGIgPyAwIDogYiwKICAgICAgICAgICAgZCA9IE1hdGguZmxvb3IoTWF0aC5sb2coYSkgLyBNYXRoLmxvZygxMDI0KSk7CiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKGEgLyBNYXRoLnBvdygxMDI0LCBkKSkudG9GaXhlZChjKSkgKyAiICIgKyBbIkJ5dGVzIiwgIktCIiwgIk1CIiwgIkdCIiwgIlRCIiwgIlBCIiwgIkVCIiwgIlpCIiwgIllCIl1bZF0KICAgIH0KICAgIGZ1bmN0aW9uIGZvcm1hdERhdGUodGltZSwgZm9ybWF0ID0gJ1lZLU1NLUREIGhoOm1tOnNzJykgewogICAgICAgIGlmICh0aW1lID09IHVuZGVmaW5lZCkgcmV0dXJuICItLSI7CiAgICAgICAgdGltZSA9IE51bWJlcih0aW1lICsgIjAwMCIpOwogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodGltZSk7CgogICAgICAgIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLAogICAgICAgICAgICBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDEsCiAgICAgICAgICAgIGRheSA9IGRhdGUuZ2V0RGF0ZSgpLAogICAgICAgICAgICBob3VyID0gZGF0ZS5nZXRIb3VycygpLAogICAgICAgICAgICBtaW4gPSBkYXRlLmdldE1pbnV0ZXMoKSwKICAgICAgICAgICAgc2VjID0gZGF0ZS5nZXRTZWNvbmRzKCk7CiAgICAgICAgdmFyIHByZUFyciA9IEFycmF5LmFwcGx5KG51bGwsIEFycmF5KDEwKSkubWFwKGZ1bmN0aW9uIChlbGVtLCBpbmRleCkgewogICAgICAgICAgICByZXR1cm4gJzAnICsgaW5kZXg7CiAgICAgICAgfSk7CgogICAgICAgIHZhciBuZXdUaW1lID0gZm9ybWF0LnJlcGxhY2UoL1lZL2csIHllYXIpCiAgICAgICAgICAgIC5yZXBsYWNlKC9NTS9nLCBwcmVBcnJbbW9udGhdIHx8IG1vbnRoKQogICAgICAgICAgICAucmVwbGFjZSgvREQvZywgcHJlQXJyW2RheV0gfHwgZGF5KQogICAgICAgICAgICAucmVwbGFjZSgvaGgvZywgcHJlQXJyW2hvdXJdIHx8IGhvdXIpCiAgICAgICAgICAgIC5yZXBsYWNlKC9tbS9nLCBwcmVBcnJbbWluXSB8fCBtaW4pCiAgICAgICAgICAgIC5yZXBsYWNlKC9zcy9nLCBwcmVBcnJbc2VjXSB8fCBzZWMpOwoKICAgICAgICByZXR1cm4gbmV3VGltZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldF9lbmRUaW1lKCkgewogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICB2YXIgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxOwogICAgICAgIHZhciBkYXkgPSBkYXRlLmdldERhdGUoKTsKICAgICAgICB2YXIgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgdmFyIG9uXzMwbWluID0gTnVtYmVyKG5ldyBEYXRlKHllYXIgKyAiLSIgKyBtb250aCArICItIiArIGRheSArICIgIiArIGhvdXJzICsgIjozMDowMCIpKTsKICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgPCBvbl8zMG1pbikgewogICAgICAgICAgICByZXN1bHRfdGltZSA9IG9uXzMwbWluOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdF90aW1lID0gb25fMzBtaW4gKyAzMCAqIDYwICogMTAwMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdF90aW1lOwogICAgfQoKICAgIGZ1bmN0aW9uIG15X2FsZXJ0KHRleHRfdmFsdWUgPSAiIikgewogICAgICAgIGxheXVpLmxheWVyLm9wZW4oewogICAgICAgICAgICB0eXBlOiAxLAogICAgICAgICAgICB0aXRsZTogZmFsc2UsCiAgICAgICAgICAgIGNsb3NlQnRuOiAxLAogICAgICAgICAgICBzaGFkZUNsb3NlOiB0cnVlLAogICAgICAgICAgICBza2luOiAneW91cmNsYXNzJywKICAgICAgICAgICAgY29udGVudDogYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJib3JkZXI6IDJweCBzb2xpZCBibGFjaztwYWRkaW5nOjMwcHggODBweDt3b3JkLXdyYXA6YnJlYWstd29yZDsiPgogICAgICAgICAgICAgICAgJHt0ZXh0X3ZhbHVlfQogICAgICAgICAgICA8L2Rpdj5gCgogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHNlbmRBcmlhMih1cmwsIG91dF9maWxlbmFtZSwgdWEpIHsKICAgICAgICAgICAvL+S9nOW6nwogICAgICAgIHZhciBBcmlhMl9jb25maWcgPSB7CiAgICAgICAgICAgICJqc29ucnBjIjogIjIuMCIsCiAgICAgICAgICAgICJtZXRob2QiOiAiYXJpYTIuYWRkVXJpIiwKICAgICAgICAgICAgImlkIjogMSwKICAgICAgICAgICAgInBhcmFtcyI6IFsKICAgICAgICAgICAgICAgIFt1cmxdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJoZWFkZXIiOiBbYFVzZXItQWdlbnQ6ICR7Y29uZmlnLnVhfWBdLAogICAgICAgICAgICAgICAgICAgICJvdXQiOiBvdXRfZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgImRpciI6IGNvbmZpZy5zYXZlUGF0aCwKICAgICAgICAgICAgICAgICAgICAicGF1c2UiOiAiZmFsc2UiLC8v5piv5ZCm5pqC5YGc5LiL6L29CiAgICAgICAgICAgICAgICAgICAgIm1heC1jb25uZWN0aW9uLXBlci1zZXJ2ZXIiOiAiMTUiLAogICAgICAgICAgICAgICAgICAgICJzZWVkLXJhdGlvIjogIjAiLAogICAgICAgICAgICAgICAgICAgICJjb250aW51ZSI6ICd0cnVlJywKICAgICAgICAgICAgICAgICAgICAidXNlci1hZ2VudCI6ICJMb2dTdGF0aXN0aWMiCiAgICAgICAgICAgICAgICB9XQogICAgICAgIH0KICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6IGNvbmZpZy5qc29ucnBjLAogICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShBcmlhMl9jb25maWcpLAogICAgICAgICAgICB0eXBlOiAicG9zdCIsCiAgICAgICAgICAgIC8vYXN5bmM6IGZhbHNlLC8vZmFsc2XkuLrlkIzmraUKICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29uIiwKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKG9iaikgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cob2JqKQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0X3h1YW56aGVfbGlzdCgpIHsKICAgICAgICAvLyByZXR1cm4gewogICAgICAgIC8vICAgICAiMTA1MTYwMzI2MDU5OTc3NSI6IHsKICAgICAgICAvLyAgICAgICAgIGlzZGlyOiAwCiAgICAgICAgLy8gICAgIH0KICAgICAgICAvLyB9CiAgICAgICAgdmFyIHh1YW56aGVfbGlzdCA9IHt9OwogICAgICAgIHZhciB4dWFueGlhbmcgPSBbXTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgeHVhbnhpYW5nID0gcmVxdWlyZSgnc3lzdGVtLWNvcmU6Y29udGV4dC9jb250ZXh0LmpzJykuaW5zdGFuY2VGb3JTeXN0ZW0ubGlzdC5nZXRTZWxlY3RlZCgpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgeHVhbnhpYW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndwLXMtY29yZS1wYW4nKS5fX3Z1ZV9fLnNlbGVjdGVkTGlzdDsKICAgICAgICB9CiAgICAgICAgeHVhbnhpYW5nLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgICAgIHh1YW56aGVfbGlzdFtlbGVtZW50LmZzX2lkXSA9IGVsZW1lbnQ7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHh1YW56aGVfbGlzdDsKICAgIH0KCgogICAgZnVuY3Rpb24gc2hhcmVfb25lX2JhaWR1KCkgewogICAgICAgIGxldCB4dWFuemhlX2xpc3QgPSBPYmplY3Qua2V5cyhnZXRfeHVhbnpoZV9saXN0KCkpOwogICAgICAgIGxldCBiZHN0b2tlbiA9ICIiOwogICAgICAgIGxldCBkYXRhX2pzb24gPSB7fTsKICAgICAgICB0cnkgewogICAgICAgICAgICBkYXRhX2pzb24gPSAkKCJodG1sIikuaHRtbCgpLm1hdGNoKC8oPzw9bG9jYWxzXC5tc2V0XCgpKC4qPykoPz1cKTspLylbMF07CiAgICAgICAgICAgIGRhdGFfanNvbiA9IEpTT04ucGFyc2UoZGF0YV9qc29uKTsKICAgICAgICAgICAgY29uZmlnLnVzZXJuYW1lID0gZGF0YV9qc29uLnVzZXJuYW1lOwogICAgICAgICAgICBiZHN0b2tlbiA9IGRhdGFfanNvbi5iZHN0b2tlbjsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGRhdGFfanNvbiA9ICQoImh0bWwiKS5odG1sKCkubWF0Y2goLyg/PD13aW5kb3dcLmxvY2Fsc1xzPVxzKSguKj8pKD89OykvKVswXTsKICAgICAgICAgICAgZGF0YV9qc29uID0gSlNPTi5wYXJzZShkYXRhX2pzb24pOwogICAgICAgICAgICBjb25maWcudXNlcm5hbWUgPSBkYXRhX2pzb24udXNlckluZm8udXNlcm5hbWU7CiAgICAgICAgICAgIGJkc3Rva2VuID0gZGF0YV9qc29uLnVzZXJJbmZvLmJkc3Rva2VuOwogICAgICAgIH0KICAgICAgICBjb25maWcuZGF0YV9qc29uID0gZGF0YV9qc29uOwogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHR5cGU6ICdHRVQnLAogICAgICAgICAgICB1cmw6ICJodHRwczovL3Bhbi5iYWlkdS5jb20vc2hhcmUvc2V0IiwKICAgICAgICAgICAgYXN5bmM6IHRydWUsCiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIGJkc3Rva2VuOiBiZHN0b2tlbiwKICAgICAgICAgICAgICAgIHBlcmlvZDogMSwKICAgICAgICAgICAgICAgIHB3ZDogY29uZmlnLmJkX3Bhc3N3b3JkLAogICAgICAgICAgICAgICAgZWZsYWdfZGlzYWJsZTogdHJ1ZSwKICAgICAgICAgICAgICAgIGNoYW5uZWxfbGlzdDogIiU1QiU1RCIsCiAgICAgICAgICAgICAgICBzY2hhbm5lbDogNCwKICAgICAgICAgICAgICAgIGZpZF9saXN0OiBKU09OLnN0cmluZ2lmeSh4dWFuemhlX2xpc3QpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcykKICAgICAgICAgICAgICAgIGlmIChyZXMuc2hvd19tc2cuaW5kZXhPZigi56aB5q2iIikgPiAtMSkgewogICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlQWxsKCdsb2FkaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgbXlfYWxlcnQoIuivpeaWh+S7tuemgeatouWIhuS6qyIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGV0IHNob3J0dXJsID0gIiI7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnR1cmwgPSByZXMubGluay5zcGxpdCgiLyIpLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlQWxsKCdsb2FkaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLplJnor6865Yid5aeL5YyW5YeG5aSH5aSx6LSl77yBIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZ2V0X2Rvd25fbGlzdChzaG9ydHVybCwgY29uZmlnLmJkX3Bhc3N3b3JkKTsKICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLplJnor6865Yid5aeL5YyW5YeG5aSH6K+35rGC6K6/6Zeu5aSx6LSlIik7CiAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICB9LAogICAgICAgIH0pCgogICAgfQoKCiAgICBmdW5jdGlvbiBnZXRfZG93bl91cmwoKSB7CiAgICAgICAgLy/kvZzlup8KICAgICAgICBzZXJ2ZXJfZmlsZW5hbWVfZG9tID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3RhYiR7Y29uZmlnLnRhYl9pZH0gLnNlcnZlcl9maWxlbmFtZWApOwogICAgICAgIHRfcGFyc2VrZXkgPSBzZXJ2ZXJfZmlsZW5hbWVfZG9tLmdldEF0dHJpYnV0ZSgicGFyc2VrZXkiKTsKICAgICAgICB0X3dvcmtpZCA9IHNlcnZlcl9maWxlbmFtZV9kb20uZ2V0QXR0cmlidXRlKCJ3b3JraWQiKTsKICAgICAgICBsZXQgZG93bl91cmwgPSBgJHtjb25maWcubWFpbl91cmx9L3F1ZXJ5d29yay5waHA/d29ya2lkPSR7dF93b3JraWR9JnBhcnNla2V5PSR7dF9wYXJzZWtleX0mdXNlcm5hbWU9JHtjb25maWcudXNlcm5hbWV9YDsKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6IGRvd25fdXJsLAogICAgICAgICAgICBtZXRob2Q6ICdHRVQnLAogICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHBhcmFtcykgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigyLCBwYXJhbXMpOwogICAgICAgICAgICAgICAgbXlfYWxlcnQoIuivt+mHjeaWsOino+aekOWwneivlSIpOwogICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2VBbGwoJ2xvYWRpbmcnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHsKICAgICAgICAgICAgICAgIC8vIGpzb24gPSBKU09OLnBhcnNlKHBhcmFtcyk7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygzLCBqc29uKTsKICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGUgPT0gMCAmJiBqc29uLndvcmtzdGF0ZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZGRkID0ganNvbi5kYXRhOwogICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCLlvoXkuIvovb3mlofku7bor6bmg4UiLCBkZGQpOwoKICAgICAgICAgICAgICAgICAgICAvLyBTaXplID0gZm9ybWF0Qnl0ZXMoZGRkLmZpbGVzaXplKTsKICAgICAgICAgICAgICAgICAgICAvLyBUaW1lID0gZm9ybWF0RGF0ZShkZGQuZmlsZWN0aW1lLCAnWVkvTU0vREQgaGg6bW06c3MnKTsKICAgICAgICAgICAgICAgICAgICBjb25maWcudWEgPSBqc29uLnVhOwogICAgICAgICAgICAgICAgICAgIGxldCBkb3dubGluayA9IGpzb24uZG93bmxvYWRfdXJsOwogICAgICAgICAgICAgICAgICAgIGlmIChkb3dubGluay5pbmRleE9mKCJodHRwIikgPj0gMCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2ZpbGVuYW1lX2RvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0YWIke2NvbmZpZy50YWJfaWR9IC5zZXJ2ZXJfZmlsZW5hbWVgKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIG9mIFsnZmlsZW5hbWUnLCAnd29ya3N0YXRlJywgIndvcmtpZCIsICJzaG9ydHVybCIsICJwYXNzd29yZCIsICJwYXJzZWtleSIsICJjcmVhdHRpbWUiXSkgeyBzZXJ2ZXJfZmlsZW5hbWVfZG9tLnJlbW92ZUF0dHJpYnV0ZShpKSB9CgogICAgICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICAgICAgICAgICAgICBteV9hbGVydCgi5oiQ5YqfOuino+aekOaIkOWKnyIpOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29weScpLnJlbW92ZUNsYXNzKCdsYXl1aS1idG4tZGlzYWJsZWQnKS5hdHRyKCdkb3duLXVybCcsIGRvd25saW5rKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnB1c2hhcmlhJykucmVtb3ZlQ2xhc3MoJ2xheXVpLWJ0bi1kaXNhYmxlZCcpLmF0dHIoJ2Rvd24tdXJsJywgZG93bmxpbmspOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlQWxsKCdsb2FkaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLplJnor6865LiL6L296ZO+5o6l6Kej5p6Q5byC5bi444CQIiArIGpzb24ubXNnICsgIuOAkSIpOwogICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBteV9hbGVydChqc29uLm1zZyArICIs54q25oCB77yaICIgKyBqc29uLndvcmtzdGF0ZV9tc2cpOwogICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlQWxsKCdsb2FkaW5nJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgIH0KICAgIGZ1bmN0aW9uIGdldF9hbGxfZG93bl91cmwoKSB7CiAgICAgICAgY29uZmlnWyJ3b3JrZGF0YSJdW2NvbmZpZy50YWJfaWRdID0gW107CiAgICAgICAgY29uZmlnLmRyb3Bkb3duLnJlbG9hZERhdGEoYGRyb3Bkb3duX3RhYiR7Y29uZmlnLnRhYl9pZH1gLCB7ICdkYXRhJzogc2V0X2Ryb3Bkb3duX2RhdGEoKSB9KQogICAgICAgIHNldGRyb3Bkb3duX29mZl9vbih0cnVlKTsKCiAgICAgICAgc2VydmVyX2ZpbGVuYW1lX2RvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0YWIke2NvbmZpZy50YWJfaWR9IC5zZXJ2ZXJfZmlsZW5hbWVgKTsKICAgICAgICB0X3BhcnNla2V5ID0gc2VydmVyX2ZpbGVuYW1lX2RvbS5nZXRBdHRyaWJ1dGUoInBhcnNla2V5Iik7CiAgICAgICAgdF93b3JraWQgPSBzZXJ2ZXJfZmlsZW5hbWVfZG9tLmdldEF0dHJpYnV0ZSgid29ya2lkIik7CiAgICAgICAgbGV0IGRvd25fdXJsID0gYCR7Y29uZmlnLm1haW5fdXJsfS9xdWVyeXdvcmtfYWxsLnBocD91c2VybmFtZT0ke2NvbmZpZy51c2VybmFtZX1gOwogICAgICAgIGNvbmZpZ1sid29ya2RhdGEiXVtjb25maWcudGFiX2lkXSA9IFtdOwogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybDogZG93bl91cmwsCiAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAocGFyYW1zKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKDIsIHBhcmFtcyk7CiAgICAgICAgICAgICAgICBteV9hbGVydCgi6K+35bCd6K+V6YeN5paw5p+l6K+iIik7CiAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoanNvbikgewogICAgICAgICAgICAgICAgLy8ganNvbiA9IEpTT04ucGFyc2UocGFyYW1zKTsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKDMsIGpzb24pOwogICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YV9saXN0ID0ganNvbi5kYXRhOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy51YSA9IGpzb24udWE7CiAgICAgICAgICAgICAgICAgICAgY29uZmlnWyJ3b3JrZGF0YSJdW2NvbmZpZy50YWJfaWRdID0gW107CiAgICAgICAgICAgICAgICAgICAgamlleGlfb2tfY291bnQgPSAwOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmogb2YgZGF0YV9saXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnWyJ3b3JrZGF0YSJdW2NvbmZpZy50YWJfaWRdLnB1c2gob2JqKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5jb2RlID09IDAgJiYgb2JqLndvcmtzdGF0ZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubGluayA9IG9iai5kb3dubG9hZF91cmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmxpbmsuaW5kZXhPZigiaHR0cCIpID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaWV4aV9va19jb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmZpZ1sid29ya2RhdGEiXVtjb25maWcudGFiX2lkXS5wdXNoKG9iaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG15X2FsZXJ0KCLplJnor6865LiL6L296ZO+5o6l6Kej5p6Q5byC5bi444CQIiArIGpzb24ubXNnICsgIuOAkSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICAgICAgICAgIHNldGRyb3Bkb3duX29mZl9vbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coImVlZWVlIixjb25maWcudGFiX2lkLGNvbmZpZ1sid29ya2RhdGEiXVtjb25maWcudGFiX2lkXSkKICAgICAgICAgICAgICAgICAgICBjb25maWcuZHJvcGRvd24ucmVsb2FkRGF0YShgZHJvcGRvd25fdGFiJHtjb25maWcudGFiX2lkfWAsIHsgJ2RhdGEnOiBzZXRfZHJvcGRvd25fZGF0YSgpIH0pCiAgICAgICAgICAgICAgICAgICAgbXlfYWxlcnQoIuafpeivouaIkOWKnzrlt7Lop6PmnpDmiJDlip/ku7vliqEgIiArIGppZXhpX29rX2NvdW50ICsgIiDkuKoiKTsKCgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBteV9hbGVydCgi5aSx6LSlOiIgKyBqc29uLm1zZyk7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2VBbGwoJ2xvYWRpbmcnKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAogICAgICAgIH0pOwoKICAgIH0KICAgIGZ1bmN0aW9uIGdldF9kb3duX2xpc3Qoc2hvcnR1cmwsIHBhc3N3b3JkKSB7CiAgICAgICAgbGV0IHBhcnNlX2tleSA9IGdldF9wYXJzZV9rZXlfdmFsdWUoY29uZmlnLnRhYl9pZCkKICAgICAgICBsZXQgeHVhbnpoZV9saXN0ID0gT2JqZWN0LmtleXMoZ2V0X3h1YW56aGVfbGlzdCgpKTsKICAgICAgICAvL2xldCBmaWxlbmFtZV90ZXh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnNlcnZlcl9maWxlbmFtZSIpLnRleHRDb250ZW50OwogICAgICAgIGxldCBmaWxlbmFtZV90ZXh0ID0gY29uZmlnLmZpbGVfbmFtZTsKICAgICAgICBsZXQgdXJsID0gYCR7Y29uZmlnLm1haW5fdXJsfS9hZGR3b3JrLnBocGA7CiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdHlwZTogJ1BPU1QnLAogICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgYXN5bmM6IHRydWUsCiAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICJmaWxlbmFtZSI6ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVuYW1lX3RleHQpLAogICAgICAgICAgICAgICAgInVzZXJuYW1lIjpjb25maWcudXNlcm5hbWUsCiAgICAgICAgICAgICAgICAiYmFpZHVfZmlsZWlkIjp4dWFuemhlX2xpc3RbMF0sCiAgICAgICAgICAgICAgICAic2l6ZSI6Y29uZmlnLmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICJzaG9ydHVybCI6c2hvcnR1cmwsCiAgICAgICAgICAgICAgICAicGFzc3dvcmQiOnBhc3N3b3JkLAogICAgICAgICAgICAgICAgInBhcnNla2V5IjpwYXJzZV9rZXksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcykKICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAwIHx8IHJlcy5jb2RlID09IDEzKSB7CgogICAgICAgICAgICAgICAgICAgIHJlcV9kYXRhID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coMiwgcmVxX2RhdGEpOwogICAgICAgICAgICAgICAgICAgIHNlcnZlcl9maWxlbmFtZV9kb20gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdGFiJHtjb25maWcudGFiX2lkfSAuc2VydmVyX2ZpbGVuYW1lYCk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiByZXFfZGF0YSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSBpbiBbJ2ZpbGVuYW1lJywgJ3dvcmtzdGF0ZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfZmlsZW5hbWVfZG9tLnNldEF0dHJpYnV0ZShpLCByZXFfZGF0YVtpXSkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgMDogIuS7u+WKoeWIm+W7uuWujOaIkCIsCiAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAi5Lu75Yqh5bey5a2Y5Zyo6K+35Yu/6YeN5aSN5o+Q5LqkIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteV9hbGVydChg5oiQ5YqfOiR7dFtyZXMuY29kZV19LOS7u+WKoWlk5Li6OmAgKyByZXFfZGF0YVsid29ya2lkIl0pOwoKICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAxMDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy/ph43nva7lr4bnoIEKICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3BhcnNlX2tleShjb25maWcudGFiX2lkLCAiIikKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2VBbGwoJ2xvYWRpbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgbXlfYWxlcnQoIuWvhueggemUmeivryjlj6/og73lr4bnoIHotoXlh7rmnInmlYjmnJ8p77yM6K+36YeN5paw5o+Q5LqkIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBteV9hbGVydCgi5aSx6LSlOiIgKyByZXMubXNnKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2VBbGwoJ2xvYWRpbmcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIG15X2FsZXJ0KCLplJnor6865Yid5aeL6Kej5p6Q6K+35rGC6K6/6Zeu5aSx6LSl77yM6YeN5paw5o+Q5LqkIik7CiAgICAgICAgICAgICAgICBsYXllci5jbG9zZUFsbCgnbG9hZGluZycpOwogICAgICAgICAgICB9LAogICAgICAgIH0pOwoKICAgIH0KfSkoKQ==
Add Comment
Please, Sign In to add comment