@hanzo/browser-extension 1.7.2 → 1.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-extension/background-firefox.js +426 -168
- package/dist/browser-extension/background.js +38 -43
- package/dist/browser-extension/chrome/background.js +38 -43
- package/dist/browser-extension/chrome/manifest.json +1 -1
- package/dist/browser-extension/chrome/popup.js +18 -7
- package/dist/browser-extension/chrome/sidebar.js +12 -11
- package/dist/browser-extension/firefox/background.js +426 -168
- package/dist/browser-extension/firefox/manifest.json +1 -1
- package/dist/browser-extension/firefox/popup.js +18 -7
- package/dist/browser-extension/firefox/sidebar.js +12 -11
- package/dist/browser-extension/manifest.json +1 -1
- package/dist/browser-extension/package.json +1 -1
- package/dist/browser-extension/popup.js +18 -7
- package/dist/browser-extension/safari/background.js +38 -43
- package/dist/browser-extension/safari/popup.js +18 -7
- package/dist/browser-extension/safari/sidebar.js +12 -11
- package/dist/browser-extension/sidebar.js +12 -11
- package/dist/hanzo-ai-chrome-1.7.2.zip +0 -0
- package/dist/hanzo-ai-chrome-1.7.3.zip +0 -0
- package/dist/hanzo-ai-firefox-1.7.2.zip +0 -0
- package/dist/hanzo-ai-firefox-1.7.3.zip +0 -0
- package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +295 -295
- package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +1 -1
- package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +1 -1
- package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +1 -1
- package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +1 -1
- package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +1 -1
- package/hanzo-ai-chrome-v1.7.6.zip +0 -0
- package/hanzo-ai-firefox-v1.7.6.zip +0 -0
- package/package.json +1 -1
- package/src/manifest-firefox.json +1 -1
- package/src/manifest.json +1 -1
- package/src/package.json +1 -1
- package/src/chat-widget.tsx +0 -93
- package/src/popup.js +0 -192
- package/src/sidebar.js +0 -884
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
setupEventListeners() {
|
|
63
|
-
var _a, _b;
|
|
64
|
-
this.el.authBtn.addEventListener("click", () => this.login());
|
|
63
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
64
|
+
(_a = this.el.authBtn) == null ? void 0 : _a.addEventListener("click", () => this.login());
|
|
65
65
|
document.querySelectorAll(".tab").forEach((tab) => {
|
|
66
66
|
tab.addEventListener("click", () => this.switchTab(tab.dataset.tab));
|
|
67
67
|
});
|
|
@@ -73,18 +73,18 @@
|
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
75
|
this.el.chatInput.addEventListener("input", () => this.autoResize());
|
|
76
|
-
(
|
|
76
|
+
(_b = this.el.ragEnabled) == null ? void 0 : _b.addEventListener("change", () => {
|
|
77
77
|
this.setRagStatus(this.el.ragEnabled.checked ? "RAG enabled" : "RAG disabled");
|
|
78
78
|
});
|
|
79
|
-
(
|
|
79
|
+
(_c = this.el.tabContextEnabled) == null ? void 0 : _c.addEventListener("change", () => {
|
|
80
80
|
var _a2;
|
|
81
81
|
if (!((_a2 = this.el.ragEnabled) == null ? void 0 : _a2.checked)) return;
|
|
82
82
|
this.setRagStatus(this.el.tabContextEnabled.checked ? "Tab context on" : "Tab context off");
|
|
83
83
|
});
|
|
84
|
-
this.el.refreshTabs.addEventListener("click", () => this.refreshTabFilesystem());
|
|
85
|
-
this.el.launchAgent.addEventListener("click", () => this.showAgentLauncher());
|
|
86
|
-
this.el.logoutBtn.addEventListener("click", () => this.logout());
|
|
87
|
-
this.el.saveSettings.addEventListener("click", () => this.saveSettings());
|
|
84
|
+
(_d = this.el.refreshTabs) == null ? void 0 : _d.addEventListener("click", () => this.refreshTabFilesystem());
|
|
85
|
+
(_e = this.el.launchAgent) == null ? void 0 : _e.addEventListener("click", () => this.showAgentLauncher());
|
|
86
|
+
(_f = this.el.logoutBtn) == null ? void 0 : _f.addEventListener("click", () => this.logout());
|
|
87
|
+
(_g = this.el.saveSettings) == null ? void 0 : _g.addEventListener("click", () => this.saveSettings());
|
|
88
88
|
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
|
89
89
|
this.handleMessage(request);
|
|
90
90
|
return true;
|
|
@@ -96,7 +96,6 @@
|
|
|
96
96
|
async checkAuth() {
|
|
97
97
|
this.el.tabBar.classList.remove("hidden");
|
|
98
98
|
this.el.authSection.classList.add("hidden");
|
|
99
|
-
this.switchTab("tools");
|
|
100
99
|
this.connectToMCP();
|
|
101
100
|
this.refreshTabFilesystem();
|
|
102
101
|
this.checkWebGPU();
|
|
@@ -109,10 +108,12 @@
|
|
|
109
108
|
this.switchTab("chat");
|
|
110
109
|
} else {
|
|
111
110
|
this.showChatLoginPrompt();
|
|
111
|
+
this.switchTab("chat");
|
|
112
112
|
}
|
|
113
113
|
} catch (error) {
|
|
114
114
|
console.error("Auth check failed:", error);
|
|
115
115
|
this.showChatLoginPrompt();
|
|
116
|
+
this.switchTab("chat");
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
async login() {
|
|
@@ -130,7 +131,7 @@
|
|
|
130
131
|
this.showError("Sign in failed");
|
|
131
132
|
} finally {
|
|
132
133
|
this.el.authBtn.disabled = false;
|
|
133
|
-
this.el.authBtn.textContent = "Sign in
|
|
134
|
+
this.el.authBtn.textContent = "Sign in";
|
|
134
135
|
}
|
|
135
136
|
}
|
|
136
137
|
async logout() {
|
|
@@ -775,4 +776,4 @@ ${rows.join("\n")}`;
|
|
|
775
776
|
};
|
|
776
777
|
var hanzoSidebar = new HanzoSidebar();
|
|
777
778
|
})();
|
|
778
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NpZGViYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIEhhbnpvIEFJIEJyb3dzZXIgRXh0ZW5zaW9uIFNpZGViYXIgXHUyMDE0IENoYXQgKyBUb29scyArIFNldHRpbmdzXG5cbmNsYXNzIEhhbnpvU2lkZWJhciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWdlbnRzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY3VycmVudFRhYiA9ICdjaGF0JztcbiAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5zdHJlYW1pbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBudWxsO1xuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmFnQ29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRpYWxpemVVSSgpO1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuY2hlY2tBdXRoKCk7XG4gIH1cblxuICBpbml0aWFsaXplVUkoKSB7XG4gICAgdGhpcy5lbCA9IHtcbiAgICAgIC8vIEF1dGhcbiAgICAgIGF1dGhTZWN0aW9uOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1zZWN0aW9uJyksXG4gICAgICBhdXRoQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1idG4nKSxcbiAgICAgIHRhYkJhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1iYXInKSxcbiAgICAgIHVzZXJCYWRnZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItYmFkZ2UnKSxcbiAgICAgIGhlYWRlckF2YXRhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWRlci1hdmF0YXInKSxcblxuICAgICAgLy8gQ2hhdFxuICAgICAgdGFiQ2hhdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1jaGF0JyksXG4gICAgICBjaGF0TWVzc2FnZXM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LW1lc3NhZ2VzJyksXG4gICAgICBjaGF0SW5wdXQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWlucHV0JyksXG4gICAgICBzZW5kQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZC1idG4nKSxcbiAgICAgIG1vZGVsU2VsZWN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc2VsZWN0JyksXG4gICAgICByYWdFbmFibGVkOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLWVuYWJsZWQnKSxcbiAgICAgIHRhYkNvbnRleHRFbmFibGVkOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWNvbnRleHQtZW5hYmxlZCcpLFxuICAgICAgcmFnU3RhdHVzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLXN0YXR1cycpLFxuXG4gICAgICAvLyBUb29sc1xuICAgICAgdGFiVG9vbHM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItdG9vbHMnKSxcbiAgICAgIG1jcFN0YXR1czogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1zdGF0dXMnKSxcbiAgICAgIG1jcFRvb2xzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXRvb2xzJyksXG4gICAgICBtY3BUb29sTGlzdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC10b29sLWxpc3QnKSxcbiAgICAgIGFnZW50Q291bnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZ2VudC1jb3VudCcpLFxuICAgICAgYWdlbnRMaXN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWdlbnQtbGlzdCcpLFxuICAgICAgdGFiRnM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItZnMnKSxcbiAgICAgIHJlZnJlc2hUYWJzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaC10YWJzJyksXG4gICAgICBncHVTdGF0dXM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncHUtc3RhdHVzJyksXG4gICAgICBncHVNb2RlbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1tb2RlbCcpLFxuICAgICAgbGF1bmNoQWdlbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXVuY2gtYWdlbnQnKSxcblxuICAgICAgLy8gU2V0dGluZ3NcbiAgICAgIHRhYlNldHRpbmdzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNldHRpbmdzJyksXG4gICAgICB1c2VyQXZhdGFyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKSxcbiAgICAgIHVzZXJOYW1lOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1uYW1lJyksXG4gICAgICB1c2VyRW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWVtYWlsJyksXG4gICAgICBsb2dvdXRCdG46IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dvdXQtYnRuJyksXG4gICAgICBzYXZlU2V0dGluZ3M6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyksXG4gICAgICBkZWZhdWx0TW9kZWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWZhdWx0LW1vZGVsJyksXG4gICAgICByYWdVc2VaYXA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctdXNlLXphcCcpLFxuICAgICAgcmFnSW5jbHVkZVRhYkNvbnRleHQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctaW5jbHVkZS10YWItY29udGV4dCcpLFxuICAgICAgcmFnVG9wSzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZy10b3AtaycpLFxuICAgICAgcmFnS2I6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWcta2InKSxcbiAgICAgIHJhZ0VuZHBvaW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLWVuZHBvaW50JyksXG4gICAgICByYWdBcGlLZXk6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctYXBpLWtleScpLFxuICAgIH07XG4gIH1cblxuICBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIEF1dGhcbiAgICB0aGlzLmVsLmF1dGhCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmxvZ2luKCkpO1xuXG4gICAgLy8gVGFic1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWInKS5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICB0YWIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnN3aXRjaFRhYih0YWIuZGF0YXNldC50YWIpKTtcbiAgICB9KTtcblxuICAgIC8vIENoYXRcbiAgICB0aGlzLmVsLnNlbmRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnNlbmRNZXNzYWdlKCkpO1xuICAgIHRoaXMuZWwuY2hhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZWwuY2hhdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5hdXRvUmVzaXplKCkpO1xuICAgIHRoaXMuZWwucmFnRW5hYmxlZD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5zZXRSYWdTdGF0dXModGhpcy5lbC5yYWdFbmFibGVkLmNoZWNrZWQgPyAnUkFHIGVuYWJsZWQnIDogJ1JBRyBkaXNhYmxlZCcpO1xuICAgIH0pO1xuICAgIHRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lbC5yYWdFbmFibGVkPy5jaGVja2VkKSByZXR1cm47XG4gICAgICB0aGlzLnNldFJhZ1N0YXR1cyh0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkLmNoZWNrZWQgPyAnVGFiIGNvbnRleHQgb24nIDogJ1RhYiBjb250ZXh0IG9mZicpO1xuICAgIH0pO1xuXG4gICAgLy8gVG9vbHNcbiAgICB0aGlzLmVsLnJlZnJlc2hUYWJzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5yZWZyZXNoVGFiRmlsZXN5c3RlbSgpKTtcbiAgICB0aGlzLmVsLmxhdW5jaEFnZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5zaG93QWdlbnRMYXVuY2hlcigpKTtcblxuICAgIC8vIFNldHRpbmdzXG4gICAgdGhpcy5lbC5sb2dvdXRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmxvZ291dCgpKTtcbiAgICB0aGlzLmVsLnNhdmVTZXR0aW5ncy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuc2F2ZVNldHRpbmdzKCkpO1xuXG4gICAgLy8gQmFja2dyb3VuZCBtZXNzYWdlc1xuICAgIGNocm9tZS5ydW50aW1lLm9uTWVzc2FnZS5hZGRMaXN0ZW5lcigocmVxdWVzdCwgc2VuZGVyLCBzZW5kUmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlTWVzc2FnZShyZXF1ZXN0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEF1dGhcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgYXN5bmMgY2hlY2tBdXRoKCkge1xuICAgIC8vIEFsd2F5cyBzaG93IHRhYnMgYW5kIGluaXRpYWxpemUgdG9vbHMgXHUyMDE0IGF1dGggb25seSBnYXRlcyBjaGF0XG4gICAgdGhpcy5lbC50YWJCYXIuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgdGhpcy5lbC5hdXRoU2VjdGlvbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICB0aGlzLnN3aXRjaFRhYigndG9vbHMnKTsgLy8gRGVmYXVsdCB0byB0b29scyAoYWx3YXlzIHdvcmtzKVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBmZWF0dXJlcyB0aGF0IHdvcmsgd2l0aG91dCBhdXRoXG4gICAgdGhpcy5jb25uZWN0VG9NQ1AoKTtcbiAgICB0aGlzLnJlZnJlc2hUYWJGaWxlc3lzdGVtKCk7XG4gICAgdGhpcy5jaGVja1dlYkdQVSgpO1xuICAgIHRoaXMubG9hZFNldHRpbmdzKCk7XG4gICAgdGhpcy5zdGFydE1vbml0b3JpbmcoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXV0aC5zdGF0dXMnIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLnVzZXIpO1xuICAgICAgICB0aGlzLnN3aXRjaFRhYignY2hhdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Q2hhdExvZ2luUHJvbXB0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0F1dGggY2hlY2sgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHRoaXMuc2hvd0NoYXRMb2dpblByb21wdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvZ2luKCkge1xuICAgIHRoaXMuZWwuYXV0aEJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lbC5hdXRoQnRuLnRleHRDb250ZW50ID0gJ1NpZ25pbmcgaW4uLi4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ2luJyB9KTtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UudXNlcik7XG4gICAgICAgIHRoaXMuaGlkZUNoYXRMb2dpblByb21wdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzcG9uc2U/LmVycm9yIHx8ICdTaWduIGluIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcignU2lnbiBpbiBmYWlsZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5lbC5hdXRoQnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmVsLmF1dGhCdG4udGV4dENvbnRlbnQgPSAnU2lnbiBpbiB3aXRoIEhhbnpvJztcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2dvdXQoKSB7XG4gICAgYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ291dCcgfSk7XG4gICAgdGhpcy5lbC51c2VyQmFkZ2UuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgdGhpcy5lbC51c2VyTmFtZS50ZXh0Q29udGVudCA9ICcnO1xuICAgIHRoaXMuZWwudXNlckVtYWlsLnRleHRDb250ZW50ID0gJyc7XG4gICAgdGhpcy5zaG93Q2hhdExvZ2luUHJvbXB0KCk7XG4gICAgdGhpcy5zd2l0Y2hUYWIoJ3Rvb2xzJyk7XG4gIH1cblxuICBzZXRVc2VyKHVzZXIpIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSB1c2VyLnBpY3R1cmUgfHwgdXNlci5hdmF0YXIgfHwgJyc7XG4gICAgICBpZiAoYXZhdGFyKSB7XG4gICAgICAgIHRoaXMuZWwuaGVhZGVyQXZhdGFyLnNyYyA9IGF2YXRhcjtcbiAgICAgICAgdGhpcy5lbC51c2VyQmFkZ2UuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZWwudXNlckF2YXRhci5zcmMgPSBhdmF0YXI7XG4gICAgICB9XG4gICAgICB0aGlzLmVsLnVzZXJOYW1lLnRleHRDb250ZW50ID0gdXNlci5uYW1lIHx8IHVzZXIuZGlzcGxheU5hbWUgfHwgJ1VzZXInO1xuICAgICAgdGhpcy5lbC51c2VyRW1haWwudGV4dENvbnRlbnQgPSB1c2VyLmVtYWlsIHx8ICcnO1xuICAgIH1cbiAgICB0aGlzLmxvYWRNb2RlbHMoKTtcbiAgICB0aGlzLmxvYWRDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIHNob3dDaGF0TG9naW5Qcm9tcHQoKSB7XG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgLy8gU2hvdyBsb2dpbiBwcm9tcHQgaW4gY2hhdCBhcmVhIGluc3RlYWQgb2YgYmxvY2tpbmcgZW50aXJlIHNpZGViYXJcbiAgICBjb25zdCBjaGF0TG9naW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdC1sb2dpbi1wcm9tcHQnKTtcbiAgICBpZiAoY2hhdExvZ2luKSBjaGF0TG9naW4uY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgY29uc3QgY2hhdENvbXBvc2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtY29tcG9zZXInKTtcbiAgICBpZiAoY2hhdENvbXBvc2VyKSBjaGF0Q29tcG9zZXIuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gIH1cblxuICBoaWRlQ2hhdExvZ2luUHJvbXB0KCkge1xuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XG4gICAgY29uc3QgY2hhdExvZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtbG9naW4tcHJvbXB0Jyk7XG4gICAgaWYgKGNoYXRMb2dpbikgY2hhdExvZ2luLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIGNvbnN0IGNoYXRDb21wb3NlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWNvbXBvc2VyJyk7XG4gICAgaWYgKGNoYXRDb21wb3NlcikgY2hhdENvbXBvc2VyLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRhYiBOYXZpZ2F0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHN3aXRjaFRhYihuYW1lKSB7XG4gICAgdGhpcy5jdXJyZW50VGFiID0gbmFtZTtcblxuICAgIC8vIFVwZGF0ZSB0YWIgYnV0dG9uc1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWInKS5mb3JFYWNoKHQgPT4ge1xuICAgICAgdC5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCB0LmRhdGFzZXQudGFiID09PSBuYW1lKTtcbiAgICB9KTtcblxuICAgIC8vIFNob3cvaGlkZSBjb250ZW50XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRhYi1jb250ZW50JykuZm9yRWFjaCh0ID0+IHQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJykpO1xuICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGB0YWItJHtuYW1lfWApO1xuICAgIGlmICh0YXJnZXQpIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDaGF0XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGxvYWRNb2RlbHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdjaGF0Lmxpc3RNb2RlbHMnIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLm1vZGVscz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuZWwubW9kZWxTZWxlY3Q7XG4gICAgICAgIHNlbGVjdC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiByZXNwb25zZS5tb2RlbHMpIHtcbiAgICAgICAgICBjb25zdCBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICBvcHQudmFsdWUgPSBtb2RlbC5pZDtcbiAgICAgICAgICBvcHQudGV4dENvbnRlbnQgPSBtb2RlbC5uYW1lIHx8IG1vZGVsLmlkO1xuICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsc28gcG9wdWxhdGUgc2V0dGluZ3MgZGVmYXVsdCBtb2RlbFxuICAgICAgICB0aGlzLmVsLmRlZmF1bHRNb2RlbC5pbm5lckhUTUwgPSBzZWxlY3QuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCBkZWZhdWx0IG9wdGlvbnNcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kTWVzc2FnZSgpIHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5lbC5jaGF0SW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGlmICghdGV4dCB8fCB0aGlzLnN0cmVhbWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcignUGxlYXNlIHNpZ24gaW4gdG8gdXNlIGNoYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgdG9rZW5cbiAgICBjb25zdCB0b2tlblJlc3AgPSBhd2FpdCBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2F1dGguZ2V0VG9rZW4nIH0pO1xuICAgIGlmICghdG9rZW5SZXNwPy5zdWNjZXNzIHx8ICF0b2tlblJlc3AudG9rZW4pIHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKCdQbGVhc2Ugc2lnbiBpbiBhZ2FpbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJNZXNzYWdlID0geyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IHRleHQgfTtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZWwubW9kZWxTZWxlY3QudmFsdWU7XG4gICAgbGV0IHJlcXVlc3RNZXNzYWdlcyA9IFsuLi50aGlzLm1lc3NhZ2VzLCB1c2VyTWVzc2FnZV07XG5cbiAgICB0aGlzLnJhZ0NvbnRleHQgPSBudWxsO1xuICAgIGlmICh0aGlzLmVsLnJhZ0VuYWJsZWQ/LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKCdSZXRyaWV2aW5nIGNvbnRleHQuLi4nKTtcbiAgICAgIGNvbnN0IHJhZ1Jlc3AgPSBhd2FpdCB0aGlzLnJlcXVlc3RSYWdDb250ZXh0KHRleHQpO1xuICAgICAgaWYgKHJhZ1Jlc3A/LnN1Y2Nlc3MgJiYgQXJyYXkuaXNBcnJheShyYWdSZXNwLnNuaXBwZXRzKSAmJiByYWdSZXNwLnNuaXBwZXRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnJhZ0NvbnRleHQgPSByYWdSZXNwO1xuICAgICAgICByZXF1ZXN0TWVzc2FnZXMgPSBbXG4gICAgICAgICAgeyByb2xlOiAnc3lzdGVtJywgY29udGVudDogdGhpcy5idWlsZFJhZ1N5c3RlbVByb21wdChyYWdSZXNwKSB9LFxuICAgICAgICAgIC4uLnJlcXVlc3RNZXNzYWdlcyxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5zZXRSYWdTdGF0dXMoYFJBRzogJHtyYWdSZXNwLnNuaXBwZXRzLmxlbmd0aH0gc25pcHBldChzKSBmcm9tICR7cmFnUmVzcC5zb3VyY2UgfHwgJ2NvbnRleHQnfWApO1xuICAgICAgfSBlbHNlIGlmIChyYWdSZXNwPy5lcnJvcikge1xuICAgICAgICB0aGlzLnNldFJhZ1N0YXR1cyhgUkFHIHVuYXZhaWxhYmxlICgke3JhZ1Jlc3AuZXJyb3J9KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRSYWdTdGF0dXMoJ05vIGNvbnRleHQgZm91bmQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRSYWdTdGF0dXMoJ1JBRyBkaXNhYmxlZCcpO1xuICAgIH1cblxuICAgIC8vIEFkZCB1c2VyIG1lc3NhZ2UgdG8gdHJhbnNjcmlwdFxuICAgIHRoaXMubWVzc2FnZXMucHVzaCh1c2VyTWVzc2FnZSk7XG4gICAgdGhpcy5hcHBlbmRNZXNzYWdlKCd1c2VyJywgdGV4dCk7XG5cbiAgICAvLyBDbGVhciBpbnB1dFxuICAgIHRoaXMuZWwuY2hhdElucHV0LnZhbHVlID0gJyc7XG4gICAgdGhpcy5hdXRvUmVzaXplKCk7XG5cbiAgICAvLyBTaG93IHR5cGluZ1xuICAgIHRoaXMuc3RyZWFtaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVsLnNlbmRCdG4uZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHR5cGluZ0VsID0gdGhpcy5zaG93VHlwaW5nKCk7XG5cbiAgICAvLyBDcmVhdGUgYXNzaXN0YW50IG1lc3NhZ2UgZWxlbWVudFxuICAgIGNvbnN0IGFzc2lzdGFudEVsID0gdGhpcy5hcHBlbmRNZXNzYWdlKCdhc3Npc3RhbnQnLCAnJyk7XG4gICAgbGV0IGZ1bGxDb250ZW50ID0gJyc7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RyZWFtIHZpYSBkaXJlY3QgZmV0Y2ggKHNpZGViYXIgaGFzIGFjY2VzcyB2aWEgQ1NQKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuaGFuem8uYWkvdjEvY2hhdC9jb21wbGV0aW9ucycsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VuUmVzcC50b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgbWVzc2FnZXM6IHJlcXVlc3RNZXNzYWdlcyxcbiAgICAgICAgICBzdHJlYW06IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICBzaWduYWw6ICh0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCkpLnNpZ25hbCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVyclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQVBJIGVycm9yICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtlcnJUZXh0fWApO1xuICAgICAgfVxuXG4gICAgICB0eXBpbmdFbC5yZW1vdmUoKTtcbiAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICBsZXQgYnVmZmVyID0gJyc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICAgIGlmIChkb25lKSBicmVhaztcblxuICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgICBpZiAoIXRyaW1tZWQgfHwgdHJpbW1lZC5zdGFydHNXaXRoKCc6JykpIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ2RhdGE6ICcpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdHJpbW1lZC5zbGljZSg2KTtcbiAgICAgICAgICAgIGlmIChkYXRhID09PSAnW0RPTkVdJykgYnJlYWs7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICBjb25zdCBkZWx0YSA9IHBhcnNlZC5jaG9pY2VzPy5bMF0/LmRlbHRhPy5jb250ZW50O1xuICAgICAgICAgICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgICAgICAgICBmdWxsQ29udGVudCArPSBkZWx0YTtcbiAgICAgICAgICAgICAgICBhc3Npc3RhbnRFbC5pbm5lckhUTUwgPSB0aGlzLnJlbmRlck1hcmtkb3duKGZ1bGxDb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2gge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucmFnQ29udGV4dD8uc25pcHBldHM/Lmxlbmd0aCkge1xuICAgICAgICBmdWxsQ29udGVudCArPSB0aGlzLmJ1aWxkUmFnQ2l0YXRpb25CbG9jayh0aGlzLnJhZ0NvbnRleHQpO1xuICAgICAgICBhc3Npc3RhbnRFbC5pbm5lckhUTUwgPSB0aGlzLnJlbmRlck1hcmtkb3duKGZ1bGxDb250ZW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHsgcm9sZTogJ2Fzc2lzdGFudCcsIGNvbnRlbnQ6IGZ1bGxDb250ZW50IH0pO1xuICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHR5cGluZ0VsLnJlbW92ZSgpO1xuICAgICAgaWYgKGVycm9yPy5uYW1lICE9PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgYXNzaXN0YW50RWwucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYXBwZW5kRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgfHwgJ0NoYXQgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc3RyZWFtaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgdGhpcy5lbC5zZW5kQnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QWN0aXZlVGFiQ29udGV4dCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgW2FjdGl2ZVRhYl0gPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9KTtcbiAgICAgIGlmICghYWN0aXZlVGFiKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogYWN0aXZlVGFiLnVybCB8fCAnJyxcbiAgICAgICAgdGl0bGU6IGFjdGl2ZVRhYi50aXRsZSB8fCAnJyxcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXF1ZXN0UmFnQ29udGV4dChxdWVyeSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYWdlQ29udGV4dCA9IHRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQ/LmNoZWNrZWQgPyBhd2FpdCB0aGlzLmdldEFjdGl2ZVRhYkNvbnRleHQoKSA6IG51bGw7XG4gICAgICBjb25zdCB0b3BLID0gTWF0aC5tYXgoMSwgTWF0aC5taW4ocGFyc2VJbnQodGhpcy5lbC5yYWdUb3BLPy52YWx1ZSB8fCAnNScsIDEwKSB8fCA1LCAyMCkpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe1xuICAgICAgICBhY3Rpb246ICdyYWcucXVlcnknLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgdG9wSyxcbiAgICAgICAgaW5jbHVkZVRhYkNvbnRleHQ6ICEhdGhpcy5lbC50YWJDb250ZXh0RW5hYmxlZD8uY2hlY2tlZCxcbiAgICAgICAgdXNlWmFwTWVtb3J5OiAhIXRoaXMuZWwucmFnVXNlWmFwPy5jaGVja2VkLFxuICAgICAgICBrbm93bGVkZ2VCYXNlOiB0aGlzLmVsLnJhZ0tiPy52YWx1ZSB8fCAnJyxcbiAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZWwucmFnRW5kcG9pbnQ/LnZhbHVlIHx8ICcnLFxuICAgICAgICBhcGlLZXk6IHRoaXMuZWwucmFnQXBpS2V5Py52YWx1ZSB8fCAnJyxcbiAgICAgICAgcGFnZUNvbnRleHQ6IHBhZ2VDb250ZXh0IHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcXVlcnkgUkFHJyB9O1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkUmFnU3lzdGVtUHJvbXB0KHJhZ1Jlc3BvbnNlKSB7XG4gICAgY29uc3Qgc25pcHBldHMgPSAocmFnUmVzcG9uc2U/LnNuaXBwZXRzIHx8IFtdKS5zbGljZSgwLCA4KTtcbiAgICBjb25zdCBsaW5lcyA9IHNuaXBwZXRzLm1hcCgoc25pcHBldCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gc25pcHBldC50aXRsZSB8fCBzbmlwcGV0LnNvdXJjZSB8fCBgU25pcHBldCAke2luZGV4ICsgMX1gO1xuICAgICAgY29uc3Qgc2NvcmUgPSB0eXBlb2Ygc25pcHBldC5zY29yZSA9PT0gJ251bWJlcicgPyBgIChzY29yZSAke3NuaXBwZXQuc2NvcmUudG9GaXhlZCgzKX0pYCA6ICcnO1xuICAgICAgY29uc3Qgc291cmNlTGluZSA9IHNuaXBwZXQudXJsID8gYCR7dGl0bGV9JHtzY29yZX0gXHUyMDE0ICR7c25pcHBldC51cmx9YCA6IGAke3RpdGxlfSR7c2NvcmV9YDtcbiAgICAgIHJldHVybiBgWyR7aW5kZXggKyAxfV0gJHtzb3VyY2VMaW5lfVxcbiR7c25pcHBldC5jb250ZW50fWA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJ1lvdSBhcmUgYXNzaXN0aW5nIGluc2lkZSBIYW56byBCcm93c2VyIEV4dGVuc2lvbi4nLFxuICAgICAgJ1VzZSB0aGUgcmV0cmlldmVkIGNvbnRleHQgYmVsb3cgd2hlbiByZWxldmFudCwgYW5kIHN0YXRlIHVuY2VydGFpbnR5IGlmIGNvbnRleHQgaXMgaW5zdWZmaWNpZW50LicsXG4gICAgICAnUmV0cmlldmVkIENvbnRleHQ6JyxcbiAgICAgIC4uLmxpbmVzLFxuICAgIF0uam9pbignXFxuXFxuJyk7XG4gIH1cblxuICBidWlsZFJhZ0NpdGF0aW9uQmxvY2socmFnUmVzcG9uc2UpIHtcbiAgICBjb25zdCBzbmlwcGV0cyA9IChyYWdSZXNwb25zZT8uc25pcHBldHMgfHwgW10pLnNsaWNlKDAsIDUpO1xuICAgIGlmICghc25pcHBldHMubGVuZ3RoKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCByb3dzID0gc25pcHBldHMubWFwKChzbmlwcGV0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgdGl0bGUgPSBzbmlwcGV0LnRpdGxlIHx8IHNuaXBwZXQuc291cmNlIHx8IGBTbmlwcGV0ICR7aW5kZXggKyAxfWA7XG4gICAgICBpZiAoc25pcHBldC51cmwpIHtcbiAgICAgICAgcmV0dXJuIGAtICR7dGl0bGV9OiAke3NuaXBwZXQudXJsfWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYC0gJHt0aXRsZX1gO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGBcXG5cXG4tLS1cXG5Db250ZXh0IFNvdXJjZXM6XFxuJHtyb3dzLmpvaW4oJ1xcbicpfWA7XG4gIH1cblxuICBzZXRSYWdTdGF0dXModGV4dCkge1xuICAgIGlmICghdGhpcy5lbC5yYWdTdGF0dXMpIHJldHVybjtcbiAgICB0aGlzLmVsLnJhZ1N0YXR1cy50ZXh0Q29udGVudCA9IHRleHQgfHwgJ1JlYWR5JztcbiAgfVxuXG4gIGFwcGVuZE1lc3NhZ2Uocm9sZSwgY29udGVudCkge1xuICAgIC8vIFJlbW92ZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zdCB3ZWxjb21lID0gdGhpcy5lbC5jaGF0TWVzc2FnZXMucXVlcnlTZWxlY3RvcignLmNoYXQtd2VsY29tZScpO1xuICAgIGlmICh3ZWxjb21lKSB3ZWxjb21lLnJlbW92ZSgpO1xuXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmNsYXNzTmFtZSA9IGBtc2cgbXNnLSR7cm9sZX1gO1xuICAgIGRpdi5pbm5lckhUTUwgPSByb2xlID09PSAnYXNzaXN0YW50JyA/IHRoaXMucmVuZGVyTWFya2Rvd24oY29udGVudCkgOiB0aGlzLmVzY2FwZUh0bWwoY29udGVudCk7XG4gICAgdGhpcy5lbC5jaGF0TWVzc2FnZXMuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFwcGVuZEVycm9yKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuY2xhc3NOYW1lID0gJ21zZy1lcnJvcic7XG4gICAgZGl2LnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgICB0aGlzLmVsLmNoYXRNZXNzYWdlcy5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuXG4gIHNob3dUeXBpbmcoKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmNsYXNzTmFtZSA9ICd0eXBpbmctaW5kaWNhdG9yJztcbiAgICBkaXYuaW5uZXJIVE1MID0gJzxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPic7XG4gICAgdGhpcy5lbC5jaGF0TWVzc2FnZXMuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKCkge1xuICAgIHRoaXMuZWwuY2hhdE1lc3NhZ2VzLnNjcm9sbFRvcCA9IHRoaXMuZWwuY2hhdE1lc3NhZ2VzLnNjcm9sbEhlaWdodDtcbiAgfVxuXG4gIGF1dG9SZXNpemUoKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLmNoYXRJbnB1dDtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCAxMjApICsgJ3B4JztcbiAgfVxuXG4gIC8vIE1pbmltYWwgbWFya2Rvd246IGNvZGUgYmxvY2tzLCBpbmxpbmUgY29kZSwgYm9sZCwgaXRhbGljLCBsaW5lIGJyZWFrc1xuICByZW5kZXJNYXJrZG93bih0ZXh0KSB7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG4gICAgbGV0IGh0bWwgPSB0aGlzLmVzY2FwZUh0bWwodGV4dCk7XG5cbiAgICAvLyBDb2RlIGJsb2NrczogYGBgbGFuZ1xcbi4uLlxcbmBgYFxuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL2BgYChcXHcqKVxcbihbXFxzXFxTXSo/KWBgYC9nLCAoXywgbGFuZywgY29kZSkgPT4ge1xuICAgICAgcmV0dXJuIGA8cHJlPjxjb2RlPiR7Y29kZS50cmltKCl9PC9jb2RlPjwvcHJlPmA7XG4gICAgfSk7XG5cbiAgICAvLyBJbmxpbmUgY29kZTogYC4uLmBcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gKFteYF0rKWAvZywgJzxjb2RlPiQxPC9jb2RlPicpO1xuXG4gICAgLy8gQm9sZDogKiouLi4qKlxuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL1xcKlxcKihbXipdKylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcblxuICAgIC8vIEl0YWxpYzogKi4uLipcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXCooW14qXSspXFwqL2csICc8ZW0+JDE8L2VtPicpO1xuXG4gICAgLy8gTGluZSBicmVha3NcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXG4vZywgJzxicj4nKTtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgZXNjYXBlSHRtbCh0ZXh0KSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRDb252ZXJzYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoWydoYW56b19jaGF0X21lc3NhZ2VzJ10sIChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5oYW56b19jaGF0X21lc3NhZ2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzID0gcmVzdWx0LmhhbnpvX2NoYXRfbWVzc2FnZXM7XG4gICAgICAgICAgLy8gUmVuZGVyIHN0b3JlZCBtZXNzYWdlc1xuICAgICAgICAgIGNvbnN0IHdlbGNvbWUgPSB0aGlzLmVsLmNoYXRNZXNzYWdlcy5xdWVyeVNlbGVjdG9yKCcuY2hhdC13ZWxjb21lJyk7XG4gICAgICAgICAgaWYgKHdlbGNvbWUpIHdlbGNvbWUucmVtb3ZlKCk7XG4gICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgdGhpcy5tZXNzYWdlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRNZXNzYWdlKG1zZy5yb2xlLCBtc2cuY29udGVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZUNvbnZlcnNhdGlvbigpIHtcbiAgICAvLyBLZWVwIGxhc3QgNTAgbWVzc2FnZXNcbiAgICBjb25zdCB0b1N0b3JlID0gdGhpcy5tZXNzYWdlcy5zbGljZSgtNTApO1xuICAgIGNocm9tZS5zdG9yYWdlLmxvY2FsLnNldCh7IGhhbnpvX2NoYXRfbWVzc2FnZXM6IHRvU3RvcmUgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVG9vbHMgVGFiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIGNvbm5lY3RUb01DUCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgemFwUmVzcG9uc2UgPSBhd2FpdCBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3phcC5zdGF0dXMnIH0pO1xuICAgICAgaWYgKHphcFJlc3BvbnNlPy5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHphcCA9IHphcFJlc3BvbnNlLnphcDtcbiAgICAgICAgY29uc3QgdG9vbENvdW50ID0gemFwLm1jcHM/LnJlZHVjZSgoc3VtLCBtKSA9PiBzdW0gKyAobS50b29scz8ubGVuZ3RoIHx8IDApLCAwKSB8fCAwO1xuICAgICAgICB0aGlzLnVwZGF0ZU1DUFN0YXR1cyh6YXAuY29ubmVjdGVkLCB0b29sQ291bnQsIHphcC5tY3BzPy5sZW5ndGggfHwgMCk7XG4gICAgICAgIGlmICh6YXAuY29ubmVjdGVkKSB7XG4gICAgICAgICAgY29uc3QgdG9vbHNSZXNwID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAubGlzdFRvb2xzJyB9KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1DUFRvb2xMaXN0KHRvb2xzUmVzcD8uc3VjY2VzcyA/IHRvb2xzUmVzcC50b29scyA6IFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1DUFRvb2xMaXN0KFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVNQ1BTdGF0dXMoZmFsc2UpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1DUFRvb2xMaXN0KFtdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMudXBkYXRlTUNQU3RhdHVzKGZhbHNlKTtcbiAgICAgIHRoaXMudXBkYXRlTUNQVG9vbExpc3QoW10pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU1DUFN0YXR1cyhjb25uZWN0ZWQsIHRvb2xDb3VudCA9IDAsIG1jcENvdW50ID0gMCkge1xuICAgIHRoaXMuZWwubWNwU3RhdHVzLmlubmVySFRNTCA9IGNvbm5lY3RlZCA/IGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWluZGljYXRvciBjb25uZWN0ZWRcIj48L3NwYW4+XG4gICAgICAke21jcENvdW50ID4gMCA/IGBaQVA6ICR7bWNwQ291bnR9IE1DUChzKWAgOiAnQ29ubmVjdGVkJ31cbiAgICBgIDogYFxuICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yIGRpc2Nvbm5lY3RlZFwiPjwvc3Bhbj5cbiAgICAgIERpc2Nvbm5lY3RlZFxuICAgIGA7XG4gICAgdGhpcy5lbC5tY3BUb29scy50ZXh0Q29udGVudCA9IHRvb2xDb3VudDtcbiAgfVxuXG4gIHVwZGF0ZU1DUFRvb2xMaXN0KHRvb2xzKSB7XG4gICAgaWYgKCF0aGlzLmVsLm1jcFRvb2xMaXN0KSByZXR1cm47XG4gICAgaWYgKCF0b29scyB8fCAhdG9vbHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVsLm1jcFRvb2xMaXN0LnRleHRDb250ZW50ID0gJ05vIHRvb2xzIGRpc2NvdmVyZWQgeWV0Lic7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQodG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpKSkuc29ydCgpO1xuICAgIGNvbnN0IHByZXZpZXcgPSBuYW1lcy5zbGljZSgwLCAyMCk7XG4gICAgY29uc3Qgc3VmZml4ID0gbmFtZXMubGVuZ3RoID4gcHJldmlldy5sZW5ndGggPyBgXFxuLi4uICske25hbWVzLmxlbmd0aCAtIHByZXZpZXcubGVuZ3RofSBtb3JlYCA6ICcnO1xuICAgIHRoaXMuZWwubWNwVG9vbExpc3QudGV4dENvbnRlbnQgPSBgJHtwcmV2aWV3LmpvaW4oJ1xcbicpfSR7c3VmZml4fWA7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVGFiRmlsZXN5c3RlbSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFicyA9IGF3YWl0IGNocm9tZS50YWJzLnF1ZXJ5KHt9KTtcbiAgICAgIHRoaXMuZWwudGFiRnMuaW5uZXJIVE1MID0gdGFicy5tYXAoKHRhYiwgaSkgPT4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWl0ZW0gJHt0YWIuYWN0aXZlID8gJ2FjdGl2ZScgOiAnJ31cIiBkYXRhLXRhYi1pZD1cIiR7dGFiLmlkfVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMiAydjEyaDEyVjJIMnptMSAxaDEwdjEwSDNWM3pcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gdGl0bGU9XCIke3RoaXMuZXNjYXBlSHRtbCh0YWIudXJsIHx8ICcnKX1cIj4vdGFicy8ke2l9LyR7dGhpcy5zYW5pdGl6ZVBhdGgodGFiLnRpdGxlIHx8ICd1bnRpdGxlZCcpfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgKS5qb2luKCcnKTtcblxuICAgICAgdGhpcy5lbC50YWJGcy5xdWVyeVNlbGVjdG9yQWxsKCcudGFiLWl0ZW0nKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNocm9tZS50YWJzLnVwZGF0ZShwYXJzZUludChpdGVtLmRhdGFzZXQudGFiSWQpLCB7IGFjdGl2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBzYW5pdGl6ZVBhdGgodGl0bGUpIHtcbiAgICByZXR1cm4gdGl0bGUucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJ18nKS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLCAzMCk7XG4gIH1cblxuICBhc3luYyBjaGVja1dlYkdQVSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ2NoZWNrV2ViR1BVJyB9KTtcbiAgICAgIGlmIChyZXNwb25zZT8uYXZhaWxhYmxlKSB7XG4gICAgICAgIHRoaXMuZWwuZ3B1U3RhdHVzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pbmRpY2F0b3IgY29ubmVjdGVkXCI+PC9zcGFuPlxuICAgICAgICAgIEF2YWlsYWJsZVxuICAgICAgICBgO1xuICAgICAgICB0aGlzLmVsLmdwdU1vZGVsLnRleHRDb250ZW50ID0gcmVzcG9uc2UuYWRhcHRlciB8fCAnVW5rbm93bic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVsLmdwdVN0YXR1cy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yIGRpc2Nvbm5lY3RlZFwiPjwvc3Bhbj5cbiAgICAgICAgICBOb3QgQXZhaWxhYmxlXG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgdXBkYXRlQWdlbnRMaXN0KCkge1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20odGhpcy5hZ2VudHMudmFsdWVzKCkpO1xuICAgIHRoaXMuZWwuYWdlbnRDb3VudC50ZXh0Q29udGVudCA9IGFyci5sZW5ndGg7XG4gICAgaWYgKGFyci5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZWwuYWdlbnRMaXN0LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIj5ObyBhY3RpdmUgYWdlbnRzPC9kaXY+JztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbC5hZ2VudExpc3QuaW5uZXJIVE1MID0gYXJyLm1hcChhID0+IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1pdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1pY29uXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA2djZsNCAyXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1pbmZvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFnZW50LW5hbWVcIj4ke3RoaXMuZXNjYXBlSHRtbChhLm5hbWUpfTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1zdGF0dXNcIj4ke2Euc3RhdHVzfSBcdTIwMjIgVGFiICR7YS50YWJJZH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnRuIHNtYWxsXCIgZGF0YS1zdG9wPVwiJHthLmlkfVwiIHRpdGxlPVwiU3RvcFwiPlxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgKS5qb2luKCcnKTtcblxuICAgIHRoaXMuZWwuYWdlbnRMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXN0b3BdJykuZm9yRWFjaChidG4gPT4ge1xuICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGJ0bi5kYXRhc2V0LnN0b3A7XG4gICAgICAgIGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnc3RvcEFnZW50JywgYWdlbnRJZDogaWQgfSk7XG4gICAgICAgIHRoaXMuYWdlbnRzLmRlbGV0ZShpZCk7XG4gICAgICAgIHRoaXMudXBkYXRlQWdlbnRMaXN0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dBZ2VudExhdW5jaGVyKCkge1xuICAgIC8vIENyZWF0ZSBhZ2VudCBsYXVuY2hlciBtb2RhbCBvdmVybGF5XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG92ZXJsYXkuY2xhc3NOYW1lID0gJ21vZGFsLW92ZXJsYXknO1xuICAgIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxoMz5MYXVuY2ggQWdlbnQ8L2gzPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biBjbG9zZS1tb2RhbFwiPiZ0aW1lczs8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2V0dGluZy1pdGVtXCI+XG4gICAgICAgICAgICA8c3Bhbj5UYXJnZXQgVGFiPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImFnZW50LXRhYi1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFjdGl2ZVwiPkFjdGl2ZSBUYWI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic2V0dGluZy1pdGVtXCI+XG4gICAgICAgICAgICA8c3Bhbj5BZ2VudCBUeXBlPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBpZD1cImFnZW50LXR5cGUtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJicm93c2VyLWNvbnRyb2xcIj5Ccm93c2VyIEF1dG9tYXRpb248L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInBhZ2UtYW5hbHl6ZXJcIj5QYWdlIEFuYWx5emVyPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmb3JtLWZpbGxlclwiPkZvcm0gRmlsbGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkYXRhLWV4dHJhY3RvclwiPkRhdGEgRXh0cmFjdG9yPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNldHRpbmctaXRlbVwiPlxuICAgICAgICAgICAgPHNwYW4+SW5zdHJ1Y3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgPHRleHRhcmVhIGlkPVwiYWdlbnQtaW5zdHJ1Y3Rpb25zXCIgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cIkRlc2NyaWJlIHdoYXQgdGhlIGFnZW50IHNob3VsZCBkby4uLlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5LWJ0biBjYW5jZWwtbW9kYWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeS1idG4gbGF1bmNoLW1vZGFsXCI+TGF1bmNoPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuXG4gICAgLy8gUG9wdWxhdGUgdGFic1xuICAgIGNocm9tZS50YWJzLnF1ZXJ5KHt9LCAodGFicykgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcjYWdlbnQtdGFiLXNlbGVjdCcpO1xuICAgICAgdGFicy5mb3JFYWNoKHRhYiA9PiB7XG4gICAgICAgIGlmICh0YWIuaWQpIHtcbiAgICAgICAgICBjb25zdCBvcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcbiAgICAgICAgICBvcHQudmFsdWUgPSB0YWIuaWQ7XG4gICAgICAgICAgb3B0LnRleHRDb250ZW50ID0gYCR7dGFiLnRpdGxlPy5zdWJzdHJpbmcoMCwgNDApIHx8ICdVbnRpdGxlZCd9ICR7dGFiLmFjdGl2ZSA/ICcoYWN0aXZlKScgOiAnJ31gO1xuICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIGhhbmRsZXJzXG4gICAgb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2xvc2UtbW9kYWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG92ZXJsYXkucmVtb3ZlKCkpO1xuICAgIG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNhbmNlbC1tb2RhbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gb3ZlcmxheS5yZW1vdmUoKSk7XG4gICAgb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGlmIChlLnRhcmdldCA9PT0gb3ZlcmxheSkgb3ZlcmxheS5yZW1vdmUoKTsgfSk7XG5cbiAgICAvLyBMYXVuY2ggaGFuZGxlclxuICAgIG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmxhdW5jaC1tb2RhbCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGFiU2VsZWN0ID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcjYWdlbnQtdGFiLXNlbGVjdCcpO1xuICAgICAgY29uc3QgdHlwZVNlbGVjdCA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2FnZW50LXR5cGUtc2VsZWN0Jyk7XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJyNhZ2VudC1pbnN0cnVjdGlvbnMnKTtcblxuICAgICAgbGV0IHRhYklkO1xuICAgICAgaWYgKHRhYlNlbGVjdC52YWx1ZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgY29uc3QgW2FjdGl2ZVRhYl0gPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7IGFjdGl2ZTogdHJ1ZSwgY3VycmVudFdpbmRvdzogdHJ1ZSB9KTtcbiAgICAgICAgdGFiSWQgPSBhY3RpdmVUYWI/LmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFiSWQgPSBwYXJzZUludCh0YWJTZWxlY3QudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYklkKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCdObyB0YWIgc2VsZWN0ZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhZ2VudFR5cGUgPSB0eXBlU2VsZWN0LnZhbHVlO1xuICAgICAgY29uc3QgYWdlbnRJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnMudmFsdWU/LnRyaW0oKSB8fCAnJztcbiAgICAgIG92ZXJsYXkucmVtb3ZlKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2Uoe1xuICAgICAgICAgIGFjdGlvbjogJ2xhdW5jaEFJV29ya2VyJyxcbiAgICAgICAgICB0YWJJZCxcbiAgICAgICAgICBtb2RlbDogYWdlbnRUeXBlLFxuICAgICAgICAgIGluc3RydWN0aW9uczogYWdlbnRJbnN0cnVjdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFnZW50SWQgPSByZXNwb25zZS5hZ2VudElkIHx8IGBhZ2VudC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfWA7XG4gICAgICAgICAgdGhpcy5hZ2VudHMuc2V0KGFnZW50SWQsIHtcbiAgICAgICAgICAgIGlkOiBhZ2VudElkLFxuICAgICAgICAgICAgbmFtZTogYWdlbnRUeXBlLFxuICAgICAgICAgICAgdGFiSWQsXG4gICAgICAgICAgICBzdGF0dXM6ICdydW5uaW5nJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFnZW50TGlzdCgpO1xuICAgICAgICAgIHRoaXMuc2hvd05vdGlmaWNhdGlvbihgQWdlbnQgbGF1bmNoZWQgb24gdGFiICR7dGFiSWR9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzcG9uc2U/LmVycm9yIHx8ICdGYWlsZWQgdG8gbGF1bmNoIGFnZW50Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc2hvd0Vycm9yKCdGYWlsZWQgdG8gbGF1bmNoIGFnZW50OiAnICsgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU2V0dGluZ3MgVGFiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGxvYWRTZXR0aW5ncygpIHtcbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoW1xuICAgICAgJ21jcFBvcnQnLFxuICAgICAgJ2NkcFBvcnQnLFxuICAgICAgJ3phcFBvcnRzJyxcbiAgICAgICdoYW56b19kZWZhdWx0X21vZGVsJyxcbiAgICAgICdoYW56b19yYWdfZW5kcG9pbnQnLFxuICAgICAgJ2hhbnpvX3JhZ19hcGlfa2V5JyxcbiAgICAgICdoYW56b19yYWdfa2InLFxuICAgICAgJ2hhbnpvX3JhZ190b3BfaycsXG4gICAgICAnaGFuem9fcmFnX2luY2x1ZGVfdGFiX2NvbnRleHQnLFxuICAgICAgJ2hhbnpvX3JhZ191c2VfemFwJyxcbiAgICAgICdoYW56b19jaGF0X3JhZ19lbmFibGVkJyxcbiAgICAgICdoYW56b19jaGF0X3RhYl9jb250ZXh0X2VuYWJsZWQnLFxuICAgIF0sIChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0IG1jcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXBvcnQtc2V0dGluZycpO1xuICAgICAgY29uc3QgY2RwUG9ydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk7XG4gICAgICBjb25zdCB6YXBQb3J0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpO1xuXG4gICAgICBpZiAobWNwUG9ydCkgbWNwUG9ydC52YWx1ZSA9IHJlc3VsdC5tY3BQb3J0IHx8IDMwMDE7XG4gICAgICBpZiAoY2RwUG9ydCkgY2RwUG9ydC52YWx1ZSA9IHJlc3VsdC5jZHBQb3J0IHx8IDkyMjM7XG4gICAgICBpZiAoemFwUG9ydHMpIHphcFBvcnRzLnZhbHVlID0gKHJlc3VsdC56YXBQb3J0cyB8fCBbOTk5OSw5OTk4LDk5OTcsOTk5Niw5OTk1XSkuam9pbignLCcpO1xuICAgICAgaWYgKHJlc3VsdC5oYW56b19kZWZhdWx0X21vZGVsICYmIHRoaXMuZWwuZGVmYXVsdE1vZGVsKSB7XG4gICAgICAgIHRoaXMuZWwuZGVmYXVsdE1vZGVsLnZhbHVlID0gcmVzdWx0LmhhbnpvX2RlZmF1bHRfbW9kZWw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVsLnJhZ0VuZHBvaW50KSB0aGlzLmVsLnJhZ0VuZHBvaW50LnZhbHVlID0gcmVzdWx0LmhhbnpvX3JhZ19lbmRwb2ludCB8fCAnJztcbiAgICAgIGlmICh0aGlzLmVsLnJhZ0FwaUtleSkgdGhpcy5lbC5yYWdBcGlLZXkudmFsdWUgPSByZXN1bHQuaGFuem9fcmFnX2FwaV9rZXkgfHwgJyc7XG4gICAgICBpZiAodGhpcy5lbC5yYWdLYikgdGhpcy5lbC5yYWdLYi52YWx1ZSA9IHJlc3VsdC5oYW56b19yYWdfa2IgfHwgJyc7XG4gICAgICBpZiAodGhpcy5lbC5yYWdUb3BLKSB0aGlzLmVsLnJhZ1RvcEsudmFsdWUgPSBTdHJpbmcocmVzdWx0LmhhbnpvX3JhZ190b3BfayB8fCA1KTtcbiAgICAgIGlmICh0aGlzLmVsLnJhZ0luY2x1ZGVUYWJDb250ZXh0KSB0aGlzLmVsLnJhZ0luY2x1ZGVUYWJDb250ZXh0LmNoZWNrZWQgPSByZXN1bHQuaGFuem9fcmFnX2luY2x1ZGVfdGFiX2NvbnRleHQgIT09IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuZWwucmFnVXNlWmFwKSB0aGlzLmVsLnJhZ1VzZVphcC5jaGVja2VkID0gcmVzdWx0LmhhbnpvX3JhZ191c2VfemFwICE9PSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmVsLnJhZ0VuYWJsZWQpIHRoaXMuZWwucmFnRW5hYmxlZC5jaGVja2VkID0gcmVzdWx0LmhhbnpvX2NoYXRfcmFnX2VuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQpIHRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQuY2hlY2tlZCA9IHJlc3VsdC5oYW56b19jaGF0X3RhYl9jb250ZXh0X2VuYWJsZWQgIT09IGZhbHNlO1xuICAgICAgdGhpcy5zZXRSYWdTdGF0dXModGhpcy5lbC5yYWdFbmFibGVkPy5jaGVja2VkID8gJ1JlYWR5JyA6ICdSQUcgZGlzYWJsZWQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcbiAgICBjb25zdCBtY3BQb3J0ID0gcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKT8udmFsdWUpIHx8IDMwMDE7XG4gICAgY29uc3QgY2RwUG9ydCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZHAtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCA5MjIzO1xuICAgIGNvbnN0IHphcFBvcnRzID0gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd6YXAtcG9ydHMtc2V0dGluZycpPy52YWx1ZSB8fCAnJylcbiAgICAgIC5zcGxpdCgnLCcpLm1hcChwID0+IHBhcnNlSW50KHAudHJpbSgpKSkuZmlsdGVyKHAgPT4gcCA+IDAgJiYgcCA8IDY1NTM2KTtcblxuICAgIGF3YWl0IGNocm9tZS5zdG9yYWdlLmxvY2FsLnNldCh7XG4gICAgICBtY3BQb3J0LFxuICAgICAgY2RwUG9ydCxcbiAgICAgIHphcFBvcnRzOiB6YXBQb3J0cy5sZW5ndGggPyB6YXBQb3J0cyA6IFs5OTk5LDk5OTgsOTk5Nyw5OTk2LDk5OTVdLFxuICAgICAgaGFuem9fZGVmYXVsdF9tb2RlbDogdGhpcy5lbC5kZWZhdWx0TW9kZWw/LnZhbHVlIHx8ICdncHQtNG8nLFxuICAgICAgJ3NhZmUtbW9kZSc6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYWZlLW1vZGUnKT8uY2hlY2tlZCxcbiAgICAgICdlbmFibGUtd2ViZ3B1JzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuYWJsZS13ZWJncHUnKT8uY2hlY2tlZCxcbiAgICAgIG1heEFnZW50czogcGFyc2VJbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21heC1hZ2VudHMnKT8udmFsdWUpIHx8IDMsXG4gICAgICBoYW56b19yYWdfZW5kcG9pbnQ6IHRoaXMuZWwucmFnRW5kcG9pbnQ/LnZhbHVlPy50cmltKCkgfHwgJycsXG4gICAgICBoYW56b19yYWdfYXBpX2tleTogdGhpcy5lbC5yYWdBcGlLZXk/LnZhbHVlPy50cmltKCkgfHwgJycsXG4gICAgICBoYW56b19yYWdfa2I6IHRoaXMuZWwucmFnS2I/LnZhbHVlPy50cmltKCkgfHwgJycsXG4gICAgICBoYW56b19yYWdfdG9wX2s6IE1hdGgubWF4KDEsIE1hdGgubWluKHBhcnNlSW50KHRoaXMuZWwucmFnVG9wSz8udmFsdWUgfHwgJzUnLCAxMCkgfHwgNSwgMjApKSxcbiAgICAgIGhhbnpvX3JhZ19pbmNsdWRlX3RhYl9jb250ZXh0OiAhIXRoaXMuZWwucmFnSW5jbHVkZVRhYkNvbnRleHQ/LmNoZWNrZWQsXG4gICAgICBoYW56b19yYWdfdXNlX3phcDogISF0aGlzLmVsLnJhZ1VzZVphcD8uY2hlY2tlZCxcbiAgICAgIGhhbnpvX2NoYXRfcmFnX2VuYWJsZWQ6ICEhdGhpcy5lbC5yYWdFbmFibGVkPy5jaGVja2VkLFxuICAgICAgaGFuem9fY2hhdF90YWJfY29udGV4dF9lbmFibGVkOiAhIXRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQ/LmNoZWNrZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNob3dOb3RpZmljYXRpb24oJ1NldHRpbmdzIHNhdmVkJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVXRpbGl0eVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBzdGFydE1vbml0b3JpbmcoKSB7XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5jb25uZWN0VG9NQ1AoKSwgMTAwMDApO1xuICAgIGNocm9tZS50YWJzLm9uVXBkYXRlZC5hZGRMaXN0ZW5lcigoKSA9PiB0aGlzLnJlZnJlc2hUYWJGaWxlc3lzdGVtKCkpO1xuICAgIGNocm9tZS50YWJzLm9uUmVtb3ZlZC5hZGRMaXN0ZW5lcigoKSA9PiB0aGlzLnJlZnJlc2hUYWJGaWxlc3lzdGVtKCkpO1xuICB9XG5cbiAgaGFuZGxlTWVzc2FnZShyZXF1ZXN0KSB7XG4gICAgc3dpdGNoIChyZXF1ZXN0LmFjdGlvbikge1xuICAgICAgY2FzZSAnYWdlbnRVcGRhdGUnOlxuICAgICAgICBpZiAocmVxdWVzdC5hZ2VudElkICYmIHRoaXMuYWdlbnRzLmhhcyhyZXF1ZXN0LmFnZW50SWQpKSB7XG4gICAgICAgICAgdGhpcy5hZ2VudHMuZ2V0KHJlcXVlc3QuYWdlbnRJZCkuc3RhdHVzID0gcmVxdWVzdC5zdGF0dXM7XG4gICAgICAgICAgdGhpcy51cGRhdGVBZ2VudExpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93Tm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsLmNsYXNzTmFtZSA9ICdub3RpZmljYXRpb24nO1xuICAgIGVsLnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IGVsLnJlbW92ZSgpLCAzMDAwKTtcbiAgfVxuXG4gIHNob3dFcnJvcihtZXNzYWdlKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbC5jbGFzc05hbWUgPSAnbm90aWZpY2F0aW9uIGVycm9yJztcbiAgICBlbC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBlbC5yZW1vdmUoKSwgNTAwMCk7XG4gIH1cbn1cblxuLy8gSW5pdGlhbGl6ZVxuY29uc3QgaGFuem9TaWRlYmFyID0gbmV3IEhhbnpvU2lkZWJhcigpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7O0FBRUEsTUFBTSxlQUFOLE1BQW1CO0FBQUEsSUFDakIsY0FBYztBQUNaLFdBQUssU0FBUyxvQkFBSSxJQUFJO0FBQ3RCLFdBQUssYUFBYTtBQUNsQixXQUFLLFdBQVcsQ0FBQztBQUNqQixXQUFLLFlBQVk7QUFDakIsV0FBSyxtQkFBbUI7QUFDeEIsV0FBSyxnQkFBZ0I7QUFDckIsV0FBSyxhQUFhO0FBRWxCLFdBQUssYUFBYTtBQUNsQixXQUFLLG9CQUFvQjtBQUN6QixXQUFLLFVBQVU7QUFBQSxJQUNqQjtBQUFBLElBRUEsZUFBZTtBQUNiLFdBQUssS0FBSztB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
|
|
779
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NpZGViYXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIEhhbnpvIEFJIEJyb3dzZXIgRXh0ZW5zaW9uIFNpZGViYXIgXHUyMDE0IENoYXQgKyBUb29scyArIFNldHRpbmdzXG5cbmNsYXNzIEhhbnpvU2lkZWJhciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWdlbnRzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY3VycmVudFRhYiA9ICdjaGF0JztcbiAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gICAgdGhpcy5zdHJlYW1pbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXIgPSBudWxsO1xuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmFnQ29udGV4dCA9IG51bGw7XG5cbiAgICB0aGlzLmluaXRpYWxpemVVSSgpO1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMuY2hlY2tBdXRoKCk7XG4gIH1cblxuICBpbml0aWFsaXplVUkoKSB7XG4gICAgdGhpcy5lbCA9IHtcbiAgICAgIC8vIEF1dGhcbiAgICAgIGF1dGhTZWN0aW9uOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1zZWN0aW9uJyksXG4gICAgICBhdXRoQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1idG4nKSxcbiAgICAgIHRhYkJhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1iYXInKSxcbiAgICAgIHVzZXJCYWRnZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXItYmFkZ2UnKSxcbiAgICAgIGhlYWRlckF2YXRhcjogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWRlci1hdmF0YXInKSxcblxuICAgICAgLy8gQ2hhdFxuICAgICAgdGFiQ2hhdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYi1jaGF0JyksXG4gICAgICBjaGF0TWVzc2FnZXM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LW1lc3NhZ2VzJyksXG4gICAgICBjaGF0SW5wdXQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWlucHV0JyksXG4gICAgICBzZW5kQnRuOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VuZC1idG4nKSxcbiAgICAgIG1vZGVsU2VsZWN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZWwtc2VsZWN0JyksXG4gICAgICByYWdFbmFibGVkOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLWVuYWJsZWQnKSxcbiAgICAgIHRhYkNvbnRleHRFbmFibGVkOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLWNvbnRleHQtZW5hYmxlZCcpLFxuICAgICAgcmFnU3RhdHVzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLXN0YXR1cycpLFxuXG4gICAgICAvLyBUb29sc1xuICAgICAgdGFiVG9vbHM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItdG9vbHMnKSxcbiAgICAgIG1jcFN0YXR1czogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1zdGF0dXMnKSxcbiAgICAgIG1jcFRvb2xzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWNwLXRvb2xzJyksXG4gICAgICBtY3BUb29sTGlzdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC10b29sLWxpc3QnKSxcbiAgICAgIGFnZW50Q291bnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZ2VudC1jb3VudCcpLFxuICAgICAgYWdlbnRMaXN0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWdlbnQtbGlzdCcpLFxuICAgICAgdGFiRnM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWItZnMnKSxcbiAgICAgIHJlZnJlc2hUYWJzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVmcmVzaC10YWJzJyksXG4gICAgICBncHVTdGF0dXM6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncHUtc3RhdHVzJyksXG4gICAgICBncHVNb2RlbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dwdS1tb2RlbCcpLFxuICAgICAgbGF1bmNoQWdlbnQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXVuY2gtYWdlbnQnKSxcblxuICAgICAgLy8gU2V0dGluZ3NcbiAgICAgIHRhYlNldHRpbmdzOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFiLXNldHRpbmdzJyksXG4gICAgICB1c2VyQXZhdGFyOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1hdmF0YXInKSxcbiAgICAgIHVzZXJOYW1lOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlci1uYW1lJyksXG4gICAgICB1c2VyRW1haWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyLWVtYWlsJyksXG4gICAgICBsb2dvdXRCdG46IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dvdXQtYnRuJyksXG4gICAgICBzYXZlU2V0dGluZ3M6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYXZlLXNldHRpbmdzJyksXG4gICAgICBkZWZhdWx0TW9kZWw6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZWZhdWx0LW1vZGVsJyksXG4gICAgICByYWdVc2VaYXA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctdXNlLXphcCcpLFxuICAgICAgcmFnSW5jbHVkZVRhYkNvbnRleHQ6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctaW5jbHVkZS10YWItY29udGV4dCcpLFxuICAgICAgcmFnVG9wSzogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhZy10b3AtaycpLFxuICAgICAgcmFnS2I6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWcta2InKSxcbiAgICAgIHJhZ0VuZHBvaW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFnLWVuZHBvaW50JyksXG4gICAgICByYWdBcGlLZXk6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWctYXBpLWtleScpLFxuICAgIH07XG4gIH1cblxuICBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIC8vIEF1dGhcbiAgICB0aGlzLmVsLmF1dGhCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5sb2dpbigpKTtcblxuICAgIC8vIFRhYnNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh0YWIgPT4ge1xuICAgICAgdGFiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5zd2l0Y2hUYWIodGFiLmRhdGFzZXQudGFiKSk7XG4gICAgfSk7XG5cbiAgICAvLyBDaGF0XG4gICAgdGhpcy5lbC5zZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5zZW5kTWVzc2FnZSgpKTtcbiAgICB0aGlzLmVsLmNoYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmVsLmNoYXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHRoaXMuYXV0b1Jlc2l6ZSgpKTtcbiAgICB0aGlzLmVsLnJhZ0VuYWJsZWQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKHRoaXMuZWwucmFnRW5hYmxlZC5jaGVja2VkID8gJ1JBRyBlbmFibGVkJyA6ICdSQUcgZGlzYWJsZWQnKTtcbiAgICB9KTtcbiAgICB0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZWwucmFnRW5hYmxlZD8uY2hlY2tlZCkgcmV0dXJuO1xuICAgICAgdGhpcy5zZXRSYWdTdGF0dXModGhpcy5lbC50YWJDb250ZXh0RW5hYmxlZC5jaGVja2VkID8gJ1RhYiBjb250ZXh0IG9uJyA6ICdUYWIgY29udGV4dCBvZmYnKTtcbiAgICB9KTtcblxuICAgIC8vIFRvb2xzXG4gICAgdGhpcy5lbC5yZWZyZXNoVGFicz8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnJlZnJlc2hUYWJGaWxlc3lzdGVtKCkpO1xuICAgIHRoaXMuZWwubGF1bmNoQWdlbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5zaG93QWdlbnRMYXVuY2hlcigpKTtcblxuICAgIC8vIFNldHRpbmdzXG4gICAgdGhpcy5lbC5sb2dvdXRCdG4/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5sb2dvdXQoKSk7XG4gICAgdGhpcy5lbC5zYXZlU2V0dGluZ3M/LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy5zYXZlU2V0dGluZ3MoKSk7XG5cbiAgICAvLyBCYWNrZ3JvdW5kIG1lc3NhZ2VzXG4gICAgY2hyb21lLnJ1bnRpbWUub25NZXNzYWdlLmFkZExpc3RlbmVyKChyZXF1ZXN0LCBzZW5kZXIsIHNlbmRSZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVNZXNzYWdlKHJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQXV0aFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBjaGVja0F1dGgoKSB7XG4gICAgLy8gQWx3YXlzIHNob3cgdGFicyBhbmQgaW5pdGlhbGl6ZSB0b29scyBcdTIwMTQgYXV0aCBvbmx5IGdhdGVzIGNoYXRcbiAgICB0aGlzLmVsLnRhYkJhci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICB0aGlzLmVsLmF1dGhTZWN0aW9uLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBmZWF0dXJlcyB0aGF0IHdvcmsgd2l0aG91dCBhdXRoXG4gICAgdGhpcy5jb25uZWN0VG9NQ1AoKTtcbiAgICB0aGlzLnJlZnJlc2hUYWJGaWxlc3lzdGVtKCk7XG4gICAgdGhpcy5jaGVja1dlYkdQVSgpO1xuICAgIHRoaXMubG9hZFNldHRpbmdzKCk7XG4gICAgdGhpcy5zdGFydE1vbml0b3JpbmcoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXV0aC5zdGF0dXMnIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzICYmIHJlc3BvbnNlLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLnVzZXIpO1xuICAgICAgICB0aGlzLnN3aXRjaFRhYignY2hhdCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Q2hhdExvZ2luUHJvbXB0KCk7XG4gICAgICAgIHRoaXMuc3dpdGNoVGFiKCdjaGF0Jyk7IC8vIFNob3cgY2hhdCB0YWIgd2l0aCBsb2dpbiBwcm9tcHRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQXV0aCBjaGVjayBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5zaG93Q2hhdExvZ2luUHJvbXB0KCk7XG4gICAgICB0aGlzLnN3aXRjaFRhYignY2hhdCcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvZ2luKCkge1xuICAgIHRoaXMuZWwuYXV0aEJ0bi5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lbC5hdXRoQnRuLnRleHRDb250ZW50ID0gJ1NpZ25pbmcgaW4uLi4nO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmxvZ2luJyB9KTtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UudXNlcik7XG4gICAgICAgIHRoaXMuaGlkZUNoYXRMb2dpblByb21wdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzcG9uc2U/LmVycm9yIHx8ICdTaWduIGluIGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcignU2lnbiBpbiBmYWlsZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5lbC5hdXRoQnRuLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmVsLmF1dGhCdG4udGV4dENvbnRlbnQgPSAnU2lnbiBpbic7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9nb3V0KCkge1xuICAgIGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnYXV0aC5sb2dvdXQnIH0pO1xuICAgIHRoaXMuZWwudXNlckJhZGdlLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIHRoaXMuZWwudXNlck5hbWUudGV4dENvbnRlbnQgPSAnJztcbiAgICB0aGlzLmVsLnVzZXJFbWFpbC50ZXh0Q29udGVudCA9ICcnO1xuICAgIHRoaXMuc2hvd0NoYXRMb2dpblByb21wdCgpO1xuICAgIHRoaXMuc3dpdGNoVGFiKCd0b29scycpO1xuICB9XG5cbiAgc2V0VXNlcih1c2VyKSB7XG4gICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcbiAgICBpZiAodXNlcikge1xuICAgICAgY29uc3QgYXZhdGFyID0gdXNlci5waWN0dXJlIHx8IHVzZXIuYXZhdGFyIHx8ICcnO1xuICAgICAgaWYgKGF2YXRhcikge1xuICAgICAgICB0aGlzLmVsLmhlYWRlckF2YXRhci5zcmMgPSBhdmF0YXI7XG4gICAgICAgIHRoaXMuZWwudXNlckJhZGdlLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgICB0aGlzLmVsLnVzZXJBdmF0YXIuc3JjID0gYXZhdGFyO1xuICAgICAgfVxuICAgICAgdGhpcy5lbC51c2VyTmFtZS50ZXh0Q29udGVudCA9IHVzZXIubmFtZSB8fCB1c2VyLmRpc3BsYXlOYW1lIHx8ICdVc2VyJztcbiAgICAgIHRoaXMuZWwudXNlckVtYWlsLnRleHRDb250ZW50ID0gdXNlci5lbWFpbCB8fCAnJztcbiAgICB9XG4gICAgdGhpcy5sb2FkTW9kZWxzKCk7XG4gICAgdGhpcy5sb2FkQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICBzaG93Q2hhdExvZ2luUHJvbXB0KCkge1xuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgIC8vIFNob3cgbG9naW4gcHJvbXB0IGluIGNoYXQgYXJlYSBpbnN0ZWFkIG9mIGJsb2NraW5nIGVudGlyZSBzaWRlYmFyXG4gICAgY29uc3QgY2hhdExvZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXQtbG9naW4tcHJvbXB0Jyk7XG4gICAgaWYgKGNoYXRMb2dpbikgY2hhdExvZ2luLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgIGNvbnN0IGNoYXRDb21wb3NlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWNvbXBvc2VyJyk7XG4gICAgaWYgKGNoYXRDb21wb3NlcikgY2hhdENvbXBvc2VyLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICB9XG5cbiAgaGlkZUNoYXRMb2dpblByb21wdCgpIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IGNoYXRMb2dpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0LWxvZ2luLXByb21wdCcpO1xuICAgIGlmIChjaGF0TG9naW4pIGNoYXRMb2dpbi5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICBjb25zdCBjaGF0Q29tcG9zZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhdC1jb21wb3NlcicpO1xuICAgIGlmIChjaGF0Q29tcG9zZXIpIGNoYXRDb21wb3Nlci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUYWIgTmF2aWdhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBzd2l0Y2hUYWIobmFtZSkge1xuICAgIHRoaXMuY3VycmVudFRhYiA9IG5hbWU7XG5cbiAgICAvLyBVcGRhdGUgdGFiIGJ1dHRvbnNcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFiJykuZm9yRWFjaCh0ID0+IHtcbiAgICAgIHQuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgdC5kYXRhc2V0LnRhYiA9PT0gbmFtZSk7XG4gICAgfSk7XG5cbiAgICAvLyBTaG93L2hpZGUgY29udGVudFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWItY29udGVudCcpLmZvckVhY2godCA9PiB0LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpKTtcbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGFiLSR7bmFtZX1gKTtcbiAgICBpZiAodGFyZ2V0KSB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ2hhdFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBsb2FkTW9kZWxzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnY2hhdC5saXN0TW9kZWxzJyB9KTtcbiAgICAgIGlmIChyZXNwb25zZT8uc3VjY2VzcyAmJiByZXNwb25zZS5tb2RlbHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzZWxlY3QgPSB0aGlzLmVsLm1vZGVsU2VsZWN0O1xuICAgICAgICBzZWxlY3QuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgcmVzcG9uc2UubW9kZWxzKSB7XG4gICAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgb3B0LnZhbHVlID0gbW9kZWwuaWQ7XG4gICAgICAgICAgb3B0LnRleHRDb250ZW50ID0gbW9kZWwubmFtZSB8fCBtb2RlbC5pZDtcbiAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHNvIHBvcHVsYXRlIHNldHRpbmdzIGRlZmF1bHQgbW9kZWxcbiAgICAgICAgdGhpcy5lbC5kZWZhdWx0TW9kZWwuaW5uZXJIVE1MID0gc2VsZWN0LmlubmVySFRNTDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEtlZXAgZGVmYXVsdCBvcHRpb25zXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMuZWwuY2hhdElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIXRleHQgfHwgdGhpcy5zdHJlYW1pbmcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCkge1xuICAgICAgdGhpcy5zaG93RXJyb3IoJ1BsZWFzZSBzaWduIGluIHRvIHVzZSBjaGF0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRva2VuXG4gICAgY29uc3QgdG9rZW5SZXNwID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdhdXRoLmdldFRva2VuJyB9KTtcbiAgICBpZiAoIXRva2VuUmVzcD8uc3VjY2VzcyB8fCAhdG9rZW5SZXNwLnRva2VuKSB7XG4gICAgICB0aGlzLnNob3dFcnJvcignUGxlYXNlIHNpZ24gaW4gYWdhaW4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZSA9IHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiB0ZXh0IH07XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmVsLm1vZGVsU2VsZWN0LnZhbHVlO1xuICAgIGxldCByZXF1ZXN0TWVzc2FnZXMgPSBbLi4udGhpcy5tZXNzYWdlcywgdXNlck1lc3NhZ2VdO1xuXG4gICAgdGhpcy5yYWdDb250ZXh0ID0gbnVsbDtcbiAgICBpZiAodGhpcy5lbC5yYWdFbmFibGVkPy5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNldFJhZ1N0YXR1cygnUmV0cmlldmluZyBjb250ZXh0Li4uJyk7XG4gICAgICBjb25zdCByYWdSZXNwID0gYXdhaXQgdGhpcy5yZXF1ZXN0UmFnQ29udGV4dCh0ZXh0KTtcbiAgICAgIGlmIChyYWdSZXNwPy5zdWNjZXNzICYmIEFycmF5LmlzQXJyYXkocmFnUmVzcC5zbmlwcGV0cykgJiYgcmFnUmVzcC5zbmlwcGV0cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5yYWdDb250ZXh0ID0gcmFnUmVzcDtcbiAgICAgICAgcmVxdWVzdE1lc3NhZ2VzID0gW1xuICAgICAgICAgIHsgcm9sZTogJ3N5c3RlbScsIGNvbnRlbnQ6IHRoaXMuYnVpbGRSYWdTeXN0ZW1Qcm9tcHQocmFnUmVzcCkgfSxcbiAgICAgICAgICAuLi5yZXF1ZXN0TWVzc2FnZXMsXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKGBSQUc6ICR7cmFnUmVzcC5zbmlwcGV0cy5sZW5ndGh9IHNuaXBwZXQocykgZnJvbSAke3JhZ1Jlc3Auc291cmNlIHx8ICdjb250ZXh0J31gKTtcbiAgICAgIH0gZWxzZSBpZiAocmFnUmVzcD8uZXJyb3IpIHtcbiAgICAgICAgdGhpcy5zZXRSYWdTdGF0dXMoYFJBRyB1bmF2YWlsYWJsZSAoJHtyYWdSZXNwLmVycm9yfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKCdObyBjb250ZXh0IGZvdW5kJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKCdSQUcgZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdXNlciBtZXNzYWdlIHRvIHRyYW5zY3JpcHRcbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2godXNlck1lc3NhZ2UpO1xuICAgIHRoaXMuYXBwZW5kTWVzc2FnZSgndXNlcicsIHRleHQpO1xuXG4gICAgLy8gQ2xlYXIgaW5wdXRcbiAgICB0aGlzLmVsLmNoYXRJbnB1dC52YWx1ZSA9ICcnO1xuICAgIHRoaXMuYXV0b1Jlc2l6ZSgpO1xuXG4gICAgLy8gU2hvdyB0eXBpbmdcbiAgICB0aGlzLnN0cmVhbWluZyA9IHRydWU7XG4gICAgdGhpcy5lbC5zZW5kQnRuLmRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCB0eXBpbmdFbCA9IHRoaXMuc2hvd1R5cGluZygpO1xuXG4gICAgLy8gQ3JlYXRlIGFzc2lzdGFudCBtZXNzYWdlIGVsZW1lbnRcbiAgICBjb25zdCBhc3Npc3RhbnRFbCA9IHRoaXMuYXBwZW5kTWVzc2FnZSgnYXNzaXN0YW50JywgJycpO1xuICAgIGxldCBmdWxsQ29udGVudCA9ICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0cmVhbSB2aWEgZGlyZWN0IGZldGNoIChzaWRlYmFyIGhhcyBhY2Nlc3MgdmlhIENTUClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLmhhbnpvLmFpL3YxL2NoYXQvY29tcGxldGlvbnMnLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlblJlc3AudG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIG1lc3NhZ2VzOiByZXF1ZXN0TWVzc2FnZXMsXG4gICAgICAgICAgc3RyZWFtOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgc2lnbmFsOiAodGhpcy5zdHJlYW1Db250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpKS5zaWduYWwsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFQSSBlcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgdHlwaW5nRWwucmVtb3ZlKCk7XG4gICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgbGV0IGJ1ZmZlciA9ICcnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgICBpZiAoZG9uZSkgYnJlYWs7XG5cbiAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcbicpO1xuICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJztcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICAgICAgaWYgKCF0cmltbWVkIHx8IHRyaW1tZWQuc3RhcnRzV2l0aCgnOicpKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdkYXRhOiAnKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRyaW1tZWQuc2xpY2UoNik7XG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gJ1tET05FXScpIGJyZWFrO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBwYXJzZWQuY2hvaWNlcz8uWzBdPy5kZWx0YT8uY29udGVudDtcbiAgICAgICAgICAgICAgaWYgKGRlbHRhKSB7XG4gICAgICAgICAgICAgICAgZnVsbENvbnRlbnQgKz0gZGVsdGE7XG4gICAgICAgICAgICAgICAgYXNzaXN0YW50RWwuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJNYXJrZG93bihmdWxsQ29udGVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJhZ0NvbnRleHQ/LnNuaXBwZXRzPy5sZW5ndGgpIHtcbiAgICAgICAgZnVsbENvbnRlbnQgKz0gdGhpcy5idWlsZFJhZ0NpdGF0aW9uQmxvY2sodGhpcy5yYWdDb250ZXh0KTtcbiAgICAgICAgYXNzaXN0YW50RWwuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJNYXJrZG93bihmdWxsQ29udGVudCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7IHJvbGU6ICdhc3Npc3RhbnQnLCBjb250ZW50OiBmdWxsQ29udGVudCB9KTtcbiAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0eXBpbmdFbC5yZW1vdmUoKTtcbiAgICAgIGlmIChlcnJvcj8ubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGFzc2lzdGFudEVsLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmFwcGVuZEVycm9yKGVycm9yPy5tZXNzYWdlIHx8ICdDaGF0IGZhaWxlZCcpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnN0cmVhbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyID0gbnVsbDtcbiAgICAgIHRoaXMuZWwuc2VuZEJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFjdGl2ZVRhYkNvbnRleHQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFthY3RpdmVUYWJdID0gYXdhaXQgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSk7XG4gICAgICBpZiAoIWFjdGl2ZVRhYikgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IGFjdGl2ZVRhYi51cmwgfHwgJycsXG4gICAgICAgIHRpdGxlOiBhY3RpdmVUYWIudGl0bGUgfHwgJycsXG4gICAgICB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdFJhZ0NvbnRleHQocXVlcnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFnZUNvbnRleHQgPSB0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkPy5jaGVja2VkID8gYXdhaXQgdGhpcy5nZXRBY3RpdmVUYWJDb250ZXh0KCkgOiBudWxsO1xuICAgICAgY29uc3QgdG9wSyA9IE1hdGgubWF4KDEsIE1hdGgubWluKHBhcnNlSW50KHRoaXMuZWwucmFnVG9wSz8udmFsdWUgfHwgJzUnLCAxMCkgfHwgNSwgMjApKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgYWN0aW9uOiAncmFnLnF1ZXJ5JyxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHRvcEssXG4gICAgICAgIGluY2x1ZGVUYWJDb250ZXh0OiAhIXRoaXMuZWwudGFiQ29udGV4dEVuYWJsZWQ/LmNoZWNrZWQsXG4gICAgICAgIHVzZVphcE1lbW9yeTogISF0aGlzLmVsLnJhZ1VzZVphcD8uY2hlY2tlZCxcbiAgICAgICAga25vd2xlZGdlQmFzZTogdGhpcy5lbC5yYWdLYj8udmFsdWUgfHwgJycsXG4gICAgICAgIGVuZHBvaW50OiB0aGlzLmVsLnJhZ0VuZHBvaW50Py52YWx1ZSB8fCAnJyxcbiAgICAgICAgYXBpS2V5OiB0aGlzLmVsLnJhZ0FwaUtleT8udmFsdWUgfHwgJycsXG4gICAgICAgIHBhZ2VDb250ZXh0OiBwYWdlQ29udGV4dCB8fCB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHF1ZXJ5IFJBRycgfTtcbiAgICB9XG4gIH1cblxuICBidWlsZFJhZ1N5c3RlbVByb21wdChyYWdSZXNwb25zZSkge1xuICAgIGNvbnN0IHNuaXBwZXRzID0gKHJhZ1Jlc3BvbnNlPy5zbmlwcGV0cyB8fCBbXSkuc2xpY2UoMCwgOCk7XG4gICAgY29uc3QgbGluZXMgPSBzbmlwcGV0cy5tYXAoKHNuaXBwZXQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB0aXRsZSA9IHNuaXBwZXQudGl0bGUgfHwgc25pcHBldC5zb3VyY2UgfHwgYFNuaXBwZXQgJHtpbmRleCArIDF9YDtcbiAgICAgIGNvbnN0IHNjb3JlID0gdHlwZW9mIHNuaXBwZXQuc2NvcmUgPT09ICdudW1iZXInID8gYCAoc2NvcmUgJHtzbmlwcGV0LnNjb3JlLnRvRml4ZWQoMyl9KWAgOiAnJztcbiAgICAgIGNvbnN0IHNvdXJjZUxpbmUgPSBzbmlwcGV0LnVybCA/IGAke3RpdGxlfSR7c2NvcmV9IFx1MjAxNCAke3NuaXBwZXQudXJsfWAgOiBgJHt0aXRsZX0ke3Njb3JlfWA7XG4gICAgICByZXR1cm4gYFske2luZGV4ICsgMX1dICR7c291cmNlTGluZX1cXG4ke3NuaXBwZXQuY29udGVudH1gO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICdZb3UgYXJlIGFzc2lzdGluZyBpbnNpZGUgSGFuem8gQnJvd3NlciBFeHRlbnNpb24uJyxcbiAgICAgICdVc2UgdGhlIHJldHJpZXZlZCBjb250ZXh0IGJlbG93IHdoZW4gcmVsZXZhbnQsIGFuZCBzdGF0ZSB1bmNlcnRhaW50eSBpZiBjb250ZXh0IGlzIGluc3VmZmljaWVudC4nLFxuICAgICAgJ1JldHJpZXZlZCBDb250ZXh0OicsXG4gICAgICAuLi5saW5lcyxcbiAgICBdLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgYnVpbGRSYWdDaXRhdGlvbkJsb2NrKHJhZ1Jlc3BvbnNlKSB7XG4gICAgY29uc3Qgc25pcHBldHMgPSAocmFnUmVzcG9uc2U/LnNuaXBwZXRzIHx8IFtdKS5zbGljZSgwLCA1KTtcbiAgICBpZiAoIXNuaXBwZXRzLmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gICAgY29uc3Qgcm93cyA9IHNuaXBwZXRzLm1hcCgoc25pcHBldCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gc25pcHBldC50aXRsZSB8fCBzbmlwcGV0LnNvdXJjZSB8fCBgU25pcHBldCAke2luZGV4ICsgMX1gO1xuICAgICAgaWYgKHNuaXBwZXQudXJsKSB7XG4gICAgICAgIHJldHVybiBgLSAke3RpdGxlfTogJHtzbmlwcGV0LnVybH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAtICR7dGl0bGV9YDtcbiAgICB9KTtcblxuICAgIHJldHVybiBgXFxuXFxuLS0tXFxuQ29udGV4dCBTb3VyY2VzOlxcbiR7cm93cy5qb2luKCdcXG4nKX1gO1xuICB9XG5cbiAgc2V0UmFnU3RhdHVzKHRleHQpIHtcbiAgICBpZiAoIXRoaXMuZWwucmFnU3RhdHVzKSByZXR1cm47XG4gICAgdGhpcy5lbC5yYWdTdGF0dXMudGV4dENvbnRlbnQgPSB0ZXh0IHx8ICdSZWFkeSc7XG4gIH1cblxuICBhcHBlbmRNZXNzYWdlKHJvbGUsIGNvbnRlbnQpIHtcbiAgICAvLyBSZW1vdmUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc3Qgd2VsY29tZSA9IHRoaXMuZWwuY2hhdE1lc3NhZ2VzLnF1ZXJ5U2VsZWN0b3IoJy5jaGF0LXdlbGNvbWUnKTtcbiAgICBpZiAod2VsY29tZSkgd2VsY29tZS5yZW1vdmUoKTtcblxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSBgbXNnIG1zZy0ke3JvbGV9YDtcbiAgICBkaXYuaW5uZXJIVE1MID0gcm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyB0aGlzLnJlbmRlck1hcmtkb3duKGNvbnRlbnQpIDogdGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQpO1xuICAgIHRoaXMuZWwuY2hhdE1lc3NhZ2VzLmFwcGVuZENoaWxkKGRpdik7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhcHBlbmRFcnJvcihtZXNzYWdlKSB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmNsYXNzTmFtZSA9ICdtc2ctZXJyb3InO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgdGhpcy5lbC5jaGF0TWVzc2FnZXMuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gIH1cblxuICBzaG93VHlwaW5nKCkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5jbGFzc05hbWUgPSAndHlwaW5nLWluZGljYXRvcic7XG4gICAgZGl2LmlubmVySFRNTCA9ICc8c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj4nO1xuICAgIHRoaXMuZWwuY2hhdE1lc3NhZ2VzLmFwcGVuZENoaWxkKGRpdik7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICB0aGlzLmVsLmNoYXRNZXNzYWdlcy5zY3JvbGxUb3AgPSB0aGlzLmVsLmNoYXRNZXNzYWdlcy5zY3JvbGxIZWlnaHQ7XG4gIH1cblxuICBhdXRvUmVzaXplKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5jaGF0SW5wdXQ7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgMTIwKSArICdweCc7XG4gIH1cblxuICAvLyBNaW5pbWFsIG1hcmtkb3duOiBjb2RlIGJsb2NrcywgaW5saW5lIGNvZGUsIGJvbGQsIGl0YWxpYywgbGluZSBicmVha3NcbiAgcmVuZGVyTWFya2Rvd24odGV4dCkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xuICAgIGxldCBodG1sID0gdGhpcy5lc2NhcGVIdG1sKHRleHQpO1xuXG4gICAgLy8gQ29kZSBibG9ja3M6IGBgYGxhbmdcXG4uLi5cXG5gYGBcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gYGAoXFx3KilcXG4oW1xcc1xcU10qPylgYGAvZywgKF8sIGxhbmcsIGNvZGUpID0+IHtcbiAgICAgIHJldHVybiBgPHByZT48Y29kZT4ke2NvZGUudHJpbSgpfTwvY29kZT48L3ByZT5gO1xuICAgIH0pO1xuXG4gICAgLy8gSW5saW5lIGNvZGU6IGAuLi5gXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYChbXmBdKylgL2csICc8Y29kZT4kMTwvY29kZT4nKTtcblxuICAgIC8vIEJvbGQ6ICoqLi4uKipcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXCpcXCooW14qXSspXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XG5cbiAgICAvLyBJdGFsaWM6ICouLi4qXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFwqKFteKl0rKVxcKi9nLCAnPGVtPiQxPC9lbT4nKTtcblxuICAgIC8vIExpbmUgYnJlYWtzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG5cbiAgICByZXR1cm4gaHRtbDtcbiAgfVxuXG4gIGVzY2FwZUh0bWwodGV4dCkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICBhc3luYyBsb2FkQ29udmVyc2F0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFsnaGFuem9fY2hhdF9tZXNzYWdlcyddLCAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuaGFuem9fY2hhdF9tZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlcyA9IHJlc3VsdC5oYW56b19jaGF0X21lc3NhZ2VzO1xuICAgICAgICAgIC8vIFJlbmRlciBzdG9yZWQgbWVzc2FnZXNcbiAgICAgICAgICBjb25zdCB3ZWxjb21lID0gdGhpcy5lbC5jaGF0TWVzc2FnZXMucXVlcnlTZWxlY3RvcignLmNoYXQtd2VsY29tZScpO1xuICAgICAgICAgIGlmICh3ZWxjb21lKSB3ZWxjb21lLnJlbW92ZSgpO1xuICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHRoaXMubWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kTWVzc2FnZShtc2cucm9sZSwgbXNnLmNvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVDb252ZXJzYXRpb24oKSB7XG4gICAgLy8gS2VlcCBsYXN0IDUwIG1lc3NhZ2VzXG4gICAgY29uc3QgdG9TdG9yZSA9IHRoaXMubWVzc2FnZXMuc2xpY2UoLTUwKTtcbiAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoeyBoYW56b19jaGF0X21lc3NhZ2VzOiB0b1N0b3JlIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRvb2xzIFRhYlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhc3luYyBjb25uZWN0VG9NQ1AoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHphcFJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICd6YXAuc3RhdHVzJyB9KTtcbiAgICAgIGlmICh6YXBSZXNwb25zZT8uc3VjY2Vzcykge1xuICAgICAgICBjb25zdCB6YXAgPSB6YXBSZXNwb25zZS56YXA7XG4gICAgICAgIGNvbnN0IHRvb2xDb3VudCA9IHphcC5tY3BzPy5yZWR1Y2UoKHN1bSwgbSkgPT4gc3VtICsgKG0udG9vbHM/Lmxlbmd0aCB8fCAwKSwgMCkgfHwgMDtcbiAgICAgICAgdGhpcy51cGRhdGVNQ1BTdGF0dXMoemFwLmNvbm5lY3RlZCwgdG9vbENvdW50LCB6YXAubWNwcz8ubGVuZ3RoIHx8IDApO1xuICAgICAgICBpZiAoemFwLmNvbm5lY3RlZCkge1xuICAgICAgICAgIGNvbnN0IHRvb2xzUmVzcCA9IGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHsgYWN0aW9uOiAnemFwLmxpc3RUb29scycgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNQ1BUb29sTGlzdCh0b29sc1Jlc3A/LnN1Y2Nlc3MgPyB0b29sc1Jlc3AudG9vbHMgOiBbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVNQ1BUb29sTGlzdChbXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlTUNQU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNQ1BUb29sTGlzdChbXSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnVwZGF0ZU1DUFN0YXR1cyhmYWxzZSk7XG4gICAgICB0aGlzLnVwZGF0ZU1DUFRvb2xMaXN0KFtdKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVNQ1BTdGF0dXMoY29ubmVjdGVkLCB0b29sQ291bnQgPSAwLCBtY3BDb3VudCA9IDApIHtcbiAgICB0aGlzLmVsLm1jcFN0YXR1cy5pbm5lckhUTUwgPSBjb25uZWN0ZWQgPyBgXG4gICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1pbmRpY2F0b3IgY29ubmVjdGVkXCI+PC9zcGFuPlxuICAgICAgJHttY3BDb3VudCA+IDAgPyBgWkFQOiAke21jcENvdW50fSBNQ1AocylgIDogJ0Nvbm5lY3RlZCd9XG4gICAgYCA6IGBcbiAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWluZGljYXRvciBkaXNjb25uZWN0ZWRcIj48L3NwYW4+XG4gICAgICBEaXNjb25uZWN0ZWRcbiAgICBgO1xuICAgIHRoaXMuZWwubWNwVG9vbHMudGV4dENvbnRlbnQgPSB0b29sQ291bnQ7XG4gIH1cblxuICB1cGRhdGVNQ1BUb29sTGlzdCh0b29scykge1xuICAgIGlmICghdGhpcy5lbC5tY3BUb29sTGlzdCkgcmV0dXJuO1xuICAgIGlmICghdG9vbHMgfHwgIXRvb2xzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbC5tY3BUb29sTGlzdC50ZXh0Q29udGVudCA9ICdObyB0b29scyBkaXNjb3ZlcmVkIHlldC4nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KHRvb2xzLm1hcCgodG9vbCkgPT4gdG9vbC5uYW1lKSkpLnNvcnQoKTtcbiAgICBjb25zdCBwcmV2aWV3ID0gbmFtZXMuc2xpY2UoMCwgMjApO1xuICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWVzLmxlbmd0aCA+IHByZXZpZXcubGVuZ3RoID8gYFxcbi4uLiArJHtuYW1lcy5sZW5ndGggLSBwcmV2aWV3Lmxlbmd0aH0gbW9yZWAgOiAnJztcbiAgICB0aGlzLmVsLm1jcFRvb2xMaXN0LnRleHRDb250ZW50ID0gYCR7cHJldmlldy5qb2luKCdcXG4nKX0ke3N1ZmZpeH1gO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFRhYkZpbGVzeXN0ZW0oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhYnMgPSBhd2FpdCBjaHJvbWUudGFicy5xdWVyeSh7fSk7XG4gICAgICB0aGlzLmVsLnRhYkZzLmlubmVySFRNTCA9IHRhYnMubWFwKCh0YWIsIGkpID0+IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1pdGVtICR7dGFiLmFjdGl2ZSA/ICdhY3RpdmUnIDogJyd9XCIgZGF0YS10YWItaWQ9XCIke3RhYi5pZH1cIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTIgMnYxMmgxMlYySDJ6bTEgMWgxMHYxMEgzVjN6XCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxzcGFuIHRpdGxlPVwiJHt0aGlzLmVzY2FwZUh0bWwodGFiLnVybCB8fCAnJyl9XCI+L3RhYnMvJHtpfS8ke3RoaXMuc2FuaXRpemVQYXRoKHRhYi50aXRsZSB8fCAndW50aXRsZWQnKX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYCkuam9pbignJyk7XG5cbiAgICAgIHRoaXMuZWwudGFiRnMucXVlcnlTZWxlY3RvckFsbCgnLnRhYi1pdGVtJykuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICBjaHJvbWUudGFicy51cGRhdGUocGFyc2VJbnQoaXRlbS5kYXRhc2V0LnRhYklkKSwgeyBhY3RpdmU6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgc2FuaXRpemVQYXRoKHRpdGxlKSB7XG4gICAgcmV0dXJuIHRpdGxlLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICdfJykudG9Mb3dlckNhc2UoKS5zdWJzdHJpbmcoMCwgMzApO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tXZWJHUFUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2hyb21lLnJ1bnRpbWUuc2VuZE1lc3NhZ2UoeyBhY3Rpb246ICdjaGVja1dlYkdQVScgfSk7XG4gICAgICBpZiAocmVzcG9uc2U/LmF2YWlsYWJsZSkge1xuICAgICAgICB0aGlzLmVsLmdwdVN0YXR1cy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtaW5kaWNhdG9yIGNvbm5lY3RlZFwiPjwvc3Bhbj5cbiAgICAgICAgICBBdmFpbGFibGVcbiAgICAgICAgYDtcbiAgICAgICAgdGhpcy5lbC5ncHVNb2RlbC50ZXh0Q29udGVudCA9IHJlc3BvbnNlLmFkYXB0ZXIgfHwgJ1Vua25vd24nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbC5ncHVTdGF0dXMuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWluZGljYXRvciBkaXNjb25uZWN0ZWRcIj48L3NwYW4+XG4gICAgICAgICAgTm90IEF2YWlsYWJsZVxuICAgICAgICBgO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHVwZGF0ZUFnZW50TGlzdCgpIHtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHRoaXMuYWdlbnRzLnZhbHVlcygpKTtcbiAgICB0aGlzLmVsLmFnZW50Q291bnQudGV4dENvbnRlbnQgPSBhcnIubGVuZ3RoO1xuICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmVsLmFnZW50TGlzdC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+Tm8gYWN0aXZlIGFnZW50czwvZGl2Pic7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZWwuYWdlbnRMaXN0LmlubmVySFRNTCA9IGFyci5tYXAoYSA9PiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiYWdlbnQtaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbnQtaWNvblwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNnY2bDQgMlwiIHN0cm9rZS13aWR0aD1cIjJcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbnQtaW5mb1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZ2VudC1uYW1lXCI+JHt0aGlzLmVzY2FwZUh0bWwoYS5uYW1lKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbnQtc3RhdHVzXCI+JHthLnN0YXR1c30gXHUyMDIyIFRhYiAke2EudGFiSWR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbnQtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ0biBzbWFsbFwiIGRhdGEtc3RvcD1cIiR7YS5pZH1cIiB0aXRsZT1cIlN0b3BcIj5cbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiBzdHJva2Utd2lkdGg9XCIyXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYCkuam9pbignJyk7XG5cbiAgICB0aGlzLmVsLmFnZW50TGlzdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zdG9wXScpLmZvckVhY2goYnRuID0+IHtcbiAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBidG4uZGF0YXNldC5zdG9wO1xuICAgICAgICBjaHJvbWUucnVudGltZS5zZW5kTWVzc2FnZSh7IGFjdGlvbjogJ3N0b3BBZ2VudCcsIGFnZW50SWQ6IGlkIH0pO1xuICAgICAgICB0aGlzLmFnZW50cy5kZWxldGUoaWQpO1xuICAgICAgICB0aGlzLnVwZGF0ZUFnZW50TGlzdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93QWdlbnRMYXVuY2hlcigpIHtcbiAgICAvLyBDcmVhdGUgYWdlbnQgbGF1bmNoZXIgbW9kYWwgb3ZlcmxheVxuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBvdmVybGF5LmNsYXNzTmFtZSA9ICdtb2RhbC1vdmVybGF5JztcbiAgICBvdmVybGF5LmlubmVySFRNTCA9IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICA8aDM+TGF1bmNoIEFnZW50PC9oMz5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaWNvbi1idG4gY2xvc2UtbW9kYWxcIj4mdGltZXM7PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNldHRpbmctaXRlbVwiPlxuICAgICAgICAgICAgPHNwYW4+VGFyZ2V0IFRhYjwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJhZ2VudC10YWItc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhY3RpdmVcIj5BY3RpdmUgVGFiPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNldHRpbmctaXRlbVwiPlxuICAgICAgICAgICAgPHNwYW4+QWdlbnQgVHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJhZ2VudC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYnJvd3Nlci1jb250cm9sXCI+QnJvd3NlciBBdXRvbWF0aW9uPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwYWdlLWFuYWx5emVyXCI+UGFnZSBBbmFseXplcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZm9ybS1maWxsZXJcIj5Gb3JtIEZpbGxlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGF0YS1leHRyYWN0b3JcIj5EYXRhIEV4dHJhY3Rvcjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZXR0aW5nLWl0ZW1cIj5cbiAgICAgICAgICAgIDxzcGFuPkluc3RydWN0aW9uczwvc3Bhbj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImFnZW50LWluc3RydWN0aW9uc1wiIHJvd3M9XCIzXCIgcGxhY2Vob2xkZXI9XCJEZXNjcmliZSB3aGF0IHRoZSBhZ2VudCBzaG91bGQgZG8uLi5cIj48L3RleHRhcmVhPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlY29uZGFyeS1idG4gY2FuY2VsLW1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnktYnRuIGxhdW5jaC1tb2RhbFwiPkxhdW5jaDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdmVybGF5KTtcblxuICAgIC8vIFBvcHVsYXRlIHRhYnNcbiAgICBjaHJvbWUudGFicy5xdWVyeSh7fSwgKHRhYnMpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2FnZW50LXRhYi1zZWxlY3QnKTtcbiAgICAgIHRhYnMuZm9yRWFjaCh0YWIgPT4ge1xuICAgICAgICBpZiAodGFiLmlkKSB7XG4gICAgICAgICAgY29uc3Qgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgb3B0LnZhbHVlID0gdGFiLmlkO1xuICAgICAgICAgIG9wdC50ZXh0Q29udGVudCA9IGAke3RhYi50aXRsZT8uc3Vic3RyaW5nKDAsIDQwKSB8fCAnVW50aXRsZWQnfSAke3RhYi5hY3RpdmUgPyAnKGFjdGl2ZSknIDogJyd9YDtcbiAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBoYW5kbGVyc1xuICAgIG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNsb3NlLW1vZGFsJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBvdmVybGF5LnJlbW92ZSgpKTtcbiAgICBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5jYW5jZWwtbW9kYWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG92ZXJsYXkucmVtb3ZlKCkpO1xuICAgIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoZS50YXJnZXQgPT09IG92ZXJsYXkpIG92ZXJsYXkucmVtb3ZlKCk7IH0pO1xuXG4gICAgLy8gTGF1bmNoIGhhbmRsZXJcbiAgICBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5sYXVuY2gtbW9kYWwnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYlNlbGVjdCA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignI2FnZW50LXRhYi1zZWxlY3QnKTtcbiAgICAgIGNvbnN0IHR5cGVTZWxlY3QgPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJyNhZ2VudC10eXBlLXNlbGVjdCcpO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcjYWdlbnQtaW5zdHJ1Y3Rpb25zJyk7XG5cbiAgICAgIGxldCB0YWJJZDtcbiAgICAgIGlmICh0YWJTZWxlY3QudmFsdWUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgIGNvbnN0IFthY3RpdmVUYWJdID0gYXdhaXQgY2hyb21lLnRhYnMucXVlcnkoeyBhY3RpdmU6IHRydWUsIGN1cnJlbnRXaW5kb3c6IHRydWUgfSk7XG4gICAgICAgIHRhYklkID0gYWN0aXZlVGFiPy5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYklkID0gcGFyc2VJbnQodGFiU2VsZWN0LnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YWJJZCkge1xuICAgICAgICB0aGlzLnNob3dFcnJvcignTm8gdGFiIHNlbGVjdGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWdlbnRUeXBlID0gdHlwZVNlbGVjdC52YWx1ZTtcbiAgICAgIGNvbnN0IGFnZW50SW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zLnZhbHVlPy50cmltKCkgfHwgJyc7XG4gICAgICBvdmVybGF5LnJlbW92ZSgpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNocm9tZS5ydW50aW1lLnNlbmRNZXNzYWdlKHtcbiAgICAgICAgICBhY3Rpb246ICdsYXVuY2hBSVdvcmtlcicsXG4gICAgICAgICAgdGFiSWQsXG4gICAgICAgICAgbW9kZWw6IGFnZW50VHlwZSxcbiAgICAgICAgICBpbnN0cnVjdGlvbnM6IGFnZW50SW5zdHJ1Y3Rpb25zLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBhZ2VudElkID0gcmVzcG9uc2UuYWdlbnRJZCB8fCBgYWdlbnQtJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX1gO1xuICAgICAgICAgIHRoaXMuYWdlbnRzLnNldChhZ2VudElkLCB7XG4gICAgICAgICAgICBpZDogYWdlbnRJZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50VHlwZSxcbiAgICAgICAgICAgIHRhYklkLFxuICAgICAgICAgICAgc3RhdHVzOiAncnVubmluZycsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVBZ2VudExpc3QoKTtcbiAgICAgICAgICB0aGlzLnNob3dOb3RpZmljYXRpb24oYEFnZW50IGxhdW5jaGVkIG9uIHRhYiAke3RhYklkfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHJlc3BvbnNlPy5lcnJvciB8fCAnRmFpbGVkIHRvIGxhdW5jaCBhZ2VudCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnNob3dFcnJvcignRmFpbGVkIHRvIGxhdW5jaCBhZ2VudDogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNldHRpbmdzIFRhYlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuZ2V0KFtcbiAgICAgICdtY3BQb3J0JyxcbiAgICAgICdjZHBQb3J0JyxcbiAgICAgICd6YXBQb3J0cycsXG4gICAgICAnaGFuem9fZGVmYXVsdF9tb2RlbCcsXG4gICAgICAnaGFuem9fcmFnX2VuZHBvaW50JyxcbiAgICAgICdoYW56b19yYWdfYXBpX2tleScsXG4gICAgICAnaGFuem9fcmFnX2tiJyxcbiAgICAgICdoYW56b19yYWdfdG9wX2snLFxuICAgICAgJ2hhbnpvX3JhZ19pbmNsdWRlX3RhYl9jb250ZXh0JyxcbiAgICAgICdoYW56b19yYWdfdXNlX3phcCcsXG4gICAgICAnaGFuem9fY2hhdF9yYWdfZW5hYmxlZCcsXG4gICAgICAnaGFuem9fY2hhdF90YWJfY29udGV4dF9lbmFibGVkJyxcbiAgICBdLCAocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBtY3BQb3J0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21jcC1wb3J0LXNldHRpbmcnKTtcbiAgICAgIGNvbnN0IGNkcFBvcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpO1xuICAgICAgY29uc3QgemFwUG9ydHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKTtcblxuICAgICAgaWYgKG1jcFBvcnQpIG1jcFBvcnQudmFsdWUgPSByZXN1bHQubWNwUG9ydCB8fCAzMDAxO1xuICAgICAgaWYgKGNkcFBvcnQpIGNkcFBvcnQudmFsdWUgPSByZXN1bHQuY2RwUG9ydCB8fCA5MjIzO1xuICAgICAgaWYgKHphcFBvcnRzKSB6YXBQb3J0cy52YWx1ZSA9IChyZXN1bHQuemFwUG9ydHMgfHwgWzk5OTksOTk5OCw5OTk3LDk5OTYsOTk5NV0pLmpvaW4oJywnKTtcbiAgICAgIGlmIChyZXN1bHQuaGFuem9fZGVmYXVsdF9tb2RlbCAmJiB0aGlzLmVsLmRlZmF1bHRNb2RlbCkge1xuICAgICAgICB0aGlzLmVsLmRlZmF1bHRNb2RlbC52YWx1ZSA9IHJlc3VsdC5oYW56b19kZWZhdWx0X21vZGVsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lbC5yYWdFbmRwb2ludCkgdGhpcy5lbC5yYWdFbmRwb2ludC52YWx1ZSA9IHJlc3VsdC5oYW56b19yYWdfZW5kcG9pbnQgfHwgJyc7XG4gICAgICBpZiAodGhpcy5lbC5yYWdBcGlLZXkpIHRoaXMuZWwucmFnQXBpS2V5LnZhbHVlID0gcmVzdWx0LmhhbnpvX3JhZ19hcGlfa2V5IHx8ICcnO1xuICAgICAgaWYgKHRoaXMuZWwucmFnS2IpIHRoaXMuZWwucmFnS2IudmFsdWUgPSByZXN1bHQuaGFuem9fcmFnX2tiIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuZWwucmFnVG9wSykgdGhpcy5lbC5yYWdUb3BLLnZhbHVlID0gU3RyaW5nKHJlc3VsdC5oYW56b19yYWdfdG9wX2sgfHwgNSk7XG4gICAgICBpZiAodGhpcy5lbC5yYWdJbmNsdWRlVGFiQ29udGV4dCkgdGhpcy5lbC5yYWdJbmNsdWRlVGFiQ29udGV4dC5jaGVja2VkID0gcmVzdWx0LmhhbnpvX3JhZ19pbmNsdWRlX3RhYl9jb250ZXh0ICE9PSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmVsLnJhZ1VzZVphcCkgdGhpcy5lbC5yYWdVc2VaYXAuY2hlY2tlZCA9IHJlc3VsdC5oYW56b19yYWdfdXNlX3phcCAhPT0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5lbC5yYWdFbmFibGVkKSB0aGlzLmVsLnJhZ0VuYWJsZWQuY2hlY2tlZCA9IHJlc3VsdC5oYW56b19jaGF0X3JhZ19lbmFibGVkICE9PSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkKSB0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkLmNoZWNrZWQgPSByZXN1bHQuaGFuem9fY2hhdF90YWJfY29udGV4dF9lbmFibGVkICE9PSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0UmFnU3RhdHVzKHRoaXMuZWwucmFnRW5hYmxlZD8uY2hlY2tlZCA/ICdSZWFkeScgOiAnUkFHIGRpc2FibGVkJyk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgbWNwUG9ydCA9IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtY3AtcG9ydC1zZXR0aW5nJyk/LnZhbHVlKSB8fCAzMDAxO1xuICAgIGNvbnN0IGNkcFBvcnQgPSBwYXJzZUludChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2RwLXBvcnQtc2V0dGluZycpPy52YWx1ZSkgfHwgOTIyMztcbiAgICBjb25zdCB6YXBQb3J0cyA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnemFwLXBvcnRzLXNldHRpbmcnKT8udmFsdWUgfHwgJycpXG4gICAgICAuc3BsaXQoJywnKS5tYXAocCA9PiBwYXJzZUludChwLnRyaW0oKSkpLmZpbHRlcihwID0+IHAgPiAwICYmIHAgPCA2NTUzNik7XG5cbiAgICBhd2FpdCBjaHJvbWUuc3RvcmFnZS5sb2NhbC5zZXQoe1xuICAgICAgbWNwUG9ydCxcbiAgICAgIGNkcFBvcnQsXG4gICAgICB6YXBQb3J0czogemFwUG9ydHMubGVuZ3RoID8gemFwUG9ydHMgOiBbOTk5OSw5OTk4LDk5OTcsOTk5Niw5OTk1XSxcbiAgICAgIGhhbnpvX2RlZmF1bHRfbW9kZWw6IHRoaXMuZWwuZGVmYXVsdE1vZGVsPy52YWx1ZSB8fCAnZ3B0LTRvJyxcbiAgICAgICdzYWZlLW1vZGUnOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FmZS1tb2RlJyk/LmNoZWNrZWQsXG4gICAgICAnZW5hYmxlLXdlYmdwdSc6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmFibGUtd2ViZ3B1Jyk/LmNoZWNrZWQsXG4gICAgICBtYXhBZ2VudHM6IHBhcnNlSW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXgtYWdlbnRzJyk/LnZhbHVlKSB8fCAzLFxuICAgICAgaGFuem9fcmFnX2VuZHBvaW50OiB0aGlzLmVsLnJhZ0VuZHBvaW50Py52YWx1ZT8udHJpbSgpIHx8ICcnLFxuICAgICAgaGFuem9fcmFnX2FwaV9rZXk6IHRoaXMuZWwucmFnQXBpS2V5Py52YWx1ZT8udHJpbSgpIHx8ICcnLFxuICAgICAgaGFuem9fcmFnX2tiOiB0aGlzLmVsLnJhZ0tiPy52YWx1ZT8udHJpbSgpIHx8ICcnLFxuICAgICAgaGFuem9fcmFnX3RvcF9rOiBNYXRoLm1heCgxLCBNYXRoLm1pbihwYXJzZUludCh0aGlzLmVsLnJhZ1RvcEs/LnZhbHVlIHx8ICc1JywgMTApIHx8IDUsIDIwKSksXG4gICAgICBoYW56b19yYWdfaW5jbHVkZV90YWJfY29udGV4dDogISF0aGlzLmVsLnJhZ0luY2x1ZGVUYWJDb250ZXh0Py5jaGVja2VkLFxuICAgICAgaGFuem9fcmFnX3VzZV96YXA6ICEhdGhpcy5lbC5yYWdVc2VaYXA/LmNoZWNrZWQsXG4gICAgICBoYW56b19jaGF0X3JhZ19lbmFibGVkOiAhIXRoaXMuZWwucmFnRW5hYmxlZD8uY2hlY2tlZCxcbiAgICAgIGhhbnpvX2NoYXRfdGFiX2NvbnRleHRfZW5hYmxlZDogISF0aGlzLmVsLnRhYkNvbnRleHRFbmFibGVkPy5jaGVja2VkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zaG93Tm90aWZpY2F0aW9uKCdTZXR0aW5ncyBzYXZlZCcpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFV0aWxpdHlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgc3RhcnRNb25pdG9yaW5nKCkge1xuICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY29ubmVjdFRvTUNQKCksIDEwMDAwKTtcbiAgICBjaHJvbWUudGFicy5vblVwZGF0ZWQuYWRkTGlzdGVuZXIoKCkgPT4gdGhpcy5yZWZyZXNoVGFiRmlsZXN5c3RlbSgpKTtcbiAgICBjaHJvbWUudGFicy5vblJlbW92ZWQuYWRkTGlzdGVuZXIoKCkgPT4gdGhpcy5yZWZyZXNoVGFiRmlsZXN5c3RlbSgpKTtcbiAgfVxuXG4gIGhhbmRsZU1lc3NhZ2UocmVxdWVzdCkge1xuICAgIHN3aXRjaCAocmVxdWVzdC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2FnZW50VXBkYXRlJzpcbiAgICAgICAgaWYgKHJlcXVlc3QuYWdlbnRJZCAmJiB0aGlzLmFnZW50cy5oYXMocmVxdWVzdC5hZ2VudElkKSkge1xuICAgICAgICAgIHRoaXMuYWdlbnRzLmdldChyZXF1ZXN0LmFnZW50SWQpLnN0YXR1cyA9IHJlcXVlc3Quc3RhdHVzO1xuICAgICAgICAgIHRoaXMudXBkYXRlQWdlbnRMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2hvd05vdGlmaWNhdGlvbihtZXNzYWdlKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBlbC5jbGFzc05hbWUgPSAnbm90aWZpY2F0aW9uJztcbiAgICBlbC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBlbC5yZW1vdmUoKSwgMzAwMCk7XG4gIH1cblxuICBzaG93RXJyb3IobWVzc2FnZSkge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWwuY2xhc3NOYW1lID0gJ25vdGlmaWNhdGlvbiBlcnJvcic7XG4gICAgZWwudGV4dENvbnRlbnQgPSBtZXNzYWdlO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gZWwucmVtb3ZlKCksIDUwMDApO1xuICB9XG59XG5cbi8vIEluaXRpYWxpemVcbmNvbnN0IGhhbnpvU2lkZWJhciA9IG5ldyBIYW56b1NpZGViYXIoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OztBQUVBLE1BQU0sZUFBTixNQUFtQjtBQUFBLElBQ2pCLGNBQWM7QUFDWixXQUFLLFNBQVMsb0JBQUksSUFBSTtBQUN0QixXQUFLLGFBQWE7QUFDbEIsV0FBSyxXQUFXLENBQUM7QUFDakIsV0FBSyxZQUFZO0FBQ2pCLFdBQUssbUJBQW1CO0FBQ3hCLFdBQUssZ0JBQWdCO0FBQ3JCLFdBQUssYUFBYTtBQUVsQixXQUFLLGFBQWE7QUFDbEIsV0FBSyxvQkFBb0I7QUFDekIsV0FBSyxVQUFVO0FBQUEsSUFDakI7QUFB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
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|