Advertisement
xiaomianao666

邀您一起看:““””云南虫谷

Oct 25th, 2021
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥““””云南虫谷@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0ouWHveaVsFwiLFwicGF0aFwiOlwic2VhcmNoTG9hZFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gc2VhcmNoTG9hZCgpIHtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGZ1bmN0aW9uIHJ1bkNvZGUocnVsZSkge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxuICAgICAgICAgICAgICAgIHJldHVybiBjb2RlID8gZXZhbChjb2RlKSA6IHJ1bGVcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOaQnOe0ouetlueVpei/h+a7pFxcbiAgICAgICAgbGV0IG5hbWUgPSAnc3RyYXRlZ3k6JyArIENvbmZpZy5zdHJhdGVneVtDb25maWcuYXBwbHldLFxcbiAgICAgICAgICAgIHN0cmF0ZWd5ID0gSlNPTi5wYXJzZShyZWFkRmlsZShuYW1lKSksXFxuICAgICAgICAgICAgaG9tZUxpc3QgPSBKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2hvbWUnKSkuZmlsdGVyKChpdGVtKSA9PlxcbiAgICAgICAgICAgICAgICBpdGVtLnNlYXJjaEZpbmQgJiYgaXRlbS50aXRsZSAhPSBNWV9SVUxFLnRpdGxlICYmXFxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5Lmdyb3VwLmZpbmQoKHYpID0+IGl0ZW0uZ3JvdXAgPT0gdikgJiZcXG4gICAgICAgICAgICAgICAgIXN0cmF0ZWd5LmV4Y2x1ZGUuZmluZCgodikgPT4gaXRlbS50aXRsZSA9PSB2KSlcXG4gICAgICAgICAgICAuc2xpY2UoKHBhZ2UgLSAxKSAqIENvbmZpZy50aHJlYWRDbnQsIHBhZ2UgKiBDb25maWcudGhyZWFkQ250KVxcbiAgICAgICAgaWYgKGhvbWVMaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gW11cXG4gICAgICAgIGxldCByZXMgPSBbXSxcXG4gICAgICAgICAgICBydWxlTGlzdCA9IFtdLFxcbiAgICAgICAgICAgIHVybExpc3QgPSBbXVxcbiAgICAgICAgaG9tZUxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIC8vIOe8k+WtmOino+aekOinhOWImVxcbiAgICAgICAgICAgICAgICBydWxlTGlzdC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoRmluZDogaXRlbS5zZWFyY2hGaW5kLFxcbiAgICAgICAgICAgICAgICAgICAgc2RldGFpbEZpbmQ6IFsnJywgJyonXS5pbmNsdWRlcyhpdGVtLnNkZXRhaWxfZmluZF9ydWxlKSA/IGl0ZW0uZGV0YWlsX2ZpbmRfcnVsZSA6IGl0ZW0uc2RldGFpbF9maW5kX3J1bGUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogWycnLCAnKiddLmluY2x1ZGVzKGl0ZW0uc2RldGFpbF9maW5kX3J1bGUpID8gaXRlbS5kZXRhaWxfY29sX3R5cGUgOiBpdGVtLnNkZXRhaWxfY29sX3R5cGUsXFxuICAgICAgICAgICAgICAgICAgICBsYXN0X2NoYXB0ZXJfcnVsZTogaXRlbS5sYXN0X2NoYXB0ZXJfcnVsZSxcXG4gICAgICAgICAgICAgICAgICAgIHByZVJ1bGU6IGl0ZW0ucHJlUnVsZSxcXG4gICAgICAgICAgICAgICAgICAgIHVybFBhcmFtOiAoaXRlbS5zZWFyY2hfdXJsLm1hdGNoKC87LiovKSB8fCBbJyddKVswXSxcXG4gICAgICAgICAgICAgICAgICAgIHVhOiBpdGVtLnVhXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIC8vIOaQnOe0oumTvuaOpeWkhOeQhlxcbiAgICAgICAgICAgICAgICBsZXQgc2VhcmNoVXJsID0gaXRlbS5zZWFyY2hfdXJsLnNwbGl0KCc7JykubWFwKCh2KSA9PiB2LnJlcGxhY2UoL++8m++8my9nLCAnOycpKVxcbiAgICAgICAgICAgICAgICBzZWFyY2hVcmxbMF0gPSBzZWFyY2hVcmxbMF0ucmVwbGFjZShzZWFyY2hVcmxbMF0uaW5jbHVkZXMoJyUlJykgPyAvJSUvZyA6IC9cXFxcKlxcXFwqL2csIGVuY29kZVN0cihrZXl3b3JkLCBzZWFyY2hVcmxbMl0pKVxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcZCspQCk/KD86XFxcXCpcXFxcZCtAKT8vZywgKF8sICQxKSA9PiBwYXJzZUludCgkMSB8fCAwKSArIDEpXFxuICAgICAgICAgICAgICAgIGxldCBzZWFyY2hSZXEgPSB7IHVybDogcnVuQ29kZShzZWFyY2hVcmxbMF0pLCBvcHRpb25zOiB7IGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluOyBjaGFyc3Q9VVRGLTgnIH0sIG1ldGhvZDogc2VhcmNoVXJsWzFdLCB0aW1lb3V0OiBDb25maWcucmVzcG9uc2VUaW1lIH0gfVxcbiAgICAgICAgICAgICAgICAvLyBwb3N05pa55rOV5pe26L2s5o2i5Y+C5pWwXFxuICAgICAgICAgICAgICAgIGlmICgvXnBvc3QkL2kudGVzdChzZWFyY2hSZXEub3B0aW9uc1snbWV0aG9kJ10pKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgW29yaVVybCwgYm9keV0gPSBzZWFyY2hSZXEudXJsLnNwbGl0KCc/JylcXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFJlcS51cmwgPSBvcmlVcmwucmVwbGFjZSgn77yf77yfJywgJz8nKVxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhcnRzV2l0aCgnSnNvbkJvZHk9JykpIGJvZHkgPSBib2R5LnNsaWNlKDkpXFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hSZXEub3B0aW9uc1snYm9keSddID0gYm9keVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChzZWFyY2hVcmxbMl0pIHNlYXJjaFJlcS5vcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10uc2xpY2UoMCwgMTkpICsgc2VhcmNoVXJsWzJdXFxuICAgICAgICAgICAgICAgIGlmIChzZWFyY2hVcmxbM10pIHNlYXJjaFVybFszXS5tYXRjaCgveyguKil9LylbMV0uc3BsaXQoJyYmJykuZm9yRWFjaCgodikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IHYuc3BsaXQoJ0AnKVxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1trZXldID0gcnVuQ29kZSh2YWx1ZSlcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgLy8g5re75Yqg5YWo5bGAVUFcXG4gICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hSZXEub3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnVhID09ICdwYycpXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gUENfVUFcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udWEgPT0gJ21vYmlsZScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gTU9CSUxFX1VBXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgdXJsTGlzdC5wdXNoKHNlYXJjaFJlcSlcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIHVybExpc3QucHVzaCh7IHVybDogJ2hpa2VyOi8vZXJyb3InLCBvcHRpb25zOiBlIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIC8vIOiOt+WPluaQnOe0oue7k+aenFxcbiAgICAgICAgYmF0Y2hGZXRjaCh1cmxMaXN0KS5mb3JFYWNoKChzZWFyY2hIdG1sLCBzZWFyY2hJbmRleCkgPT4ge1xcbiAgICAgICAgICAgIGxldCBpdGVtUnVsZSA9IHJ1bGVMaXN0W3NlYXJjaEluZGV4XSxcXG4gICAgICAgICAgICAgICAgaXRlbVVybCA9IHVybExpc3Rbc2VhcmNoSW5kZXhdLFxcbiAgICAgICAgICAgICAgICBiYXRjaFNlYXJjaF9yZXN1bHQgPSBbXVxcbiAgICAgICAgICAgIE1ZX1VSTCA9IGl0ZW1VcmwudXJsXFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1VcmwudXJsID09ICdoaWtlcjovL2Vycm9yJylcXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHsgbWVzc2FnZTogJ+mTvuaOpeWkhOeQhuaXtuWHuumUmTpcXFxcbicgKyBpdGVtVXJsLm9wdGlvbnMubWVzc2FnZSB9XFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVybEhhbmRsZSh1cmwsIGFkZFJ1bGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghdXJsKSByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAvLyDlrZDpobXpnaLmt7vliqBydWxlXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vcGFnZS8nKSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFssIHVybCwgcGFyYW1zLCBtYXJrXSA9IC9eKC4qPykoPzpcXFxcPyguKj8pKT8oIy4qPyk/JC8uZXhlYyh1cmwpXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJylcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmZpbmRJbmRleCgodikgPT4gdi5zdGFydHNXaXRoKCdydWxlPScpKSA9PSAtMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsICs9ICdydWxlPScgKyBpdGVtUnVsZS50aXRsZSArICcmJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBwYXJhbXMuam9pbignJicpICsgKG1hcmsgPyAnJicgKyBtYXJrIDogJycpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqDkuoznuqfop4TliJlcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRSdWxlICYmICEvQCg/OnJ8bGF6eVIpdWxlPS8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1SdWxlLnNkZXRhaWxGaW5kKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghLztnZXR8O3Bvc3QvaS50ZXN0KHVybCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJztnZXQ7JyArIGl0ZW1Vcmwub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXS5zcGxpdCgnY2hhcnN0PScpWzFdICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7eycgKyBPYmplY3Qua2V5cyhpdGVtVXJsLm9wdGlvbnMuaGVhZGVycylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYgIT0gJ0NvbnRlbnQtVHlwZScpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiB2ICsgJ0AnICsgaXRlbVVybC5vcHRpb25zLmhlYWRlcnNbdl0ucmVwbGFjZSgvOy9nLCAn77yb77ybJykpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJiYnKSArICd9J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtUnVsZS51cmxQYXJhbS5yZXBsYWNlKC9eO3Bvc3QvaSwgJztnZXQnKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJ0BydWxlPScgKyAoaXRlbVJ1bGUuc2RldGFpbEZpbmQuc3RhcnRzV2l0aCgnanM6JykgP1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVJ1bGUuc2RldGFpbEZpbmQgOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVJ1bGUuc2RldGFpbEZpbmQucmVwbGFjZSgnPT0+JywgJzsnICsgaXRlbVJ1bGUuY29sX3R5cGUgKyAnPT0+JylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB1cmwgPSAnd2ViOi8vJyArIHVybFxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgLy8g5LqM57qn6aG16Z2i6aKE5aSE55CG5LiO6ZSZ6K+v5aSE55CGXFxuICAgICAgICAgICAgICAgICAgICBpZiAodXJsLmluY2x1ZGVzKCdAcnVsZT1qczonKSkgdXJsID0gdXJsLnJlcGxhY2UoJ0BydWxlPWpzOicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAcnVsZT1qczonICsgJC50b1N0cmluZygoaXRlbVJ1bGUsIHVybEhhbmRsZSwgcmVDb25maWcsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVJ1bGUgPSBpdGVtUnVsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cmxIYW5kbGUgPSB1cmxIYW5kbGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVDb25maWcgPSByZUNvbmZpZ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2ggPSAoZnVuY3Rpb24oZnVuYykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih1cmwsIHBhcmFtcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyh1cmxIYW5kbGUodXJsKSwgcGFyYW1zKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKGZldGNoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGZ1bmN0aW9uKHVybCwgcGFyYW1zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmhlYWRlcnMgPSBwYXJhbXMuaGVhZGVycyB8fCB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2godXJsLCBwYXJhbXMpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQgPSAoZnVuY3Rpb24oZnVuYykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWwpKSBlbCA9IGVsLmRhdGFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyhlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwgJiYgdXJsSGFuZGxlKHYudXJsKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgaXRlbVJ1bGUuY29sX3R5cGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKHNldFJlc3VsdClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdCA9IHNldFJlc3VsdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGFzdENoYXB0ZXJSdWxlKGl0ZW1SdWxlLmxhc3RfY2hhcHRlcl9ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBpdGVtUnVsZSwgdXJsSGFuZGxlLCByZUNvbmZpZywgbmFtZSkgKyAnO3RyeXtcXFxcbicpICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxcXG59Y2F0Y2goZSl7JyArICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5bCP56iL5bqP44CQJyArIGl0ZW1SdWxlLnRpdGxlICsgJ+OAkeS4re+8jOatpOS6jOe6p+mhtemdouS4jeaUr+aMgeaIluiAheW3suWkseaViO+8jOmUmeivr+S/oeaBr++8mlxcXFxuXFxcXG4nICsgKGUubWVzc2FnZSB8fCBlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7IGNvbF90eXBlOiAnbGluZScgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6IzQwOWVmZlxcXCI+5o6S6Zmk5bCP56iL5bqPPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdjb25maXJtOi8v6KaB5o6S6Zmk6K+l5bCP56iL5bqP5ZCXPy5qczonICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZUNvbmZpZygnb2JqLmV4Y2x1ZGUucHVzaChcXFwiJyArIGl0ZW1SdWxlLnRpdGxlICsgJ1xcXCIpJywgbmFtZSkucmVwbGFjZSgncmVmcmVzaFBhZ2UoZmFsc2UpJywgJycpICtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnO1xcXCJ0b2FzdDovL+W3suaOkumZpOWwj+eoi+W6j+OAkCcgKyBpdGVtUnVsZS50aXRsZSArICfjgJFcXFwiJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgKyAnfSdcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVJ1bGUuc2VhcmNoRmluZC5zdGFydHNXaXRoKCdqczonKSkge1xcbiAgICAgICAgICAgICAgICAgICAgLy8ganPop6PmnpBcXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmFja3VwID0geyBmZXRjaDogdGhpcy5mZXRjaCwgcmVxdWVzdDogdGhpcy5yZXF1ZXN0IH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRVcmwoKSB7IHJldHVybiBNWV9VUkwgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2ggPSAoZnVuY3Rpb24gKGZ1bmMpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmModXJsSGFuZGxlKHVybCksIHBhcmFtcylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuZmV0Y2gpXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0ID0gZnVuY3Rpb24gKHVybCwgcGFyYW1zKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaGVhZGVycyA9IHBhcmFtcy5oZWFkZXJzIHx8IHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2godXJsLCBwYXJhbXMpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoaXRlbVJ1bGUucHJlUnVsZSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRSZXNDb2RlKCkgeyByZXR1cm4gc2VhcmNoSHRtbCB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0UmVzdWx0KGVsKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbCkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LnRpdGxlID0gKENvbmZpZy5zZWFyY2hNb2RlID09ICflhoXnva4nICYmICEvXuKAnOKAnHzigJjigJgvLnRlc3Qodi50aXRsZSkgPyAn4oCc4oCc4oCd4oCdJyA6ICcnKSArIHYudGl0bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdXJsSGFuZGxlKHYudXJsLCB0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5kZXNjID0gaXRlbVJ1bGUudGl0bGUgKyAodi5kZXNjID8gJyDwn5S5ICcgKyB2LmRlc2MgOiAnJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuY29sX3R5cGUgPSAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaFNlYXJjaF9yZXN1bHQucHVzaCh2KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRTZWFyY2hSZXN1bHQoZWwpIHsgcmV0dXJuIHNldFJlc3VsdChlbCkgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldEhvbWVSZXN1bHQoZWwpIHsgcmV0dXJuIHNldFJlc3VsdChlbCkgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoaXRlbVJ1bGUuc2VhcmNoRmluZC5zbGljZSgzKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGJhY2t1cClcXG4gICAgICAgICAgICAgICAgICAgIH0pKClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOaZrumAmuino+aekFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmRSdWxlID0gaXRlbVJ1bGUuc2VhcmNoRmluZC5zcGxpdCgnOycpXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckFycmF5KHNlYXJjaEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgW3RpdGxlLCB1cmwsIGRlc2MsIGNvbnRlbnQsIGltZ10gPSBmaW5kUnVsZS5tYXAoKHYsIGkpID0+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkNvZGUodiA9PSAnKicgPyAnJyA6ICgoZmxhZykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZyA/IHBhcnNlRG9tKGRhdGEsIHYpIDogcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KShpID09IDEgfHwgaSA9PSA0KSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aXRsZSArIGRlc2MgKyBjb250ZW50KS5pbmNsdWRlcyhrZXl3b3JkKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hTZWFyY2hfcmVzdWx0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChDb25maWcuc2VhcmNoTW9kZSA9PSAn5YaF572uJyAmJiAhL17igJzigJx84oCY4oCYLy50ZXN0KHRpdGxlKSA/ICfigJzigJzigJ3igJ0nIDogJycpICsgdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybEhhbmRsZSh1cmwsIHRydWUpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXRlbVJ1bGUudGl0bGUgKyAoZGVzYyA/ICcg8J+UuSAnICsgZGVzYyA6ICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGltZyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWMnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGlmIChiYXRjaFNlYXJjaF9yZXN1bHQubGVuZ3RoKSBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXMsIGJhdGNoU2VhcmNoX3Jlc3VsdClcXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNlYXJjaEh0bWwgJiYgIWl0ZW1VcmwudXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykpIHRocm93IHsgbWVzc2FnZTogJ+aXoOazleiuv+mXru+8jOacquiOt+WPluWIsOe9kemhtea6kOS7o+eggScgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgLy8g5pCc57Si57uT5p6c6ZSZ6K+v5aSE55CGXFxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5bCP56iL5bqP44CQJyArIGl0ZW1SdWxlLnRpdGxlICsgJ+OAkeS4jeaUr+aMgeaIluiAheW3suWkseaViO+8jOeCueWHu+afpeeci+mUmeivr+S/oeaBrycsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdjb25maXJtOi8vJyArIChlLm1lc3NhZ2UgfHwgZSkgKyAnXFxcXG5cXFxcbuaYr+WQpuaOkumZpOivpeWwj+eoi+W6jz8uanM6JyArXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVDb25maWcoJ29iai5leGNsdWRlLnB1c2goXFxcIicgKyBpdGVtUnVsZS50aXRsZSArICdcXFwiKScsIG5hbWUpLnJlcGxhY2UoJ3JlZnJlc2hQYWdlKGZhbHNlKScsICcnKSArXFxuICAgICAgICAgICAgICAgICAgICAgICAgJztcXFwidG9hc3Q6Ly/lt7LmjpLpmaTlsI/nqIvluo/jgJAnICsgaXRlbVJ1bGUudGl0bGUgKyAn44CRXFxcIicsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIHJldHVybiByZXNcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgcmV0dXJuIFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfmkJzntKLml7blh7rnjrDoh7Tlkb3plJnor6/vvIzngrnlh7vmn6XnnIvop6PlhrPlip7ms5VcXFxcbicgKyAoZS5tZXNzYWdlIHx8IGUpLFxcbiAgICAgICAgICAgIHVybDogJCgn54K55Ye756Gu5a6a5ZCO57uT5p2f5pCc57Si77yM5bCG5pCc57Si57q/56iL6LCD5pW05Li6Me+8jFxcXFxu6YeN5paw5pCc57Si55u05Yiw5YaN5qyh5Ye6546w55u45ZCM55qE5oql6ZSZ77yMXFxcXG7nhLblkI7lsLHlj6/ku6XlrprkvY3lvJXotbfoh7Tlkb3plJnor6/nmoTlsI/nqIvluo/vvIzmiYvliqjlsIblhbbmjpLpmaQnKS5jb25maXJtKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdiYXRjaFNlYXJjaC1rdycsICcnKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfV1cXG4gICAgfVxcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcImljb25fMlwiLFwibmFtZVwiOlwi5Z+656GA6K6+572uXCIsXCJwYXRoXCI6XCJjb25maWdcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJiYXRjaFNlYXJjaC1vcmlJbmRleFxcXCIpO3JlZnJlc2hQYWdlKCknKVxcbmxldCBlbCA9IFtdLFxcbiAgICBDb25maWcgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdiYXNlQ29uZmlnJykpLFxcbiAgICBhbGxHcm91cCA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vaG9tZScpKS5tYXAoKHYpID0+IHYuZ3JvdXApLmZpbHRlcigodiwgaSwgYXJyKSA9PiBhcnIuaW5kZXhPZih2KSA9PSBpKSxcXG4gICAgYW5vdGhlck1vZGUgPSB7ICflhoXnva4nOiAn5Y6f55SfJywgJ+WOn+eUnyc6ICflhoXnva4nIH0gW0NvbmZpZy5zZWFyY2hNb2RlXVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3JlQ29uZmlnJykpLnJ1bGUpXFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAn5pCc57Si57q/56iLOiAnICsgQ29uZmlnLnRocmVhZENudCxcXG4gICAgdXJsOiAnaW5wdXQ6Ly8vLy8v57q/56iL5pWwOiDlkIzml7bmkJzntKLnmoTlsI/nqIvluo/mlbDph48uanM6JyArIHJlQ29uZmlnKCdvYmoudGhyZWFkQ250PXBhcnNlSW50KGlucHV0KScpLFxcbiAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy/orr7nva4nXFxufSwge1xcbiAgICB0aXRsZTogJ+i2heaXtijmr6vnp5IpOiAnICsgQ29uZmlnLnJlc3BvbnNlVGltZSxcXG4gICAgdXJsOiAnaW5wdXQ6Ly8vLy8v6LaF5pe25q+r56eS5pWwOiDmkJzntKLmr4/kuKrlsI/nqIvluo/ml7bnmoTmnIDlpKforr/pl67ml7bpl7QuanM6JyArIHJlQ29uZmlnKCdvYmoucmVzcG9uc2VUaW1lPXBhcnNlSW50KGlucHV0KScpLFxcbiAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy/ljoblj7InXFxufSwge1xcbiAgICB0aXRsZTogJ+aQnOe0ouaooeW8jzogJyArIENvbmZpZy5zZWFyY2hNb2RlLFxcbiAgICB1cmw6ICdjb25maXJtOi8v6KaB5YiH5o2i5pCc57Si5qih5byP5Li6JyArIGFub3RoZXJNb2RlICsgJ+WQlz9cXFxcbuWGhee9ruaooeW8jzog6aaW6aG15ZCM5bGP5pi+56S65pCc57Si57uT5p6cXFxcXG7ljp/nlJ/mqKHlvI86IOiwg+eUqOinhueVjOaQnOe0ouaYvuekuue7k+aenC5qczonICsgcmVDb25maWcoJ29iai5zZWFyY2hNb2RlPVxcXCInICsgYW5vdGhlck1vZGUgKyAnXFxcIicpLFxcbiAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy/kupHlpIfku70nXFxufSwge1xcbiAgICB0aXRsZTogJ+aWsOWinuetlueVpScsXFxuICAgIHVybDogJ2lucHV0Oi8vJyArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIGhpbnQ6ICfnu5nmlrDnrZbnlaXotbfkuKrlkI3np7DlkKcnLFxcbiAgICAgICAganM6IHJlQ29uZmlnKCdvYmouc3RyYXRlZ3kucHVzaChpbnB1dCknKSArICc7XFxcImhpa2VyOi8vcGFnZS9zdHJhdGVneT9uYW1lPVxcXCIraW5wdXQrXFxcIiNub1JlY29yZEhpc3RvcnkjXFxcIidcXG4gICAgfSksXFxuICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL+S5puetvidcXG59LCB7IGNvbF90eXBlOiAnbGluZV9ibGFuaycgfSlcXG5cXG5sZXQgb3JpSW5kZXggPSBnZXRWYXIoJ2JhdGNoU2VhcmNoLW9yaUluZGV4JywgJy0xJylcXG5Db25maWcuc3RyYXRlZ3kuZm9yRWFjaCgobmFtZSwgaW5kZXgpID0+IHtcXG4gICAgZWwucHVzaCh7XFxuICAgICAgICB0aXRsZTogJyA8c3BhbiBzdHlsZT1cXFwiY29sb3I6YmxhY2tcXFwiPjxiaWc+PGI+JyArIG5hbWUsXFxuXFx0ICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMvaG9tZV9pY29uX2NvZGUnLFxcbiAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAnIOe8lui+kSAnLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3N0cmF0ZWd5P25hbWU9JyArIG5hbWUsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAnIOabtOWQjSAnLFxcbiAgICAgICAgdXJsOiAnaW5wdXQ6Ly8nICsgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxcbiAgICAgICAgICAgIGhpbnQ6ICfopoHmlLnmiJDku4DkuYjlkI3np7AnLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdzdHJhdGVneTonICsgaW5wdXQsIHJlYWRGaWxlKG5hbWUpKVxcbiAgICAgICAgICAgICAgICBkZWxldGVGaWxlKG5hbWUpXFxuICAgICAgICAgICAgfSwgJ3N0cmF0ZWd5OicgKyBuYW1lKSArICc7JyArIHJlQ29uZmlnKCdvYmouc3RyYXRlZ3lbJyArIGluZGV4ICsgJ109aW5wdXQnKVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAnIOWIoOmZpCAnLFxcbiAgICAgICAgdXJsOiAnY29uZmlybTovL+imgeWIoOmZpOetlueVpeOAkCcgKyBuYW1lICsgJ+OAkeWQlz8uanM6ZGVsZXRlRmlsZShcXFwic3RyYXRlZ3k6JyArIG5hbWUgKyAnXFxcIik7JyArIHJlQ29uZmlnKCdvYmouc3RyYXRlZ3kuc3BsaWNlKCcgKyBpbmRleCArICcsMSk7b2JqLmFwcGx5PTAnKSArICc7XFxcInRvYXN0Oi8v562W55Wl5bey5bqU55So5Li66aaW5LiqXFxcIicsXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiBvcmlJbmRleCA+PSAwID8gKChpbmRleCA9PSBvcmlJbmRleCA/ICfigJzigJwnIDogJycpICsgJyDih4sgJyArIChpbmRleCArIDEpLnRvU3RyaW5nKCkpIDogJyDnp7vliqggJyxcXG4gICAgICAgIHVybDogb3JpSW5kZXggPj0gMCA/XFxuICAgICAgICAgICAgJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpjbGVhclZhcihcXFwiYmF0Y2hTZWFyY2gtb3JpSW5kZXhcXFwiKTsnICtcXG4gICAgICAgICAgICByZUNvbmZpZygkLnRvU3RyaW5nKChvcmlJbmRleCwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgb2JqLnN0cmF0ZWd5LnNwbGljZShpbmRleCwgMCwgb2JqLnN0cmF0ZWd5LnNwbGljZShvcmlJbmRleCwgMSlbMF0pXFxuICAgICAgICAgICAgICAgIG9iai5hcHBseSA9IDBcXG4gICAgICAgICAgICB9LCBvcmlJbmRleCwgaW5kZXgpKSArICc7XFxcInRvYXN0Oi8v562W55Wl5bey5bqU55So5Li66aaW5LiqXFxcIicgOlxcbiAgICAgICAgICAgICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dFZhcignYmF0Y2hTZWFyY2gtb3JpSW5kZXgnLCBpbmRleC50b1N0cmluZygpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGluZGV4KSxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgfSwgeyBjb2xfdHlwZTogJ2xpbmUnIH0pXFxufSlcXG5cXG5zZXRSZXN1bHQoZWwpXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzNcIixcIm5hbWVcIjpcIuetlueVpeivpuaDhVwiLFwicGF0aFwiOlwic3RyYXRlZ3lcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXCJiYXRjaFNlYXJjaC1zdHJhdGVneVNob3dcXFwiKScpXFxubGV0IGVsID0gW10sXFxuICAgIG5hbWUgPSAnc3RyYXRlZ3k6JyArIGdldFBhcmFtKCduYW1lJyksXFxuICAgIHN0cmF0ZWd5ID0gcmVhZEZpbGUobmFtZSksXFxuICAgIHJ1bGVzID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9ob21lJykpLm1hcCgodikgPT4gKHsgdGl0bGU6IHYudGl0bGUsIGdyb3VwOiB2Lmdyb3VwIH0pKSxcXG4gICAgYWxsR3JvdXAgPSBydWxlcy5tYXAoKHYpID0+IHYuZ3JvdXApLmZpbHRlcigodiwgaSwgYXJyKSA9PiBhcnIuaW5kZXhPZih2KSA9PSBpKVxcbnRyeSB7IHN0cmF0ZWd5ID0gSlNPTi5wYXJzZShzdHJhdGVneSkgfSBjYXRjaCAoZSkge1xcbiAgICBzdHJhdGVneSA9IHsgZ3JvdXA6IFtdLCBleGNsdWRlOiBbXSB9XFxuICAgIHNhdmVGaWxlKG5hbWUsIEpTT04uc3RyaW5naWZ5KHN0cmF0ZWd5KSlcXG59XFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcmVDb25maWcnKSkucnVsZSlcXG5zZXRQYWdlVGl0bGUobmFtZSlcXG5cXG5lbC5wdXNoKHtcXG4gICAgdGl0bGU6ICcmbmJzcCAmbmJzcDxiaWc+PGI+5YiG57uEPC9iPjwvYmlnPicsXFxuICAgIGNvbF90eXBlOiAncmljaF90ZXh0J1xcbn0sIHtcXG4gICAgdGl0bGU6ICflhajpgIknLFxcbiAgICB1cmw6ICcjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6JyArIHJlQ29uZmlnKCdvYmouZ3JvdXA9JyArIEpTT04uc3RyaW5naWZ5KGFsbEdyb3VwKSwgbmFtZSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn5YWo5LiN6YCJJyxcXG4gICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgKyByZUNvbmZpZygnb2JqLmdyb3VwPVtdJywgbmFtZSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KVxcblxcbmFsbEdyb3VwLmZvckVhY2goKHYpID0+IHtcXG4gICAgbGV0IGluZGV4ID0gc3RyYXRlZ3kuZ3JvdXAuaW5kZXhPZih2KVxcbiAgICBlbC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoaW5kZXggPT0gLTEgPyAnJyA6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6IzEyYjY2OFxcXCI+JykgKyAodiB8fCAnW+aXoOWIhue7hF0nKSxcXG4gICAgICAgIHVybDogJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczonICtcXG4gICAgICAgICAgICByZUNvbmZpZygkLnRvU3RyaW5nKCh2LCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIG9iai5ncm91cC5wdXNoKHYpXFxuICAgICAgICAgICAgICAgIGVsc2Ugb2JqLmdyb3VwLnNwbGljZShpbmRleCwgMSlcXG4gICAgICAgICAgICB9LCB2LCBpbmRleCksIG5hbWUpXFxuICAgIH0pXFxufSlcXG5cXG5sZXQgcXVldWVTaG93ID0gZ2V0VmFyKCdiYXRjaFNlYXJjaC1zdHJhdGVneVNob3cnLCAn5bey6YCJJylcXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyB9LCB7XFxuICAgIHRpdGxlOiAnJm5ic3AgJm5ic3A8YmlnPjxiPuaOkumZpDwvYj48L2JpZz4nLFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXG59LCB7XFxuICAgIHRpdGxlOiAn4oe1IOaYvuekuicgKyBxdWV1ZVNob3csXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgocXVldWVTaG93KSA9PiB7XFxuICAgICAgICBwdXRWYXIoJ2JhdGNoU2VhcmNoLXN0cmF0ZWd5U2hvdycsIHsgJ+W+hemAiSc6ICflt7LpgIknLCAn5bey6YCJJzogJ+W+hemAiScgfSBbcXVldWVTaG93XSlcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBxdWV1ZVNob3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJ+WFqOS4jemAiScsXFxuICAgIHVybDogJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczonICsgcmVDb25maWcoJ29iai5leGNsdWRlPVtdJywgbmFtZSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59KVxcblxcbmlmIChxdWV1ZVNob3cgPT0gJ+W3sumAiScpIHJ1bGVzID0gc3RyYXRlZ3kuZXhjbHVkZS5tYXAoKHYpID0+ICh7XFxuICAgIHRpdGxlOiB2LFxcbiAgICB1cmw6ICcjbm9Mb2FkaW5nI0BsYXp5UnVsZT0uanM6JyArIHJlQ29uZmlnKCQudG9TdHJpbmcoKGluZGV4KSA9PiB7IG9iai5leGNsdWRlLnNwbGljZShpbmRleCwgMSkgfSwgc3RyYXRlZ3kuZXhjbHVkZS5pbmRleE9mKHYpKSwgbmFtZSksXFxufSkpXFxuZWxzZSBydWxlcyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHJ1bGVzLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcbiAgICBsZXQgZ0luZGV4ID0gc3RyYXRlZ3kuZ3JvdXAuaW5kZXhPZih2Lmdyb3VwKSxcXG4gICAgICAgIGluZGV4ID0gc3RyYXRlZ3kuZXhjbHVkZS5pbmRleE9mKHYudGl0bGUpXFxuICAgIGlmIChnSW5kZXggIT0gLTEpIHNlbGZbZ0luZGV4XS5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAoaW5kZXggPT0gLTEgPyAnJyA6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6IzEyYjY2OFxcXCI+JykgKyB2LnRpdGxlLFxcbiAgICAgICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgK1xcbiAgICAgICAgICAgIHJlQ29uZmlnKCQudG9TdHJpbmcoKHRpdGxlLCBpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIG9iai5leGNsdWRlLnB1c2godGl0bGUpXFxuICAgICAgICAgICAgICAgIGVsc2Ugb2JqLmV4Y2x1ZGUuc3BsaWNlKGluZGV4LCAxKVxcbiAgICAgICAgICAgIH0sIHYudGl0bGUsIGluZGV4KSwgbmFtZSlcXG4gICAgfSlcXG4gICAgcmV0dXJuIHNlbGZcXG59LCBzdHJhdGVneS5ncm91cC5tYXAoKHYpID0+IFt7IHRpdGxlOiAn4oCc4oCc4oCd4oCdPGI+JyArIHYsIHVybDogJ2hpa2VyOi8vZW1wdHknLCBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnIH1dKSkpXFxuQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZWwsIHJ1bGVzKVxcblxcbnNldFJlc3VsdChlbClcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumHjeiuvuWHveaVsFwiLFwicGF0aFwiOlwicmVDb25maWdcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHJlQ29uZmlnKGNvZGUsIGZpbGUpIHtcXG4gIHJldHVybiAkLnRvU3RyaW5nKChjb2RlLCBmaWxlKSA9PiB7XFxuICAgIGxldCBvYmogPSBKU09OLnBhcnNlKHJlYWRGaWxlKGZpbGUpKVxcbiAgICBuZXcgRnVuY3Rpb24oJ29iaicsIGNvZGUpKG9iailcXG4gICAgc2F2ZUZpbGUoZmlsZSwgSlNPTi5zdHJpbmdpZnkob2JqKSlcXG4gICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmiJDlip8nXFxuICB9LCBjb2RlLCBmaWxlIHx8ICdiYXNlQ29uZmlnJylcXG59XFxuLy8gKG5ldyBGdW5jdGlvbignYWFhJywnY29uc29sZS5sb2coYWFhKTtsZXQgYmFjaz17fTtmb3IobGV0IGkgaW4gYWFhKXtiYWNrW2ldPXRoaXNbaV19O09iamVjdC5hc3NpZ24odGhpcywgYWFhKTtjb25zb2xlLmxvZyhiYmIsY2NjLGRkZCk7T2JqZWN0LmFzc2lnbih0aGlzLCBiYWNrKScpKSh7YmJiOidxcXEnLGNjYzonZWVlJyxkZGQ6J3d3dyd9KVxcblwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIuiBmuaQnOWQm0xpdGVcIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJodHRwczovL3d3dy5pbWFodWF0di5jb20vbW92aWUvNjY4OS5odG1sO2dldDtVVEYtODt7VXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoTGludXjvvJvvvJsgQW5kcm9pZCAxMe+8m++8myBNaSAxMCBQcm8pIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS84OC4wLjQzMjQuMTUyIE1vYmlsZSBTYWZhcmkvNTM3LjM2fVwiLFwiY29sX3R5cGVcIjpcInRleHRfMVwiLFwiZmluZF9ydWxlXCI6XCJqczooXFxuKGl0ZW1SdWxlLCB1cmxIYW5kbGUsIHJlQ29uZmlnLCBuYW1lKSA9PiB7XFxuICAgIHRoaXMuaXRlbVJ1bGUgPSBpdGVtUnVsZTtcXG4gICAgdGhpcy51cmxIYW5kbGUgPSB1cmxIYW5kbGU7XFxuICAgIHRoaXMucmVDb25maWcgPSByZUNvbmZpZztcXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcXG4gICAgZmV0Y2ggPSAoZnVuY3Rpb24gKGZ1bmMpIHtcXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodXJsLCBwYXJhbXMpIHtcXG4gICAgICAgICAgICByZXR1cm4gZnVuYyh1cmxIYW5kbGUodXJsKSwgcGFyYW1zKTtcXG4gICAgICAgIH07XFxuICAgIH0pKGZldGNoKTtcXG4gICAgcmVxdWVzdCA9IGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xcbiAgICAgICAgcGFyYW1zLmhlYWRlcnMgPSBwYXJhbXMuaGVhZGVycyB8fCB7fTtcXG4gICAgICAgIHBhcmFtcy5oZWFkZXJzW1xcXCJVc2VyLUFnZW50XFxcIl0gPSBNT0JJTEVfVUE7XFxuICAgICAgICByZXR1cm4gZmV0Y2godXJsLCBwYXJhbXMpO1xcbiAgICB9O1xcbiAgICBzZXRSZXN1bHQgPSAoZnVuY3Rpb24gKGZ1bmMpIHtcXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwpIHtcXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWwpKSB7XFxuICAgICAgICAgICAgICAgIGVsID0gZWwuZGF0YTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZnVuYyhlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybCAmJiB1cmxIYW5kbGUodi51cmwpO1xcbiAgICAgICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBpdGVtUnVsZS5jb2xfdHlwZTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICkpO1xcbiAgICAgICAgfTtcXG4gICAgfSkoc2V0UmVzdWx0KTtcXG4gICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0O1xcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0O1xcbiAgICBzZXRMYXN0Q2hhcHRlclJ1bGUoaXRlbVJ1bGUubGFzdF9jaGFwdGVyX3J1bGUpO1xcbn1cXG4pKHtcXFwidGl0bGVcXFwiOlxcXCLniLHpurvoirFpXFxcIixcXFwic2VhcmNoRmluZFxcXCI6XFxcIi5zdHVpLXZvZGxpc3RfX21lZGlhJiZsaTtcXFxcbmEmJnRpdGxlO1xcXFxuYSYmaHJlZjtcXFxcbi5waWMtdGV4dCYmVGV4dDtcXFxcbi5kZXRhaWwtLWgzJiZUZXh0O1xcXFxuYSYmZGF0YS1vcmlnaW5hbFxcXCIsXFxcInNkZXRhaWxGaW5kXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxcXG5cXFxcbnRyeXtcXFxcbnZhciBkZXNfcGljID1wYXJzZURvbShodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyk7XFxcXG59Y2F0Y2goZSl7XFxcXG52YXIgZGVzX3BpYyA9Jyc7XFxcXG59XFxcXG5cXFxcbnRyeXtcXFxcbnZhciBkZXNfZGVzYyA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCAnI2Rlc2MmJlRleHQnKTtcXFxcbn1jYXRjaChlKXtcXFxcbnZhciBkZXNfZGVzYyA9J+ayoeacieato+ehruiOt+WPluWJp+aDheeugOS7i++8gSc7XFxcXG59XFxcXG5cXFxcbnZhciBhcnRzID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCdib2R5JiYuc3R1aS1wYW5uZWxfaGQ6bm90KDpjb250YWlucyjmjpLooYzmppwpKTpub3QoOmNvbnRhaW5zKOeugOS7iykpOm5vdCg6Y29udGFpbnMo5Zac5qyiKSknKTtcXFxcbnZhciB0YWJzID0gW107XFxcXG5mb3IgKHZhciBpIGluIGFydHMpIHtcXFxcbiAgICB0YWJzLnB1c2gocGFyc2VEb21Gb3JIdG1sKGFydHNbaV0sICdoMyYmVGV4dCcpKVxcXFxufVxcXFxuXFxcXG52YXIgY29udHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiYuc3R1aS1wYW5uZWxfYmQnKTtcXFxcbnZhciBsaXN0cyA9W107XFxcXG5mb3IgKHZhciBpIGluIGNvbnRzKSB7XFxcXG4gICAgbGlzdHMucHVzaChwYXJzZURvbUZvckFycmF5KGNvbnRzW2ldLCAndWwmJmxpJykpXFxcXG59XFxcXG5cXFxcbnZhciBsYXp5ID1gQGxhenlSdWxlPS5qczp2YXIgZ2V0ID1mZXRjaChpbnB1dCx7fSk7dmFyIGpzID0gcGFyc2VEb21Gb3JIdG1sKGdldCxcXFxcXFxcIi5zdHVpLXBsYXllcl9fdmlkZW8mJnNjcmlwdCYmSHRtbFxcXFxcXFwiKTtldmFsKGpzLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sJ3BsYXllcl9kYXRhPXsnKSk7dmFyIGpzdXJsPXBsYXllcl9kYXRhLnVybDt2YXLCoGpzb27CoD3CoGZldGNoKGpzdXJsLHt9KTtqc3VybC5pbmRleE9mKFxcXFxcXFwiLmh0bWxcXFxcXFxcIik+LTE/J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScranN1cmw6anN1cmxgXFxcXG5cXFxcbmQucHVzaCh7XFxcXG50aXRsZTon5YWx5pyJJythcnRzLmxlbmd0aCsn5p2h57q/6LevXFxcXFxcXFxu5aaC5p6c5peg5rOV5q2j5bi45pi+56S677yM6K+354K55Ye75q2k5aSE6K6/6Zeu5Y6f572R6aG1JyxcXFxcbiBkZXNjOiBkZXNfZGVzYyxcXFxcblxcXFx0cGljX3VybDogZGVzX3BpYyxcXFxcblxcXFx0dXJsOiBNWV9VUkwsXFxcXG4gY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXFxcbn0pO1xcXFxuXFxcXG5mdW5jdGlvbiBzZXRUYWJzKHRhYnMsIHZhcmkpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY57q/6Lev4oCZ4oCZJyxcXFxcbiAgICAgICAgICAgIHVybDogYCNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcign5oqY5Y+gJyk7aWYoY29uZj09J+WFsycpe3B1dFZhcih7a2V5Oifmipjlj6AnLCB2YWx1ZTon5byAJ30pO31lbHNle3B1dFZhcih7a2V5Oifmipjlj6AnLCB2YWx1ZTon5YWzJ30pfTtyZWZyZXNoUGFnZShmYWxzZSk7JyNub0hpc3RvcnkjaGlrZXI6Ly9lbXB0eSc7J3RvYXN0Oi8v5bey5YiH5o2i5oqY5Y+g54q25oCBJ2AsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pXFxcXG5pZiAoZ2V0VmFyKCfmipjlj6AnKSA9PSAn5byAJ3x8Z2V0VmFyKCfmipjlj6AnKSA9PSAnJykge1xcXFxuICAgICAgICB2YXIgdGl0bGUgPSAnJztcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gXFxcXFxcXCJoaWtlcjovL2VtcHR5QGxhenlSdWxlPS5qczpwdXRWYXIoJ1xcXFxcXFwiICsgdmFyaSArIFxcXFxcXFwiJywgJ1xcXFxcXFwiICsgaSArIFxcXFxcXFwiJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/miJDlip/mm7TmjaLnur/ot6/vvIEnXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0YWJzW2ldICsgKGdldFZhcih2YXJpLCAnMCcpID09IGkgPyAn4pyFJyA6ICcnKSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogdGFicy5sZW5ndGggPiAyID8gJ3RleHRfMicgOiAndGV4dF8yJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY6YCJ6ZuG4oCZ4oCZJyxcXFxcbiAgICAgICAgICAgIHVybDogYCNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcignc2hzb3J0Jyk7aWYoY29uZj09JzEnKXtwdXRWYXIoe2tleTonc2hzb3J0JywgdmFsdWU6JzAnfSk7fWVsc2V7cHV0VmFyKHtrZXk6J3Noc29ydCcsIHZhbHVlOicxJ30pfTtyZWZyZXNoUGFnZSgpOycjbm9IaXN0b3J5I2hpa2VyOi8vZW1wdHknOyd0b2FzdDovL+W3suWIh+aNouaOkuW6jydgLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICB9KVxcXFxuICAgICAgICB2YXIgbGlzdCA9IGxpc3RzW2luZGV4XTtcXFxcblxcXFxuaWYgKGdldFZhcignc2hzb3J0JykgPT0gJzEnKSB7XFxcXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gbGlzdC5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogcGFyc2VEb20obGlzdFtqXSwgJ2EmJmhyZWYnKSArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGxpc3QubGVuZ3RoID4gMyA/ICd0ZXh0XzMnIDogJ3RleHRfMidcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGlzdC5sZW5ndGg7IGorKykge1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHBhcnNlRG9tRm9ySHRtbChsaXN0W2pdLCAnYSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogcGFyc2VEb20obGlzdFtqXSwgJ2EmJmhyZWYnKSArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGxpc3QubGVuZ3RoID4gMyA/ICd0ZXh0XzMnIDogJ3RleHRfMidcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbnNldFRhYnModGFicywgTVlfVVJMKTtcXFxcbnNldExpc3RzKGxpc3RzLCBnZXRWYXIoTVlfVVJMLCAnMCcpKTtcXFxcblxcXFxuZC5wdXNoKHt0aXRsZTogJzxicj4nLCBjb2xfdHlwZTogJ3JpY2hfdGV4dCd9KTtcXFxcbnNldFJlc3VsdChkKTtcXFwiLFxcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzFcXFwiLFxcXCJsYXN0X2NoYXB0ZXJfcnVsZVxcXCI6XFxcIlxcXCIsXFxcInByZVJ1bGVcXFwiOlxcXCJcXFwiLFxcXCJ1cmxQYXJhbVxcXCI6XFxcIlxcXCIsXFxcInVhXFxcIjpcXFwibW9iaWxlXFxcIn0sXFxuZnVuY3Rpb24gdXJsSGFuZGxlKHVybCwgYWRkUnVsZSkge1xcbiAgICBpZiAoIXVybCkge1xcbiAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgfVxcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXFxcImhpa2VyOi8vcGFnZS9cXFwiKSkge1xcbiAgICAgICAgWywgdXJsLCBwYXJhbXMsIG1hcmtdID0gL14oLio/KSg/OlxcXFw/KC4qPykpPygjLio/KT8kLy5leGVjKHVybCk7XFxuICAgICAgICB1cmwgKz0gXFxcIj9cXFwiO1xcbiAgICAgICAgcGFyYW1zID0gKHBhcmFtcyB8fCBcXFwiXFxcIikuc3BsaXQoXFxcIiZcXFwiKTtcXG4gICAgICAgIGlmIChwYXJhbXMuZmluZEluZGV4KCh2KSA9PiB2LnN0YXJ0c1dpdGgoXFxcInJ1bGU9XFxcIikpID09IC0xKSB7XFxuICAgICAgICAgICAgdXJsICs9IFxcXCJydWxlPVxcXCIgKyBpdGVtUnVsZS50aXRsZSArIFxcXCImXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB1cmwgKyBwYXJhbXMuam9pbihcXFwiJlxcXCIpICsgKG1hcmsgPyBcXFwiJlxcXCIgKyBtYXJrIDogXFxcIlxcXCIpO1xcbiAgICB9XFxuICAgIGlmIChhZGRSdWxlICYmICEvQCg/OnJ8bGF6eVIpdWxlPS8udGVzdCh1cmwpKSB7XFxuICAgICAgICBpZiAoaXRlbVJ1bGUuc2RldGFpbEZpbmQpIHtcXG4gICAgICAgICAgICBpZiAoIS87Z2V0fDtwb3N0L2kudGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgICAgIHVybCArPSBcXFwiO2dldDtcXFwiICsgaXRlbVVybC5vcHRpb25zLmhlYWRlcnNbXFxcIkNvbnRlbnQtVHlwZVxcXCJdLnNwbGl0KFxcXCJjaGFyc3Q9XFxcIilbMV0gKyBcXFwiO3tcXFwiICsgT2JqZWN0LmtleXMoaXRlbVVybC5vcHRpb25zLmhlYWRlcnMpLmZpbHRlcigodikgPT4gdiAhPSBcXFwiQ29udGVudC1UeXBlXFxcIikubWFwKCh2KSA9PiB2ICsgXFxcIkBcXFwiICsgaXRlbVVybC5vcHRpb25zLmhlYWRlcnNbdl0ucmVwbGFjZSgvOy9nLCBcXFwiXFxcXHVmZjFiXFxcXHVmZjFiXFxcIikpLmpvaW4oXFxcIiYmXFxcIikgKyBcXFwifVxcXCI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGl0ZW1SdWxlLnVybFBhcmFtLnJlcGxhY2UoL147cG9zdC9pLCBcXFwiO2dldFxcXCIpO1xcbiAgICAgICAgICAgIHVybCArPSBcXFwiQHJ1bGU9XFxcIiArIChpdGVtUnVsZS5zZGV0YWlsRmluZC5zdGFydHNXaXRoKFxcXCJqczpcXFwiKSA/IGl0ZW1SdWxlLnNkZXRhaWxGaW5kIDogaXRlbVJ1bGUuc2RldGFpbEZpbmQucmVwbGFjZShcXFwiPT0+XFxcIiwgXFxcIjtcXFwiICsgaXRlbVJ1bGUuY29sX3R5cGUgKyBcXFwiPT0+XFxcIikpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB1cmwgPSBcXFwid2ViOi8vXFxcIiArIHVybDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCJAcnVsZT1qczpcXFwiKSkge1xcbiAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXFxcIkBydWxlPWpzOlxcXCIsIFxcXCJAcnVsZT1qczpcXFwiICsgJC50b1N0cmluZygoaXRlbVJ1bGUsIHVybEhhbmRsZSwgcmVDb25maWcsIG5hbWUpID0+IHtcXG4gICAgICAgICAgICB0aGlzLml0ZW1SdWxlID0gaXRlbVJ1bGU7XFxuICAgICAgICAgICAgdGhpcy51cmxIYW5kbGUgPSB1cmxIYW5kbGU7XFxuICAgICAgICAgICAgdGhpcy5yZUNvbmZpZyA9IHJlQ29uZmlnO1xcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XFxuICAgICAgICAgICAgZmV0Y2ggPSAoZnVuY3Rpb24gKGZ1bmMpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmModXJsSGFuZGxlKHVybCksIHBhcmFtcyk7XFxuICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgfSkoZmV0Y2gpO1xcbiAgICAgICAgICAgIHJlcXVlc3QgPSBmdW5jdGlvbiAodXJsLCBwYXJhbXMpIHtcXG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xcbiAgICAgICAgICAgICAgICBwYXJhbXMuaGVhZGVycyA9IHBhcmFtcy5oZWFkZXJzIHx8IHt9O1xcbiAgICAgICAgICAgICAgICBwYXJhbXMuaGVhZGVyc1tcXFwiVXNlci1BZ2VudFxcXCJdID0gTU9CSUxFX1VBO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2godXJsLCBwYXJhbXMpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgc2V0UmVzdWx0ID0gKGZ1bmN0aW9uIChmdW5jKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZWwpIHtcXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbCkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBlbCA9IGVsLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBmdW5jKGVsLm1hcCgodikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdi51cmwgJiYgdXJsSGFuZGxlKHYudXJsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2LmNvbF90eXBlID0gdi5jb2xfdHlwZSB8fCBpdGVtUnVsZS5jb2xfdHlwZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICkpO1xcbiAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIH0pKHNldFJlc3VsdCk7XFxuICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0O1xcbiAgICAgICAgICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHQ7XFxuICAgICAgICAgICAgc2V0TGFzdENoYXB0ZXJSdWxlKGl0ZW1SdWxlLmxhc3RfY2hhcHRlcl9ydWxlKTtcXG4gICAgICAgIH1cXG4gICAgICAgICwgaXRlbVJ1bGUsIHVybEhhbmRsZSwgcmVDb25maWcsIG5hbWUpICsgXFxcIjt0cnl7XFxcXG5cXFwiKSArIFxcXCJcXFxcbn1jYXRjaChlKXtcXFwiICsgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KFt7dGl0bGU6IFxcXCJcXFxcdTVjMGZcXFxcdTdhMGJcXFxcdTVlOGZcXFxcdTMwMTBcXFwiICsgaXRlbVJ1bGUudGl0bGUgKyBcXFwiXFxcXHUzMDExXFxcXHU0ZTJkXFxcXHVmZjBjXFxcXHU2YjY0XFxcXHU0ZThjXFxcXHU3ZWE3XFxcXHU5ODc1XFxcXHU5NzYyXFxcXHU0ZTBkXFxcXHU2NTJmXFxcXHU2MzAxXFxcXHU2MjE2XFxcXHU4MDA1XFxcXHU1ZGYyXFxcXHU1OTMxXFxcXHU2NTQ4XFxcXHVmZjBjXFxcXHU5NTE5XFxcXHU4YmVmXFxcXHU0ZmUxXFxcXHU2MDZmXFxcXHVmZjFhXFxcXG5cXFxcblxcXCIgKyAoZS5tZXNzYWdlIHx8IGUpLCBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCJ9LCB7Y29sX3R5cGU6IFxcXCJsaW5lXFxcIn0sIHt0aXRsZTogXFxcIlxcXFx1MjAxY1xcXFx1MjAxY1xcXFx1MjAxZFxcXFx1MjAxZDxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzQwOWVmZlxcXFxcXFwiPlxcXFx1NjM5MlxcXFx1OTY2NFxcXFx1NWMwZlxcXFx1N2EwYlxcXFx1NWU4Zjwvc3Bhbj5cXFwiLCB1cmw6IFxcXCJjb25maXJtOi8vXFxcXHU4OTgxXFxcXHU2MzkyXFxcXHU5NjY0XFxcXHU4YmU1XFxcXHU1YzBmXFxcXHU3YTBiXFxcXHU1ZThmXFxcXHU1NDE3Py5qczpcXFwiICsgcmVDb25maWcoXFxcIm9iai5leGNsdWRlLnB1c2goXFxcXFxcXCJcXFwiICsgaXRlbVJ1bGUudGl0bGUgKyBcXFwiXFxcXFxcXCIpXFxcIiwgbmFtZSkucmVwbGFjZShcXFwicmVmcmVzaFBhZ2UoZmFsc2UpXFxcIiwgXFxcIlxcXCIpICsgXFxcIjtcXFxcXFxcInRvYXN0Oi8vXFxcXHU1ZGYyXFxcXHU2MzkyXFxcXHU5NjY0XFxcXHU1YzBmXFxcXHU3YTBiXFxcXHU1ZThmXFxcXHUzMDEwXFxcIiArIGl0ZW1SdWxlLnRpdGxlICsgXFxcIlxcXFx1MzAxMVxcXFxcXFwiXFxcIiwgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIn1dKTtcXG4gICAgICAgIH1cXG4gICAgICAgICkgKyBcXFwifVxcXCI7XFxuICAgIH1cXG4gICAgcmV0dXJuIHVybDtcXG59XFxuLFxcbmZ1bmN0aW9uIHJlQ29uZmlnKGNvZGUsIGZpbGUpIHtcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKGNvZGUsIGZpbGUpID0+IHtcXG4gICAgICAgIGxldCBvYmogPSBKU09OLnBhcnNlKHJlYWRGaWxlKGZpbGUpKTtcXG4gICAgICAgIG5ldyBGdW5jdGlvbihcXFwib2JqXFxcIiwgY29kZSkob2JqKTtcXG4gICAgICAgIHNhdmVGaWxlKGZpbGUsIEpTT04uc3RyaW5naWZ5KG9iaikpO1xcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXFx1NGZlZVxcXFx1NjUzOVxcXFx1NjIxMFxcXFx1NTI5ZlxcXCI7XFxuICAgIH1cXG4gICAgLCBjb2RlLCBmaWxlIHx8IFxcXCJiYXNlQ29uZmlnXFxcIik7XFxufVxcbixcXFwic3RyYXRlZ3k65peg5rC05Y2wXFxcIik7dHJ5e1xcblxcbnZhciBkID0gW107XFxudmFyIGh0bWwgPSBnZXRSZXNDb2RlKCk7XFxuXFxudHJ5e1xcbnZhciBkZXNfcGljID1wYXJzZURvbShodG1sLCAnLmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsJyk7XFxufWNhdGNoKGUpe1xcbnZhciBkZXNfcGljID0nJztcXG59XFxuXFxudHJ5e1xcbnZhciBkZXNfZGVzYyA9IHBhcnNlRG9tRm9ySHRtbChodG1sLCAnI2Rlc2MmJlRleHQnKTtcXG59Y2F0Y2goZSl7XFxudmFyIGRlc19kZXNjID0n5rKh5pyJ5q2j56Gu6I635Y+W5Ymn5oOF566A5LuL77yBJztcXG59XFxuXFxudmFyIGFydHMgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsJ2JvZHkmJi5zdHVpLXBhbm5lbF9oZDpub3QoOmNvbnRhaW5zKOaOkuihjOamnCkpOm5vdCg6Y29udGFpbnMo566A5LuLKSk6bm90KDpjb250YWlucyjllpzmrKIpKScpO1xcbnZhciB0YWJzID0gW107XFxuZm9yICh2YXIgaSBpbiBhcnRzKSB7XFxuICAgIHRhYnMucHVzaChwYXJzZURvbUZvckh0bWwoYXJ0c1tpXSwgJ2gzJiZUZXh0JykpXFxufVxcblxcbnZhciBjb250cyA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwgJ2JvZHkmJi5zdHVpLXBhbm5lbF9iZCcpO1xcbnZhciBsaXN0cyA9W107XFxuZm9yICh2YXIgaSBpbiBjb250cykge1xcbiAgICBsaXN0cy5wdXNoKHBhcnNlRG9tRm9yQXJyYXkoY29udHNbaV0sICd1bCYmbGknKSlcXG59XFxuXFxudmFyIGxhenkgPWBAbGF6eVJ1bGU9LmpzOnZhciBnZXQgPWZldGNoKGlucHV0LHt9KTt2YXIganMgPSBwYXJzZURvbUZvckh0bWwoZ2V0LFxcXCIuc3R1aS1wbGF5ZXJfX3ZpZGVvJiZzY3JpcHQmJkh0bWxcXFwiKTtldmFsKGpzLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sJ3BsYXllcl9kYXRhPXsnKSk7dmFyIGpzdXJsPXBsYXllcl9kYXRhLnVybDt2YXLCoGpzb27CoD3CoGZldGNoKGpzdXJsLHt9KTtqc3VybC5pbmRleE9mKFxcXCIuaHRtbFxcXCIpPi0xPydodHRwczovL29ranguY2MvP3VybD0nK2pzdXJsOmpzdXJsYFxcblxcbmQucHVzaCh7XFxudGl0bGU6J+WFseaciScrYXJ0cy5sZW5ndGgrJ+adoee6v+i3r1xcXFxu5aaC5p6c5peg5rOV5q2j5bi45pi+56S677yM6K+354K55Ye75q2k5aSE6K6/6Zeu5Y6f572R6aG1JyxcXG4gZGVzYzogZGVzX2Rlc2MsXFxuXFx0cGljX3VybDogZGVzX3BpYyxcXG5cXHR1cmw6IE1ZX1VSTCxcXG4gY29sX3R5cGU6ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYydcXG59KTtcXG5cXG5mdW5jdGlvbiBzZXRUYWJzKHRhYnMsIHZhcmkpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjnur/ot6/igJnigJknLFxcbiAgICAgICAgICAgIHVybDogYCNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcign5oqY5Y+gJyk7aWYoY29uZj09J+WFsycpe3B1dFZhcih7a2V5Oifmipjlj6AnLCB2YWx1ZTon5byAJ30pO31lbHNle3B1dFZhcih7a2V5Oifmipjlj6AnLCB2YWx1ZTon5YWzJ30pfTtyZWZyZXNoUGFnZShmYWxzZSk7JyNub0hpc3RvcnkjaGlrZXI6Ly9lbXB0eSc7J3RvYXN0Oi8v5bey5YiH5o2i5oqY5Y+g54q25oCBJ2AsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSlcXG5pZiAoZ2V0VmFyKCfmipjlj6AnKSA9PSAn5byAJ3x8Z2V0VmFyKCfmipjlj6AnKSA9PSAnJykge1xcbiAgICAgICAgdmFyIHRpdGxlID0gJyc7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgdXJsID0gXFxcImhpa2VyOi8vZW1wdHlAbGF6eVJ1bGU9LmpzOnB1dFZhcignXFxcIiArIHZhcmkgKyBcXFwiJywgJ1xcXCIgKyBpICsgXFxcIicpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5oiQ5Yqf5pu05o2i57q/6Lev77yBJ1xcXCI7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRhYnNbaV0gKyAoZ2V0VmFyKHZhcmksICcwJykgPT0gaSA/ICfinIUnIDogJycpLFxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IHRhYnMubGVuZ3RoID4gMiA/ICd0ZXh0XzInIDogJ3RleHRfMidcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9KVxcbiAgICB9XFxufVxcbiAgICBmdW5jdGlvbiBzZXRMaXN0cyhsaXN0cywgaW5kZXgpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfigJjigJjpgInpm4bigJnigJknLFxcbiAgICAgICAgICAgIHVybDogYCNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpsZXQgY29uZiA9IGdldFZhcignc2hzb3J0Jyk7aWYoY29uZj09JzEnKXtwdXRWYXIoe2tleTonc2hzb3J0JywgdmFsdWU6JzAnfSk7fWVsc2V7cHV0VmFyKHtrZXk6J3Noc29ydCcsIHZhbHVlOicxJ30pfTtyZWZyZXNoUGFnZSgpOycjbm9IaXN0b3J5I2hpa2VyOi8vZW1wdHknOyd0b2FzdDovL+W3suWIh+aNouaOkuW6jydgLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgIH0pXFxuICAgICAgICB2YXIgbGlzdCA9IGxpc3RzW2luZGV4XTtcXG5cXG5pZiAoZ2V0VmFyKCdzaHNvcnQnKSA9PSAnMScpIHtcXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gbGlzdC5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogcGFyc2VEb21Gb3JIdG1sKGxpc3Rbal0sICdUZXh0JyksXFxuICAgICAgICAgICAgICAgIHVybDogcGFyc2VEb20obGlzdFtqXSwgJ2EmJmhyZWYnKSArIGxhenksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBsaXN0Lmxlbmd0aCA+IDMgPyAndGV4dF8zJyA6ICd0ZXh0XzInXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaXN0Lmxlbmd0aDsgaisrKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwYXJzZURvbUZvckh0bWwobGlzdFtqXSwgJ2EmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgdXJsOiBwYXJzZURvbShsaXN0W2pdLCAnYSYmaHJlZicpICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGxpc3QubGVuZ3RoID4gMyA/ICd0ZXh0XzMnIDogJ3RleHRfMidcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuc2V0VGFicyh0YWJzLCBNWV9VUkwpO1xcbnNldExpc3RzKGxpc3RzLCBnZXRWYXIoTVlfVVJMLCAnMCcpKTtcXG5cXG5kLnB1c2goe3RpdGxlOiAnPGJyPicsIGNvbF90eXBlOiAncmljaF90ZXh0J30pO1xcbnNldFJlc3VsdChkKTtcXG59Y2F0Y2goZSl7KFxcbigpID0+IHtcXG4gICAgc2V0UmVzdWx0KFt7dGl0bGU6IFxcXCJcXFxcdTVjMGZcXFxcdTdhMGJcXFxcdTVlOGZcXFxcdTMwMTBcXFwiICsgaXRlbVJ1bGUudGl0bGUgKyBcXFwiXFxcXHUzMDExXFxcXHU0ZTJkXFxcXHVmZjBjXFxcXHU2YjY0XFxcXHU0ZThjXFxcXHU3ZWE3XFxcXHU5ODc1XFxcXHU5NzYyXFxcXHU0ZTBkXFxcXHU2NTJmXFxcXHU2MzAxXFxcXHU2MjE2XFxcXHU4MDA1XFxcXHU1ZGYyXFxcXHU1OTMxXFxcXHU2NTQ4XFxcXHVmZjBjXFxcXHU5NTE5XFxcXHU4YmVmXFxcXHU0ZmUxXFxcXHU2MDZmXFxcXHVmZjFhXFxcXG5cXFxcblxcXCIgKyAoZS5tZXNzYWdlIHx8IGUpLCBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCJ9LCB7Y29sX3R5cGU6IFxcXCJsaW5lXFxcIn0sIHt0aXRsZTogXFxcIlxcXFx1MjAxY1xcXFx1MjAxY1xcXFx1MjAxZFxcXFx1MjAxZDxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzQwOWVmZlxcXFxcXFwiPlxcXFx1NjM5MlxcXFx1OTY2NFxcXFx1NWMwZlxcXFx1N2EwYlxcXFx1NWU4Zjwvc3Bhbj5cXFwiLCB1cmw6IFxcXCJjb25maXJtOi8vXFxcXHU4OTgxXFxcXHU2MzkyXFxcXHU5NjY0XFxcXHU4YmU1XFxcXHU1YzBmXFxcXHU3YTBiXFxcXHU1ZThmXFxcXHU1NDE3Py5qczpcXFwiICsgcmVDb25maWcoXFxcIm9iai5leGNsdWRlLnB1c2goXFxcXFxcXCJcXFwiICsgaXRlbVJ1bGUudGl0bGUgKyBcXFwiXFxcXFxcXCIpXFxcIiwgbmFtZSkucmVwbGFjZShcXFwicmVmcmVzaFBhZ2UoZmFsc2UpXFxcIiwgXFxcIlxcXCIpICsgXFxcIjtcXFxcXFxcInRvYXN0Oi8vXFxcXHU1ZGYyXFxcXHU2MzkyXFxcXHU5NjY0XFxcXHU1YzBmXFxcXHU3YTBiXFxcXHU1ZThmXFxcXHUzMDEwXFxcIiArIGl0ZW1SdWxlLnRpdGxlICsgXFxcIlxcXFx1MzAxMVxcXFxcXFwiXFxcIiwgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIn1dKTtcXG59XFxuKSgpfVwiLFwiZ3JvdXBcIjpcIuKsh+S4tOaXtuinhOWImeKsh1wiLFwidWFcIjpcImF1dG9cIixcInByZVJ1bGVcIjpcIi8vIHRvRG9cXG4vLyA/5LqM57qn6aG16Z2i5rKh5pyJ6aKE5aSE55CGXFxuLy8gZml4ZWRcXG4vLyBcXG5cXG5sZXQgQ29uZmlnID0gcmVhZEZpbGUoJ2Jhc2VDb25maWcnKVxcbnRyeSB7IENvbmZpZyA9IEpTT04ucGFyc2UoQ29uZmlnKSB9IGNhdGNoIChlKSB7IENvbmZpZyA9IHt9IH1cXG5cXG5pZiAoIShDb25maWcudGhyZWFkQ250ID4gMCkpIENvbmZpZy50aHJlYWRDbnQgPSA2XFxuaWYgKCEoQ29uZmlnLnJlc3BvbnNlVGltZSA+IDApKSBDb25maWcucmVzcG9uc2VUaW1lID0gNTAwMFxcbmlmICghWyflhoXnva4nLCAn5Y6f55SfJ10uaW5jbHVkZXMoQ29uZmlnLnNlYXJjaE1vZGUpKSBDb25maWcuc2VhcmNoTW9kZSA9ICflhoXnva4nXFxuaWYgKCFBcnJheS5pc0FycmF5KENvbmZpZy5oaXN0b3J5KSkgQ29uZmlnLmhpc3RvcnkgPSBbXVxcbmlmICghQXJyYXkuaXNBcnJheShDb25maWcuc3RyYXRlZ3kpIHx8IENvbmZpZy5zdHJhdGVneS5sZW5ndGggPT0gMCkge1xcbiAgICBDb25maWcuc3RyYXRlZ3kgPSBbJ+WFqOmDqCddXFxuICAgIHNhdmVGaWxlKCdzdHJhdGVneTrlhajpg6gnLCBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICBncm91cDogSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9ob21lJykpLm1hcCgodikgPT4gdi5ncm91cCkuZmlsdGVyKCh2LCBpLCBhcnIpID0+IGFyci5pbmRleE9mKHYpID09IGkpLFxcbiAgICAgICAgZXhjbHVkZTogW11cXG4gICAgfSkpXFxufVxcbmlmICghQ29uZmlnLnN0cmF0ZWd5W0NvbmZpZy5hcHBseV0pIENvbmZpZy5hcHBseSA9IDBcXG5cXG5zYXZlRmlsZSgnYmFzZUNvbmZpZycsIEpTT04uc3RyaW5naWZ5KENvbmZpZykpXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0ouWHveaVsFxcXCIsXFxcInBhdGhcXFwiOlxcXCJzZWFyY2hMb2FkXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHNlYXJjaExvYWQoKSB7XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgZnVuY3Rpb24gcnVuQ29kZShydWxlKSB7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPyBldmFsKGNvZGUpIDogcnVsZVxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLy8g5pCc57Si562W55Wl6L+H5rukXFxcXG4gICAgICAgIGxldCBuYW1lID0gJ3N0cmF0ZWd5OicgKyBDb25maWcuc3RyYXRlZ3lbQ29uZmlnLmFwcGx5XSxcXFxcbiAgICAgICAgICAgIHN0cmF0ZWd5ID0gSlNPTi5wYXJzZShyZWFkRmlsZShuYW1lKSksXFxcXG4gICAgICAgICAgICBob21lTGlzdCA9IEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vaG9tZScpKS5maWx0ZXIoKGl0ZW0pID0+XFxcXG4gICAgICAgICAgICAgICAgaXRlbS5zZWFyY2hGaW5kICYmIGl0ZW0udGl0bGUgIT0gTVlfUlVMRS50aXRsZSAmJlxcXFxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5Lmdyb3VwLmZpbmQoKHYpID0+IGl0ZW0uZ3JvdXAgPT0gdikgJiZcXFxcbiAgICAgICAgICAgICAgICAhc3RyYXRlZ3kuZXhjbHVkZS5maW5kKCh2KSA9PiBpdGVtLnRpdGxlID09IHYpKVxcXFxuICAgICAgICAgICAgLnNsaWNlKChwYWdlIC0gMSkgKiBDb25maWcudGhyZWFkQ250LCBwYWdlICogQ29uZmlnLnRocmVhZENudClcXFxcbiAgICAgICAgaWYgKGhvbWVMaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gW11cXFxcbiAgICAgICAgbGV0IHJlcyA9IFtdLFxcXFxuICAgICAgICAgICAgcnVsZUxpc3QgPSBbXSxcXFxcbiAgICAgICAgICAgIHVybExpc3QgPSBbXVxcXFxuICAgICAgICBob21lTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIC8vIOe8k+WtmOino+aekOinhOWImVxcXFxuICAgICAgICAgICAgICAgIHJ1bGVMaXN0LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoRmluZDogaXRlbS5zZWFyY2hGaW5kLFxcXFxuICAgICAgICAgICAgICAgICAgICBzZGV0YWlsRmluZDogWycnLCAnKiddLmluY2x1ZGVzKGl0ZW0uc2RldGFpbF9maW5kX3J1bGUpID8gaXRlbS5kZXRhaWxfZmluZF9ydWxlIDogaXRlbS5zZGV0YWlsX2ZpbmRfcnVsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFsnJywgJyonXS5pbmNsdWRlcyhpdGVtLnNkZXRhaWxfZmluZF9ydWxlKSA/IGl0ZW0uZGV0YWlsX2NvbF90eXBlIDogaXRlbS5zZGV0YWlsX2NvbF90eXBlLFxcXFxuICAgICAgICAgICAgICAgICAgICBsYXN0X2NoYXB0ZXJfcnVsZTogaXRlbS5sYXN0X2NoYXB0ZXJfcnVsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgcHJlUnVsZTogaXRlbS5wcmVSdWxlLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbTogKGl0ZW0uc2VhcmNoX3VybC5tYXRjaCgvOy4qLykgfHwgWycnXSlbMF0sXFxcXG4gICAgICAgICAgICAgICAgICAgIHVhOiBpdGVtLnVhXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAvLyDmkJzntKLpk77mjqXlpITnkIZcXFxcbiAgICAgICAgICAgICAgICBsZXQgc2VhcmNoVXJsID0gaXRlbS5zZWFyY2hfdXJsLnNwbGl0KCc7JykubWFwKCh2KSA9PiB2LnJlcGxhY2UoL++8m++8my9nLCAnOycpKVxcXFxuICAgICAgICAgICAgICAgIHNlYXJjaFVybFswXSA9IHNlYXJjaFVybFswXS5yZXBsYWNlKHNlYXJjaFVybFswXS5pbmNsdWRlcygnJSUnKSA/IC8lJS9nIDogL1xcXFxcXFxcKlxcXFxcXFxcKi9nLCBlbmNvZGVTdHIoa2V5d29yZCwgc2VhcmNoVXJsWzJdKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL2Z5cGFnZSg/OkAoLT9cXFxcXFxcXGQrKUApPyg/OlxcXFxcXFxcKlxcXFxcXFxcZCtAKT8vZywgKF8sICQxKSA9PiBwYXJzZUludCgkMSB8fCAwKSArIDEpXFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlYXJjaFJlcSA9IHsgdXJsOiBydW5Db2RlKHNlYXJjaFVybFswXSksIG9wdGlvbnM6IHsgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ3RleHQvcGxhaW47IGNoYXJzdD1VVEYtOCcgfSwgbWV0aG9kOiBzZWFyY2hVcmxbMV0sIHRpbWVvdXQ6IENvbmZpZy5yZXNwb25zZVRpbWUgfSB9XFxcXG4gICAgICAgICAgICAgICAgLy8gcG9zdOaWueazleaXtui9rOaNouWPguaVsFxcXFxuICAgICAgICAgICAgICAgIGlmICgvXnBvc3QkL2kudGVzdChzZWFyY2hSZXEub3B0aW9uc1snbWV0aG9kJ10pKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBbb3JpVXJsLCBib2R5XSA9IHNlYXJjaFJlcS51cmwuc3BsaXQoJz8nKVxcXFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hSZXEudXJsID0gb3JpVXJsLnJlcGxhY2UoJ++8n++8nycsICc/JylcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhcnRzV2l0aCgnSnNvbkJvZHk9JykpIGJvZHkgPSBib2R5LnNsaWNlKDkpXFxcXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFJlcS5vcHRpb25zWydib2R5J10gPSBib2R5XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChzZWFyY2hVcmxbMl0pIHNlYXJjaFJlcS5vcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1UeXBlJ10uc2xpY2UoMCwgMTkpICsgc2VhcmNoVXJsWzJdXFxcXG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaFVybFszXSkgc2VhcmNoVXJsWzNdLm1hdGNoKC97KC4qKX0vKVsxXS5zcGxpdCgnJiYnKS5mb3JFYWNoKCh2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSB2LnNwbGl0KCdAJylcXFxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVxLm9wdGlvbnMuaGVhZGVyc1trZXldID0gcnVuQ29kZSh2YWx1ZSlcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIC8vIOa3u+WKoOWFqOWxgFVBXFxcXG4gICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hSZXEub3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udWEgPT0gJ3BjJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFJlcS5vcHRpb25zLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0udWEgPT0gJ21vYmlsZScpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hSZXEub3B0aW9ucy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgdXJsTGlzdC5wdXNoKHNlYXJjaFJlcSlcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICB1cmxMaXN0LnB1c2goeyB1cmw6ICdoaWtlcjovL2Vycm9yJywgb3B0aW9uczogZSB9KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICAvLyDojrflj5bmkJzntKLnu5PmnpxcXFxcbiAgICAgICAgYmF0Y2hGZXRjaCh1cmxMaXN0KS5mb3JFYWNoKChzZWFyY2hIdG1sLCBzZWFyY2hJbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgbGV0IGl0ZW1SdWxlID0gcnVsZUxpc3Rbc2VhcmNoSW5kZXhdLFxcXFxuICAgICAgICAgICAgICAgIGl0ZW1VcmwgPSB1cmxMaXN0W3NlYXJjaEluZGV4XSxcXFxcbiAgICAgICAgICAgICAgICBiYXRjaFNlYXJjaF9yZXN1bHQgPSBbXVxcXFxuICAgICAgICAgICAgTVlfVVJMID0gaXRlbVVybC51cmxcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1VcmwudXJsID09ICdoaWtlcjovL2Vycm9yJylcXFxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgeyBtZXNzYWdlOiAn6ZO+5o6l5aSE55CG5pe25Ye66ZSZOlxcXFxcXFxcbicgKyBpdGVtVXJsLm9wdGlvbnMubWVzc2FnZSB9XFxcXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdXJsSGFuZGxlKHVybCwgYWRkUnVsZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybCkgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyDlrZDpobXpnaLmt7vliqBydWxlXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBbLCB1cmwsIHBhcmFtcywgbWFya10gPSAvXiguKj8pKD86XFxcXFxcXFw/KC4qPykpPygjLio/KT8kLy5leGVjKHVybClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSAnPydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuZmluZEluZGV4KCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ3J1bGU9JykpID09IC0xKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCArPSAncnVsZT0nICsgaXRlbVJ1bGUudGl0bGUgKyAnJidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwgKyBwYXJhbXMuam9pbignJicpICsgKG1hcmsgPyAnJicgKyBtYXJrIDogJycpXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g5re75Yqg5LqM57qn6KeE5YiZXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRSdWxlICYmICEvQCg/OnJ8bGF6eVIpdWxlPS8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVJ1bGUuc2RldGFpbEZpbmQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS87Z2V0fDtwb3N0L2kudGVzdCh1cmwpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJztnZXQ7JyArIGl0ZW1Vcmwub3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVR5cGUnXS5zcGxpdCgnY2hhcnN0PScpWzFdICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzt7JyArIE9iamVjdC5rZXlzKGl0ZW1Vcmwub3B0aW9ucy5oZWFkZXJzKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9ICdDb250ZW50LVR5cGUnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiB2ICsgJ0AnICsgaXRlbVVybC5vcHRpb25zLmhlYWRlcnNbdl0ucmVwbGFjZSgvOy9nLCAn77yb77ybJykpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcmJicpICsgJ30nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVJ1bGUudXJsUGFyYW0ucmVwbGFjZSgvXjtwb3N0L2ksICc7Z2V0JylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJ0BydWxlPScgKyAoaXRlbVJ1bGUuc2RldGFpbEZpbmQuc3RhcnRzV2l0aCgnanM6JykgP1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtUnVsZS5zZGV0YWlsRmluZCA6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1SdWxlLnNkZXRhaWxGaW5kLnJlcGxhY2UoJz09PicsICc7JyArIGl0ZW1SdWxlLmNvbF90eXBlICsgJz09PicpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHVybCA9ICd3ZWI6Ly8nICsgdXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g5LqM57qn6aG16Z2i6aKE5aSE55CG5LiO6ZSZ6K+v5aSE55CGXFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5jbHVkZXMoJ0BydWxlPWpzOicpKSB1cmwgPSB1cmwucmVwbGFjZSgnQHJ1bGU9anM6JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHJ1bGU9anM6JyArICQudG9TdHJpbmcoKGl0ZW1SdWxlLCB1cmxIYW5kbGUsIHJlQ29uZmlnLCBuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVJ1bGUgPSBpdGVtUnVsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybEhhbmRsZSA9IHVybEhhbmRsZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlQ29uZmlnID0gcmVDb25maWdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaCA9IChmdW5jdGlvbihmdW5jKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odXJsLCBwYXJhbXMpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyh1cmxIYW5kbGUodXJsKSwgcGFyYW1zKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KShmZXRjaClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IGZ1bmN0aW9uKHVybCwgcGFyYW1zKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5oZWFkZXJzID0gcGFyYW1zLmhlYWRlcnMgfHwge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5oZWFkZXJzWydVc2VyLUFnZW50J10gPSBNT0JJTEVfVUFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaCh1cmwsIHBhcmFtcylcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQgPSAoZnVuY3Rpb24oZnVuYykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVsKSkgZWwgPSBlbC5kYXRhXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYyhlbC5tYXAoKHYpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi51cmwgPSB2LnVybCAmJiB1cmxIYW5kbGUodi51cmwpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuY29sX3R5cGUgPSB2LmNvbF90eXBlIHx8IGl0ZW1SdWxlLmNvbF90eXBlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKHNldFJlc3VsdClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0ID0gc2V0UmVzdWx0XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQgPSBzZXRSZXN1bHRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGFzdENoYXB0ZXJSdWxlKGl0ZW1SdWxlLmxhc3RfY2hhcHRlcl9ydWxlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0ZW1SdWxlLCB1cmxIYW5kbGUsIHJlQ29uZmlnLCBuYW1lKSArICc7dHJ5e1xcXFxcXFxcbicpICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXFxcXFxcXG59Y2F0Y2goZSl7JyArICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChbe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+Wwj+eoi+W6j+OAkCcgKyBpdGVtUnVsZS50aXRsZSArICfjgJHkuK3vvIzmraTkuoznuqfpobXpnaLkuI3mlK/mjIHmiJbogIXlt7LlpLHmlYjvvIzplJnor6/kv6Hmga/vvJpcXFxcXFxcXG5cXFxcXFxcXG4nICsgKGUubWVzc2FnZSB8fCBlKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM0MDllZmZcXFxcXFxcIj7mjpLpmaTlsI/nqIvluo88L3NwYW4+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnY29uZmlybTovL+imgeaOkumZpOivpeWwj+eoi+W6j+WQlz8uanM6JyArXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZUNvbmZpZygnb2JqLmV4Y2x1ZGUucHVzaChcXFxcXFxcIicgKyBpdGVtUnVsZS50aXRsZSArICdcXFxcXFxcIiknLCBuYW1lKS5yZXBsYWNlKCdyZWZyZXNoUGFnZShmYWxzZSknLCAnJykgK1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztcXFxcXFxcInRvYXN0Oi8v5bey5o6S6Zmk5bCP56iL5bqP44CQJyArIGl0ZW1SdWxlLnRpdGxlICsgJ+OAkVxcXFxcXFwiJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgKyAnfSdcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVJ1bGUuc2VhcmNoRmluZC5zdGFydHNXaXRoKCdqczonKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyBqc+ino+aekFxcXFxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmFja3VwID0geyBmZXRjaDogdGhpcy5mZXRjaCwgcmVxdWVzdDogdGhpcy5yZXF1ZXN0IH1cXFxcblxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VXJsKCkgeyByZXR1cm4gTVlfVVJMIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2ggPSAoZnVuY3Rpb24gKGZ1bmMpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHVybCwgcGFyYW1zKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKHVybEhhbmRsZSh1cmwpLCBwYXJhbXMpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5mZXRjaClcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdCA9IGZ1bmN0aW9uICh1cmwsIHBhcmFtcykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5oZWFkZXJzID0gcGFyYW1zLmhlYWRlcnMgfHwge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaGVhZGVyc1snVXNlci1BZ2VudCddID0gTU9CSUxFX1VBXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2godXJsLCBwYXJhbXMpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGl0ZW1SdWxlLnByZVJ1bGUpXFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFJlc0NvZGUoKSB7IHJldHVybiBzZWFyY2hIdG1sIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFJlc3VsdChlbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbCkpIGVsID0gZWwuZGF0YVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmZvckVhY2goKHYpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi50aXRsZSA9IChDb25maWcuc2VhcmNoTW9kZSA9PSAn5YaF572uJyAmJiAhL17igJzigJx84oCY4oCYLy50ZXN0KHYudGl0bGUpID8gJ+KAnOKAnOKAneKAnScgOiAnJykgKyB2LnRpdGxlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYudXJsID0gdXJsSGFuZGxlKHYudXJsLCB0cnVlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LmRlc2MgPSBpdGVtUnVsZS50aXRsZSArICh2LmRlc2MgPyAnIPCflLkgJyArIHYuZGVzYyA6ICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LmNvbF90eXBlID0gJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaFNlYXJjaF9yZXN1bHQucHVzaCh2KVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRTZWFyY2hSZXN1bHQoZWwpIHsgcmV0dXJuIHNldFJlc3VsdChlbCkgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0SG9tZVJlc3VsdChlbCkgeyByZXR1cm4gc2V0UmVzdWx0KGVsKSB9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoaXRlbVJ1bGUuc2VhcmNoRmluZC5zbGljZSgzKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgYmFja3VwKVxcXFxuICAgICAgICAgICAgICAgICAgICB9KSgpXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g5pmu6YCa6Kej5p6QXFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5kUnVsZSA9IGl0ZW1SdWxlLnNlYXJjaEZpbmQuc3BsaXQoJzsnKVxcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZURvbUZvckFycmF5KHNlYXJjaEh0bWwsIGZpbmRSdWxlLnNoaWZ0KCkpLmZvckVhY2goKGRhdGEpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBbdGl0bGUsIHVybCwgZGVzYywgY29udGVudCwgaW1nXSA9IGZpbmRSdWxlLm1hcCgodiwgaSkgPT5cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Db2RlKHYgPT0gJyonID8gJycgOiAoKGZsYWcpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFnID8gcGFyc2VEb20oZGF0YSwgdikgOiBwYXJzZURvbUZvckh0bWwoZGF0YSwgdilcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KShpID09IDEgfHwgaSA9PSA0KSkpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRpdGxlICsgZGVzYyArIGNvbnRlbnQpLmluY2x1ZGVzKGtleXdvcmQpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhdGNoU2VhcmNoX3Jlc3VsdC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChDb25maWcuc2VhcmNoTW9kZSA9PSAn5YaF572uJyAmJiAhL17igJzigJx84oCY4oCYLy50ZXN0KHRpdGxlKSA/ICfigJzigJzigJ3igJ0nIDogJycpICsgdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsSGFuZGxlKHVybCwgdHJ1ZSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0ZW1SdWxlLnRpdGxlICsgKGRlc2MgPyAnIPCflLkgJyArIGRlc2MgOiAnJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaW1nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmIChiYXRjaFNlYXJjaF9yZXN1bHQubGVuZ3RoKSBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXMsIGJhdGNoU2VhcmNoX3Jlc3VsdClcXFxcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghc2VhcmNoSHRtbCAmJiAhaXRlbVVybC51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSkgdGhyb3cgeyBtZXNzYWdlOiAn5peg5rOV6K6/6Zeu77yM5pyq6I635Y+W5Yiw572R6aG15rqQ5Luj56CBJyB9XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g5pCc57Si57uT5p6c6ZSZ6K+v5aSE55CGXFxcXG4gICAgICAgICAgICAgICAgcmVzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+Wwj+eoi+W6j+OAkCcgKyBpdGVtUnVsZS50aXRsZSArICfjgJHkuI3mlK/mjIHmiJbogIXlt7LlpLHmlYjvvIzngrnlh7vmn6XnnIvplJnor6/kv6Hmga8nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdjb25maXJtOi8vJyArIChlLm1lc3NhZ2UgfHwgZSkgKyAnXFxcXFxcXFxuXFxcXFxcXFxu5piv5ZCm5o6S6Zmk6K+l5bCP56iL5bqPPy5qczonICtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlQ29uZmlnKCdvYmouZXhjbHVkZS5wdXNoKFxcXFxcXFwiJyArIGl0ZW1SdWxlLnRpdGxlICsgJ1xcXFxcXFwiKScsIG5hbWUpLnJlcGxhY2UoJ3JlZnJlc2hQYWdlKGZhbHNlKScsICcnKSArXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnO1xcXFxcXFwidG9hc3Q6Ly/lt7LmjpLpmaTlsI/nqIvluo/jgJAnICsgaXRlbVJ1bGUudGl0bGUgKyAn44CRXFxcXFxcXCInLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgcmV0dXJuIHJlc1xcXFxuICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIFt7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0ouaXtuWHuueOsOiHtOWRvemUmeivr++8jOeCueWHu+afpeeci+ino+WGs+WKnuazlVxcXFxcXFxcbicgKyAoZS5tZXNzYWdlIHx8IGUpLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCfngrnlh7vnoa7lrprlkI7nu5PmnZ/mkJzntKLvvIzlsIbmkJzntKLnur/nqIvosIPmlbTkuLox77yMXFxcXFxcXFxu6YeN5paw5pCc57Si55u05Yiw5YaN5qyh5Ye6546w55u45ZCM55qE5oql6ZSZ77yMXFxcXFxcXFxu54S25ZCO5bCx5Y+v5Lul5a6a5L2N5byV6LW36Ie05ZG96ZSZ6K+v55qE5bCP56iL5bqP77yM5omL5Yqo5bCG5YW25o6S6ZmkJykuY29uZmlybSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdiYXRjaFNlYXJjaC1rdycsICcnKVxcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICB9XVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJpY29uXzJcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Z+656GA6K6+572uXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbmZpZ1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyVmFyKFxcXFxcXFwiYmF0Y2hTZWFyY2gtb3JpSW5kZXhcXFxcXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxcXG5sZXQgZWwgPSBbXSxcXFxcbiAgICBDb25maWcgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdiYXNlQ29uZmlnJykpLFxcXFxuICAgIGFsbEdyb3VwID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9ob21lJykpLm1hcCgodikgPT4gdi5ncm91cCkuZmlsdGVyKCh2LCBpLCBhcnIpID0+IGFyci5pbmRleE9mKHYpID09IGkpLFxcXFxuICAgIGFub3RoZXJNb2RlID0geyAn5YaF572uJzogJ+WOn+eUnycsICfljp/nlJ8nOiAn5YaF572uJyB9IFtDb25maWcuc2VhcmNoTW9kZV1cXFxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3JlQ29uZmlnJykpLnJ1bGUpXFxcXG5cXFxcbmVsLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pCc57Si57q/56iLOiAnICsgQ29uZmlnLnRocmVhZENudCxcXFxcbiAgICB1cmw6ICdpbnB1dDovLy8vLy/nur/nqIvmlbA6IOWQjOaXtuaQnOe0oueahOWwj+eoi+W6j+aVsOmHjy5qczonICsgcmVDb25maWcoJ29iai50aHJlYWRDbnQ9cGFyc2VJbnQoaW5wdXQpJyksXFxcXG4gICAgaW1nOiAnaGlrZXI6Ly9pbWFnZXMv6K6+572uJ1xcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn6LaF5pe2KOavq+enkik6ICcgKyBDb25maWcucmVzcG9uc2VUaW1lLFxcXFxuICAgIHVybDogJ2lucHV0Oi8vLy8vL+i2heaXtuavq+enkuaVsDog5pCc57Si5q+P5Liq5bCP56iL5bqP5pe255qE5pyA5aSn6K6/6Zeu5pe26Ze0LmpzOicgKyByZUNvbmZpZygnb2JqLnJlc3BvbnNlVGltZT1wYXJzZUludChpbnB1dCknKSxcXFxcbiAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy/ljoblj7InXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICfmkJzntKLmqKHlvI86ICcgKyBDb25maWcuc2VhcmNoTW9kZSxcXFxcbiAgICB1cmw6ICdjb25maXJtOi8v6KaB5YiH5o2i5pCc57Si5qih5byP5Li6JyArIGFub3RoZXJNb2RlICsgJ+WQlz9cXFxcXFxcXG7lhoXnva7mqKHlvI86IOmmlumhteWQjOWxj+aYvuekuuaQnOe0oue7k+aenFxcXFxcXFxcbuWOn+eUn+aooeW8jzog6LCD55So6KeG55WM5pCc57Si5pi+56S657uT5p6cLmpzOicgKyByZUNvbmZpZygnb2JqLnNlYXJjaE1vZGU9XFxcXFxcXCInICsgYW5vdGhlck1vZGUgKyAnXFxcXFxcXCInKSxcXFxcbiAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy/kupHlpIfku70nXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICfmlrDlop7nrZbnlaUnLFxcXFxuICAgIHVybDogJ2lucHV0Oi8vJyArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgaGludDogJ+e7meaWsOetlueVpei1t+S4quWQjeensOWQpycsXFxcXG4gICAgICAgIGpzOiByZUNvbmZpZygnb2JqLnN0cmF0ZWd5LnB1c2goaW5wdXQpJykgKyAnO1xcXFxcXFwiaGlrZXI6Ly9wYWdlL3N0cmF0ZWd5P25hbWU9XFxcXFxcXCIraW5wdXQrXFxcXFxcXCIjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiJ1xcXFxuICAgIH0pLFxcXFxuICAgIGltZzogJ2hpa2VyOi8vaW1hZ2VzL+S5puetvidcXFxcbn0sIHsgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyB9KVxcXFxuXFxcXG5sZXQgb3JpSW5kZXggPSBnZXRWYXIoJ2JhdGNoU2VhcmNoLW9yaUluZGV4JywgJy0xJylcXFxcbkNvbmZpZy5zdHJhdGVneS5mb3JFYWNoKChuYW1lLCBpbmRleCkgPT4ge1xcXFxuICAgIGVsLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJyA8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOmJsYWNrXFxcXFxcXCI+PGJpZz48Yj4nICsgbmFtZSxcXFxcblxcXFx0ICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9ob21lX2ljb25fY29kZScsXFxcXG4gICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6ICcg57yW6L6RICcsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9zdHJhdGVneT9uYW1lPScgKyBuYW1lLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgfSwge1xcXFxuICAgICAgICB0aXRsZTogJyDmm7TlkI0gJyxcXFxcbiAgICAgICAgdXJsOiAnaW5wdXQ6Ly8nICsgSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdmFsdWU6IG5hbWUsXFxcXG4gICAgICAgICAgICBoaW50OiAn6KaB5pS55oiQ5LuA5LmI5ZCN56ewJyxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKChuYW1lKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgc2F2ZUZpbGUoJ3N0cmF0ZWd5OicgKyBpbnB1dCwgcmVhZEZpbGUobmFtZSkpXFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlRmlsZShuYW1lKVxcXFxuICAgICAgICAgICAgfSwgJ3N0cmF0ZWd5OicgKyBuYW1lKSArICc7JyArIHJlQ29uZmlnKCdvYmouc3RyYXRlZ3lbJyArIGluZGV4ICsgJ109aW5wdXQnKVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6ICcg5Yig6ZmkICcsXFxcXG4gICAgICAgIHVybDogJ2NvbmZpcm06Ly/opoHliKDpmaTnrZbnlaXjgJAnICsgbmFtZSArICfjgJHlkJc/LmpzOmRlbGV0ZUZpbGUoXFxcXFxcXCJzdHJhdGVneTonICsgbmFtZSArICdcXFxcXFxcIik7JyArIHJlQ29uZmlnKCdvYmouc3RyYXRlZ3kuc3BsaWNlKCcgKyBpbmRleCArICcsMSk7b2JqLmFwcGx5PTAnKSArICc7XFxcXFxcXCJ0b2FzdDovL+etlueVpeW3suW6lOeUqOS4uummluS4qlxcXFxcXFwiJyxcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IG9yaUluZGV4ID49IDAgPyAoKGluZGV4ID09IG9yaUluZGV4ID8gJ+KAnOKAnCcgOiAnJykgKyAnIOKHiyAnICsgKGluZGV4ICsgMSkudG9TdHJpbmcoKSkgOiAnIOenu+WKqCAnLFxcXFxuICAgICAgICB1cmw6IG9yaUluZGV4ID49IDAgP1xcXFxuICAgICAgICAgICAgJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczpjbGVhclZhcihcXFxcXFxcImJhdGNoU2VhcmNoLW9yaUluZGV4XFxcXFxcXCIpOycgK1xcXFxuICAgICAgICAgICAgcmVDb25maWcoJC50b1N0cmluZygob3JpSW5kZXgsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgb2JqLnN0cmF0ZWd5LnNwbGljZShpbmRleCwgMCwgb2JqLnN0cmF0ZWd5LnNwbGljZShvcmlJbmRleCwgMSlbMF0pXFxcXG4gICAgICAgICAgICAgICAgb2JqLmFwcGx5ID0gMFxcXFxuICAgICAgICAgICAgfSwgb3JpSW5kZXgsIGluZGV4KSkgKyAnO1xcXFxcXFwidG9hc3Q6Ly/nrZbnlaXlt7LlupTnlKjkuLrpppbkuKpcXFxcXFxcIicgOlxcXFxuICAgICAgICAgICAgJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaW5kZXgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2JhdGNoU2VhcmNoLW9yaUluZGV4JywgaW5kZXgudG9TdHJpbmcoKSlcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICB9LCBpbmRleCksXFxcXG4gICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICB9LCB7IGNvbF90eXBlOiAnbGluZScgfSlcXFxcbn0pXFxcXG5cXFxcbnNldFJlc3VsdChlbClcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi562W55Wl6K+m5oOFXFxcIixcXFwicGF0aFxcXCI6XFxcInN0cmF0ZWd5XFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAnY2xlYXJWYXIoXFxcXFxcXCJiYXRjaFNlYXJjaC1zdHJhdGVneVNob3dcXFxcXFxcIiknKVxcXFxubGV0IGVsID0gW10sXFxcXG4gICAgbmFtZSA9ICdzdHJhdGVneTonICsgZ2V0UGFyYW0oJ25hbWUnKSxcXFxcbiAgICBzdHJhdGVneSA9IHJlYWRGaWxlKG5hbWUpLFxcXFxuICAgIHJ1bGVzID0gSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9ob21lJykpLm1hcCgodikgPT4gKHsgdGl0bGU6IHYudGl0bGUsIGdyb3VwOiB2Lmdyb3VwIH0pKSxcXFxcbiAgICBhbGxHcm91cCA9IHJ1bGVzLm1hcCgodikgPT4gdi5ncm91cCkuZmlsdGVyKCh2LCBpLCBhcnIpID0+IGFyci5pbmRleE9mKHYpID09IGkpXFxcXG50cnkgeyBzdHJhdGVneSA9IEpTT04ucGFyc2Uoc3RyYXRlZ3kpIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICBzdHJhdGVneSA9IHsgZ3JvdXA6IFtdLCBleGNsdWRlOiBbXSB9XFxcXG4gICAgc2F2ZUZpbGUobmFtZSwgSlNPTi5zdHJpbmdpZnkoc3RyYXRlZ3kpKVxcXFxufVxcXFxuZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvcmVDb25maWcnKSkucnVsZSlcXFxcbnNldFBhZ2VUaXRsZShuYW1lKVxcXFxuXFxcXG5lbC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJyZuYnNwICZuYnNwPGJpZz48Yj7liIbnu4Q8L2I+PC9iaWc+JyxcXFxcbiAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCdcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ+WFqOmAiScsXFxcXG4gICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgKyByZUNvbmZpZygnb2JqLmdyb3VwPScgKyBKU09OLnN0cmluZ2lmeShhbGxHcm91cCksIG5hbWUpLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ+WFqOS4jemAiScsXFxcXG4gICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgKyByZUNvbmZpZygnb2JqLmdyb3VwPVtdJywgbmFtZSksXFxcXG4gICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxufSlcXFxcblxcXFxuYWxsR3JvdXAuZm9yRWFjaCgodikgPT4ge1xcXFxuICAgIGxldCBpbmRleCA9IHN0cmF0ZWd5Lmdyb3VwLmluZGV4T2YodilcXFxcbiAgICBlbC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IChpbmRleCA9PSAtMSA/ICcnIDogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzEyYjY2OFxcXFxcXFwiPicpICsgKHYgfHwgJ1vml6DliIbnu4RdJyksXFxcXG4gICAgICAgIHVybDogJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczonICtcXFxcbiAgICAgICAgICAgIHJlQ29uZmlnKCQudG9TdHJpbmcoKHYsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSBvYmouZ3JvdXAucHVzaCh2KVxcXFxuICAgICAgICAgICAgICAgIGVsc2Ugb2JqLmdyb3VwLnNwbGljZShpbmRleCwgMSlcXFxcbiAgICAgICAgICAgIH0sIHYsIGluZGV4KSwgbmFtZSlcXFxcbiAgICB9KVxcXFxufSlcXFxcblxcXFxubGV0IHF1ZXVlU2hvdyA9IGdldFZhcignYmF0Y2hTZWFyY2gtc3RyYXRlZ3lTaG93JywgJ+W3sumAiScpXFxcXG5lbC5wdXNoKHsgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyB9LCB7XFxcXG4gICAgdGl0bGU6ICcmbmJzcCAmbmJzcDxiaWc+PGI+5o6S6ZmkPC9iPjwvYmlnPicsXFxcXG4gICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXFxcXG59LCB7XFxcXG4gICAgdGl0bGU6ICfih7Ug5pi+56S6JyArIHF1ZXVlU2hvdyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHF1ZXVlU2hvdykgPT4ge1xcXFxuICAgICAgICBwdXRWYXIoJ2JhdGNoU2VhcmNoLXN0cmF0ZWd5U2hvdycsIHsgJ+W+hemAiSc6ICflt7LpgIknLCAn5bey6YCJJzogJ+W+hemAiScgfSBbcXVldWVTaG93XSlcXFxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICB9LCBxdWV1ZVNob3cpLFxcXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogJ+WFqOS4jemAiScsXFxcXG4gICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgKyByZUNvbmZpZygnb2JqLmV4Y2x1ZGU9W10nLCBuYW1lKSxcXFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG59KVxcXFxuXFxcXG5pZiAocXVldWVTaG93ID09ICflt7LpgIknKSBydWxlcyA9IHN0cmF0ZWd5LmV4Y2x1ZGUubWFwKCh2KSA9PiAoe1xcXFxuICAgIHRpdGxlOiB2LFxcXFxuICAgIHVybDogJyNub0xvYWRpbmcjQGxhenlSdWxlPS5qczonICsgcmVDb25maWcoJC50b1N0cmluZygoaW5kZXgpID0+IHsgb2JqLmV4Y2x1ZGUuc3BsaWNlKGluZGV4LCAxKSB9LCBzdHJhdGVneS5leGNsdWRlLmluZGV4T2YodikpLCBuYW1lKSxcXFxcbn0pKVxcXFxuZWxzZSBydWxlcyA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIHJ1bGVzLnJlZHVjZSgoc2VsZiwgdikgPT4ge1xcXFxuICAgIGxldCBnSW5kZXggPSBzdHJhdGVneS5ncm91cC5pbmRleE9mKHYuZ3JvdXApLFxcXFxuICAgICAgICBpbmRleCA9IHN0cmF0ZWd5LmV4Y2x1ZGUuaW5kZXhPZih2LnRpdGxlKVxcXFxuICAgIGlmIChnSW5kZXggIT0gLTEpIHNlbGZbZ0luZGV4XS5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IChpbmRleCA9PSAtMSA/ICcnIDogJ+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzEyYjY2OFxcXFxcXFwiPicpICsgdi50aXRsZSxcXFxcbiAgICAgICAgdXJsOiAnI25vTG9hZGluZyNAbGF6eVJ1bGU9LmpzOicgK1xcXFxuICAgICAgICAgICAgcmVDb25maWcoJC50b1N0cmluZygodGl0bGUsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSBvYmouZXhjbHVkZS5wdXNoKHRpdGxlKVxcXFxuICAgICAgICAgICAgICAgIGVsc2Ugb2JqLmV4Y2x1ZGUuc3BsaWNlKGluZGV4LCAxKVxcXFxuICAgICAgICAgICAgfSwgdi50aXRsZSwgaW5kZXgpLCBuYW1lKVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIHNlbGZcXFxcbn0sIHN0cmF0ZWd5Lmdyb3VwLm1hcCgodikgPT4gW3sgdGl0bGU6ICfigJzigJzigJ3igJ08Yj4nICsgdiwgdXJsOiAnaGlrZXI6Ly9lbXB0eScsIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScgfV0pKSlcXFxcbkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVsLCBydWxlcylcXFxcblxcXFxuc2V0UmVzdWx0KGVsKVxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6YeN6K6+5Ye95pWwXFxcIixcXFwicGF0aFxcXCI6XFxcInJlQ29uZmlnXFxcIixcXFwicnVsZVxcXCI6XFxcImZ1bmN0aW9uIHJlQ29uZmlnKGNvZGUsIGZpbGUpIHtcXFxcbiAgcmV0dXJuICQudG9TdHJpbmcoKGNvZGUsIGZpbGUpID0+IHtcXFxcbiAgICBsZXQgb2JqID0gSlNPTi5wYXJzZShyZWFkRmlsZShmaWxlKSlcXFxcbiAgICBuZXcgRnVuY3Rpb24oJ29iaicsIGNvZGUpKG9iailcXFxcbiAgICBzYXZlRmlsZShmaWxlLCBKU09OLnN0cmluZ2lmeShvYmopKVxcXFxuICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcXFxuICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmiJDlip8nXFxcXG4gIH0sIGNvZGUsIGZpbGUgfHwgJ2Jhc2VDb25maWcnKVxcXFxufVxcXFxuLy8gKG5ldyBGdW5jdGlvbignYWFhJywnY29uc29sZS5sb2coYWFhKTtsZXQgYmFjaz17fTtmb3IobGV0IGkgaW4gYWFhKXtiYWNrW2ldPXRoaXNbaV19O09iamVjdC5hc3NpZ24odGhpcywgYWFhKTtjb25zb2xlLmxvZyhiYmIsY2NjLGRkZCk7T2JqZWN0LmFzc2lnbih0aGlzLCBiYWNrKScpKSh7YmJiOidxcXEnLGNjYzonZWVlJyxkZGQ6J3d3dyd9KVxcXFxuXFxcIn1dXCJ9IiwicGljVXJsIjoiaHR0cHM6Ly93d3cuaW1haHVhdHYuY29tL3VwbG9hZC92b2QvMjAyMTA4MzEtMS9kMDE4ZTU5OGQ0MzBhYjBiODJlMzJkMWEzZWVjODg0OS5qcGciLCJ0aXRsZSI6IuKAnOKAnOKAneKAneS6keWNl+iZq+iwtyJ9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement