diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..c8bf2e0 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['https://paypal.me/jenwina'] # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] \ No newline at end of file diff --git a/.gitignore b/.gitignore index d63a1d3..c72ff03 100644 --- a/.gitignore +++ b/.gitignore @@ -110,3 +110,7 @@ builds dist distApp + +# discord_voice debug +discord-last-webrtc_0 +discord-webrtc_0 \ No newline at end of file diff --git a/BetterDiscordApp/js/main.js b/BetterDiscordApp/js/main.js index 0918444..60e2ff7 100644 --- a/BetterDiscordApp/js/main.js +++ b/BetterDiscordApp/js/main.js @@ -313,6 +313,15 @@ const settings = { cat: "core", category: "content manager" }, + "Themes in Popout Window": { + id: "lightcord-9", + info: "Enable themes in Popout Window. (For example, when detaching screenshare.)", + implemented: true, + hidden: false, + cat: "core", + category: "content manager", + experimental: true + }, /* Developer */ "Developer Mode": { @@ -406,6 +415,15 @@ const settings = { category: "Lightcord", experimental: true }, + "Use Notification Shim": { + id: "lightcord-10", + info: "Basically don't use Windows's Notifications.", + implemented: true, + hidden: process.platform !== "win32", + cat: "lightcord", + category: "Lightcord", + experimental: false + }, /** Lightcord Window */ "Always-on-Top": { @@ -486,6 +504,8 @@ const defaultCookie = { "lightcord-6": true, "lightcord-7": false, "lightcord-8": false, + "lightcord-9": false, + "lightcord-10": false, "no_window_bound": false }; const settingsCookie = {}; @@ -2051,6 +2071,13 @@ Core.prototype.setConfig = function (config) { Object.assign(_0globals__WEBPACK_IMPORTED_MODULE_0__["bdConfig"], config); }; +Object.defineProperty(Core.prototype, "methods", { + get() { + return methods; + } + +}); + Core.prototype.setMethods = function (m) { if (this.hasStarted) return; methods = m; @@ -2148,6 +2175,7 @@ Core.prototype.init = async function () { _utils__WEBPACK_IMPORTED_MODULE_1__["default"].suppressErrors(this.patchMessageHeader.bind(this), "BD Badge Chat Patch")(); _utils__WEBPACK_IMPORTED_MODULE_1__["default"].suppressErrors(this.patchMemberList.bind(this), "BD Badge Member List Patch")(); _utils__WEBPACK_IMPORTED_MODULE_1__["default"].suppressErrors(this.patchAttachment.bind(this), "LC Plugin Certifier Patch")(); + _utils__WEBPACK_IMPORTED_MODULE_1__["default"].suppressErrors(this.patchPopoutWindow.bind(this), "BD Popout Window Patch")(); if (_0globals__WEBPACK_IMPORTED_MODULE_0__["bdConfig"].haveInstalledDefault) { let alert = _utils__WEBPACK_IMPORTED_MODULE_1__["default"].alert("First Installation", "As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings."); @@ -2168,6 +2196,51 @@ Core.prototype.init = async function () { } }; +Core.prototype.patchPopoutWindow = async function () { + let canceled = false; + + this.cancelPatchPopoutWindow = () => { + canceled = true; + }; + + window.Lightcord.Api.ensureExported(e => e.default && e.default.getWindow).then(popoutModule => { + if (canceled) return; // Not a good idea to do it like that. + + const interceptor = window.Lightcord.DiscordModules.dispatcher._interceptor; + window.Lightcord.DiscordModules.dispatcher.setInterceptor(function (action) { + if (action && action.type === "POPOUT_WINDOW_OPEN") { + const render = action.render; + + action.render = function () { + const render1 = render.call(this, ...arguments); + const type1 = render1.type; + + render1.type = function (props) { + const render2 = type1(props); + console.log(props, render2); + return render2; + }; + + console.log(render1); + return render1; + }; + } + + return interceptor.call(this, action); + }); + window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_OPEN", ev => { + if (!_0globals__WEBPACK_IMPORTED_MODULE_0__["settingsCookie"]["lightcord-9"]) return; + if (canceled) return; + _utils__WEBPACK_IMPORTED_MODULE_1__["default"].log("POPOUT THEME", "Popout opened, Adding theme"); + setImmediate(() => { + console.log(ev); + const window = popoutModule.default.getWindow(ev.key); + console.log(window); + }); + }); + }); +}; + Core.prototype.patchAttributes = async function () { let attribsPatchs = []; @@ -2179,7 +2252,7 @@ Core.prototype.patchAttributes = async function () { const Anchor = _webpackModules__WEBPACK_IMPORTED_MODULE_7__["default"].find(m => m.displayName == "Anchor"); - ensureExported(e => e.default && e.default.displayName === "DiscordTag").then(DiscordTag => { + window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === "DiscordTag").then(DiscordTag => { let DiscordTagComp = DiscordTag.default; DiscordTag.default = function (props) { @@ -2306,6 +2379,7 @@ Core.prototype.initSettings = function () { settingModule.default.prototype.getPredicateSections = function () { let result = getPredicateSections.call(this, ...arguments); + if (!result[1]) return result; if (result[1].section === "My Account") { // user settings, not guild settings @@ -5511,6 +5585,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _webpackModules__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./webpackModules */ "./src/modules/webpackModules.js"); /* harmony import */ var _ui_tooltipWrap__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../ui/tooltipWrap */ "./src/ui/tooltipWrap.js"); /* harmony import */ var _ui_icons_history__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../ui/icons/history */ "./src/ui/icons/history.jsx"); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./core */ "./src/modules/core.js"); + @@ -5671,7 +5747,7 @@ let isClearingCache = false; } updateSettings(id, enabled, sidebar) { - if (!["lightcord-8", "no_window_bound", "enable_glasstron"].includes(id)) _0globals__WEBPACK_IMPORTED_MODULE_0__["settingsCookie"][id] = enabled; + if (!["lightcord-8", "no_window_bound", "enable_glasstron", "lightcord-10"].includes(id)) _0globals__WEBPACK_IMPORTED_MODULE_0__["settingsCookie"][id] = enabled; if (id == "bda-gs-2") { if (enabled) _domtools__WEBPACK_IMPORTED_MODULE_8__["default"].addClass(document.body, "bd-minimal");else _domtools__WEBPACK_IMPORTED_MODULE_8__["default"].removeClass(document.body, "bd-minimal"); @@ -5789,6 +5865,11 @@ let isClearingCache = false; electron__WEBPACK_IMPORTED_MODULE_19__["remote"].app.exit(); } + if (id === "lightcord-10") { + _core__WEBPACK_IMPORTED_MODULE_29__["default"].methods.NotificationsUseShim(enabled); + return; + } + if (id === "no_window_bound") { let appSettings = electron__WEBPACK_IMPORTED_MODULE_19__["remote"].getGlobal("appSettings"); appSettings.set("NO_WINDOWS_BOUND", enabled); @@ -5868,6 +5949,7 @@ let isClearingCache = false; if (setting.id === "lightcord-8") isChecked = appSettings.get("isTabs", false); if (setting.id === "no_window_bound") isChecked = appSettings.get("NO_WINDOWS_BOUND", false); if (setting.id === "enable_glasstron") isChecked = appSettings.get("GLASSTRON", true); + if (setting.id === "lightcord-10") isChecked = !appSettings.get("DEFAULT_NOTIFICATIONS", true); let returnValue = _v2__WEBPACK_IMPORTED_MODULE_4__["default"].react.createElement(_ui_switch__WEBPACK_IMPORTED_MODULE_24__["default"], { id: setting.id, key: setting.id, @@ -7737,13 +7819,21 @@ class ApiPreview extends React.PureComponent { type: "description", className: "", selectable: false - }, "These components are here for the plugin devs. They can quickly embed any component below with this panel."), React.createElement(_margintop__WEBPACK_IMPORTED_MODULE_4__["default"], null), React.createElement(Lightcord.Api.Components.inputs.Button, { + }, "These components are here for the plugin devs. They can quickly embed any component below with this panel.", React.createElement("div", { + style: { + marginTop: "20px" + } + }), React.createElement(Lightcord.Api.Components.general.AlertBox, { + type: "info" + }, "All these components have error handling. If you want none, add `.original` after the component path."), React.createElement(Lightcord.Api.Components.general.AlertBox, { + type: "warn" + }, "We do not recommend modifying these component by a plugin. Only do this if you know what you are doing.")), React.createElement(_margintop__WEBPACK_IMPORTED_MODULE_4__["default"], null), React.createElement(Lightcord.Api.Components.inputs.Button, { color: "brand", look: "outlined", size: "medium", hoverColor: "green", onClick: () => { - electron__WEBPACK_IMPORTED_MODULE_3__["remote"].shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis"); + electron__WEBPACK_IMPORTED_MODULE_3__["remote"].shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs"); }, wrapper: false }, "Documentation")), allComponents.map(comp => { @@ -10353,7 +10443,7 @@ class PresenceErrorCatcher extends React.Component { return this.render(); } } else { - emptyClasses = emptyClasses || _modules_v2__WEBPACK_IMPORTED_MODULE_0__["default"].WebpackModules.find(e => e.emptyStateImage); + emptyClasses = emptyClasses || _modules_v2__WEBPACK_IMPORTED_MODULE_0__["default"].WebpackModules.find(e => e.emptyStateImage && e.emptyState); if (!emptyClasses) { _modules_utils__WEBPACK_IMPORTED_MODULE_9__["default"].showToast("An error occured. Please check the console for more informations."); @@ -10370,7 +10460,7 @@ class PresenceErrorCatcher extends React.Component { padding: "30px 30px", borderRadius: "8px" }, - className: "lc-tab-box-shadow" + className: `lc-tab-box-shadow ${emptyClasses.emptyState}` }, React.createElement("div", { className: emptyClasses.emptyStateImage, style: { @@ -12714,4 +12804,4 @@ module.exports = require("yauzl"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImlwY1JlbmRlcmVyIiwiY29uZmlnIiwiaGFzU3RhcnRlZCIsImZsYXQiLCJ2ZXJzaW9uIiwiRUQiLCJXZWJTb2NrZXQiLCJwYXRjaEF0dHJpYnV0ZXMiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJjb250ZW50TWFuYWdlciIsImF0b2IiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJBcGkiLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJjYWxsIiwic2VjdGlvbiIsInBvcGVkIiwicG9wIiwicmVuZGVyU2lkZWJhciIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJjbGFzc05hbWVNb2RhbCIsIm1haW5PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtbGVuIiwibXV0YXRpb24iLCJyYXdPYnNlcnZlciIsImFkZGVkTm9kZXMiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwidG9TdHJpbmciLCJzb2NpYWxNb2R1bGUxIiwib3JpZ2luYWwiLCJuZXdPbmUiLCJyZXR1cm5WYWwiLCJsaW5rIiwiY2xhc3NOYW1lQ29sb3JNdXRlZCIsInNpemVzIiwiY2xhc3NOYW1lVmVyc2lvbkhhc2giLCJjb2xvck11dGVkIiwic2l6ZTMyIiwidmVyc2lvbkhhc2giLCJicmFuY2giLCJhZGRpdGlvbmFsIiwicmVhY3QiLCJzaXplMTIiLCJlbGVjdHJvbiIsImdldEdsb2JhbCIsImNvbW1pdCIsIm9yaWdpbmFsVmVyc2lvbnMiLCJzcGxpY2UiLCJnZXRHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZmluZEJ5UHJvcHMiLCJndWlsZHMiLCJwaWxsIiwiZ3VpbGRMaXN0SXRlbXNQYXRjaCIsIkd1aWxkQ2xhc3NlcyIsImxpc3RJdGVtQ2xhc3MiLCJibG9iQ2xhc3MiLCJyZWFjdEluc3RhbmNlIiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJ0aGlzT2JqZWN0IiwiZ3VpbGREYXRhIiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsIkd1aWxkU2VwYXJhdG9yIiwiU2VwYXJhdG9yIiwiQXR0YWNobWVudFBhdGNoIiwiQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJnZXROZXN0ZWRQcm9wIiwicGF0Y2giLCJtZXNzYWdlSGVhZGVyUGF0Y2giLCJNZXNzYWdlSGVhZGVyIiwiY2hhdCIsIm5leHRUaWNrIiwiZ2V0RWxlbWVudEJ5SWQiLCJjaGlsZE5vZGVzIiwiYmxvY2tEaXYiLCJkaXN0YW50IiwiZ2V0QmFkZ2VzIiwiYmFkZ2VzIiwic3ZnIiwid2lkdGgiLCJzY29wZXMiLCJzY29wZSIsImNvbXBvbmVudCIsImRpdjIiLCJyZWFjdERvbSIsInJlbmRlciIsIm1lbWJlckxpc3RQYXRjaCIsIk1lbWJlckxpc3RJdGVtIiwicmVuZGVyRGVjb3JhdG9ycyIsInVwZGF0ZUluamVjdG9yIiwiaW5qZWN0aW9uUGF0aCIsInJtcmYiLCJ5YXV6bCIsIm1rZGlycCIsInJlcXVlc3QiLCJwYXJlbnRQYXRoIiwiZm9sZGVyTmFtZSIsInppcExpbmsiLCJzYXZlZFppcCIsImV4dHJhY3RlZEZvbGRlciIsInN1Y2Nlc3MiLCJlbmNvZGluZyIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsImFscmVhZHlFeGlzdHMiLCJyZXMiLCJleGlzdHMiLCJyZW5hbWUiLCJyb3VuZCIsInBlcmZvcm1hbmNlIiwid3JpdGVGaWxlIiwiemlwZmlsZSIsImxhenlFbnRyaWVzIiwiemlwIiwib24iLCJlbnRyeSIsImZpbGVOYW1lIiwicmVhZEVudHJ5IiwiZnVsbFBhdGgiLCJzeW5jIiwiZGlybmFtZSIsIm9wZW5SZWFkU3RyZWFtIiwicmVhZFN0cmVhbSIsInBpcGUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsIm9uY2UiLCJiYWNrdXBGb2xkZXIiLCJ1bmxpbmsiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwic3RhYmxlIiwiY2FuYXJ5IiwicHRiIiwicGx1Z2luRGF0YSIsIkJERmlsZSIsIndyaXRlRmlsZVN5bmMiLCJzZXR0aW5nc0ZpbGUiLCJ1bmxpbmtTeW5jIiwiX2luamVjdGlvblBhdGgiLCJiYXNlIiwicm9hbWluZ0Jhc2UiLCJnZXRQYXRoIiwicm9hbWluZ0xvY2F0aW9uIiwicmVhbExvY2F0aW9uIiwiY29uZmlnRmlsZSIsIl9jb25maWdGaWxlIiwiX0JERmlsZSIsIl9zZXR0aW5nc0ZpbGUiLCJnZXRQbHVnaW5GaWxlIiwiRGV2TW9kZSIsImRlYnVnTGlzdGVuZXIiLCJjb3B5U2VsZWN0b3JMaXN0ZW5lciIsInN0YXJ0RGVidWdMaXN0ZW5lciIsInN0YXJ0Q29weVNlbGVjdG9yIiwic3RvcERlYnVnTGlzdGVuZXIiLCJzdG9wQ29weVNlbGVjdG9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIndoaWNoIiwicHJldmVudERlZmF1bHQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJzdG9wUHJvcGFnYXRpb24iLCJzZWxlY3RvciIsImdldFNlbGVjdG9yIiwiY2xhc3NMYXllciIsImNsYXNzSXRlbXMiLCJkaXNhYmxlZFBvaW50ZXJFdmVudHMiLCJtZW51IiwiYXR0YWNoIiwiY20iLCJxdWVyeSIsImNvbnRhaW5lciIsImxheWVyQ29udGFpbmVyIiwiY21XcmFwIiwic3R5bGVGbGV4aWJsZSIsImFjY29tbW9kYXRlU2Nyb2xsYmFyIiwiYXBwZW5kIiwiY2xpZW50WSIsImxlZnQiLCJjbGllbnRYIiwic2Nyb2xsZXJDbGFzc2VzIiwic2Nyb2xsZXJXcmFwIiwic2Nyb2xsZXJUaGVtZWQiLCJ0aGVtZUdob3N0SGFpcmxpbmUiLCJzY3JvbGxlciIsInJlbW92ZUNNIiwia2V5Q29kZSIsImNtZyIsImNtaSIsIml0ZW0iLCJsYWJlbENvbnRhaW5lciIsImNvbG9yRGVmYXVsdCIsImxhYmVsIiwiTmF0aXZlTW9kdWxlIiwiY29weSIsImVsZW1lbnRzIiwicXVlcnlBbGwiLCJmb2N1c2VkIiwic2VwYXJhdG9yIiwic2Nyb2xsSGVpZ2h0IiwiZWwiLCJuYW1lcyIsInBhcmVudE5vZGUiLCJ1bnNoaWZ0Iiwib3duZXJEb2N1bWVudCIsInRhZ05hbWUiLCJmcm9tIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJnZXRSdWxlcyIsInN0eWxlU2hlZXRzIiwic2hlZXRzIiwicnVsZXMiLCJjc3NSdWxlcyIsImVsZW1lbnRSdWxlcyIsInNlbGVjdG9yVGV4dCIsIm1hdGNoZXMiLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGltZSIsInRpbWVGcmFjdGlvbiIsInByb2dyZXNzIiwiUSIsInBhcnNlSFRNTCIsImlzSFRNTCIsIk5vZGVMaXN0Iiwic29tZSIsIm4iLCJub2RlVHlwZSIsImJhc2VFbGVtZW50IiwiaHRtbCIsImZyYWdtZW50IiwidGVtcGxhdGUiLCJjbG9uZU5vZGUiLCJlc2NhcGVIVE1MIiwidGV4dE5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsInNwYW5FbGVtZW50Iiwibm9kZVZhbHVlIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInRvZ2dsZUNsYXNzIiwiY2xhc3NuYW1lIiwiaW5kaWNhdG9yIiwiaGFzQ2xhc3MiLCJldmVyeSIsInJlcGxhY2VDbGFzcyIsIm9sZE5hbWUiLCJuZXdOYW1lIiwiYXBwZW5kVG8iLCJ0aGlzTm9kZSIsInRoYXROb2RlIiwicHJlcGVuZFRvIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwidGFyZ2V0Tm9kZSIsImluc2VydEJlZm9yZSIsIm5leHRTaWJsaW5nIiwibmV3Tm9kZSIsIm5leHQiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwiZXZlbnQiLCJkZWxlZ2F0ZSIsIm5hbWVzcGFjZSIsImhhc0RlbGVnYXRlIiwiZXZlbnRGdW5jIiwiY2FuY2VsIiwibmV3Q2FuY2VsIiwiZmluZEluZGV4IiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiQnVmZmVyIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJnZW5lcmF0ZUtleSIsImRlY2lwaGVyIiwiZGVjcnlwdGVkIiwiZmluYWwiLCJjaXBoZXIiLCJlbmNyeXB0ZWQiLCJQbHVnaW5Nb2R1bGUiLCJsb2FkUGx1Z2luRGF0YSIsImxvYWQiLCJzYXZlUGx1Z2luRGF0YSIsImNoYW5uZWxTd2l0Y2giLCJzdGFydFBsdWdpbiIsInN0b3BQbHVnaW4iLCJlbmFibGVQbHVnaW4iLCJkaXNhYmxlUGx1Z2luIiwidG9nZ2xlUGx1Z2luIiwicCIsImZpbGVuYW1lT3JOYW1lIiwiYmRwbHVnaW4iLCJkZWxldGUiLCJlZGl0Iiwib3Blbkl0ZW0iLCJ1cGRhdGVQbHVnaW5MaXN0Iiwic2F2ZWQiLCJuZXdNZXNzYWdlIiwib25NZXNzYWdlIiwib25Td2l0Y2giLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY2xhc3NTaWRlYmFyIiwiY29udGVudFJlZ2lvbiIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJjb3JlU2V0dGluZ3MiLCJnZXRTZXR0aW5ncyIsImNhdGVnb3JpZXMiLCJTZXQiLCJzZWN0aW9ucyIsImxpZ2h0Y29yZFNldHRpbmdzIiwiUHJlc2VuY2VTZXR0aW5ncyIsIk1zZ0xvZ1NldHRpbmdzIiwiY2hlY2tlZCIsInB1YmxpY1NlcnZlcnNNb2R1bGUiLCJ2b2ljZU1vZGUiLCJ0ZkhvdXIiLCJjb2xvcmVkVGV4dCIsImRNb2RlIiwiU2V0dGluZ3MiLCJkZXZNb2RlIiwiZm9yY2VVcGRhdGUiLCJjYWxsUmluZ2luZ0JlYXQiLCJzZXR0aW5nc1N0b3JlIiwic2hvd0N1cnJlbnRHYW1lIiwidXBkYXRlUmVtb3RlU2V0dGluZ3MiLCJnZXRDdXJyZW50V2luZG93Iiwic2V0QWx3YXlzT25Ub3AiLCJBbnRpQWRETSIsImJsdXJQcml2YXRlIiwiZGlzYWJsZVR5cGluZyIsImFwcFNldHRpbmdzIiwicmVsYXVuY2giLCJleGl0IiwiU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIk1hcmdpblRvcCIsImlzQ2hlY2tlZCIsIlN3aXRjaCIsIkNvbXBvbmVudHMiLCJpbnB1dHMiLCJCdXR0b24iLCJsb29rIiwiaG92ZXJDb2xvciIsImlwYyIsInNlbmQiLCJhcmd2IiwicXVpdCIsInNlc3Npb24iLCJjbGVhckNhY2hlIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3MiLCJWMkNfQWNjb3VudEluZm9zIiwiQXBpUHJldmlldyIsIkNzc0VkaXRvciIsIkNvbnRlbnRMaXN0IiwiQ29tcG9uZW50Iiwib3JpZ2luYWxSZW5kZXIiLCJlbnVtZXJhYmxlIiwiQ2FyZExpc3QiLCJTZXR0aW5nQ29tcG9uZW50IiwicGFuZWxzIiwicGFuZWwiLCJnZXRDb21wb25lbnQiLCJMQ2l0ZW1zIiwiTENEZXZJdGVtcyIsIlRoZW1lTW9kdWxlIiwibG9hZFRoZW1lRGF0YSIsInRoZW1lIiwidW5lc2NhcGUiLCJzYXZlVGhlbWVEYXRhIiwiZW5hYmxlVGhlbWUiLCJkaXNhYmxlVGhlbWUiLCJ0b2dnbGVUaGVtZSIsImJkdGhlbWUiLCJ1cGRhdGVUaGVtZUxpc3QiLCJfd2luZG93Q29uZmlnRmlsZSIsInRyYW5zcGFyZW50IiwiZnJhbWUiLCJjaGFyQ29kZUF0IiwiZ2V0VGV4dEFyZWEiLCJjaGFubmVsVGV4dEFyZWEiLCJ0aXRsZVdyYXBwZXIiLCJpbnNlcnRUZXh0IiwidGV4dGFyZWEiLCJmb2N1cyIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiZXhlY0NvbW1hbmQiLCJtb2R1bGVOYW1lIiwiZ3JvdXBDb2xsYXBzZWQiLCJncm91cEVuZCIsImZvcm1hdFN0cmluZyIsInN0cmluZyIsInJlcGxhY2VtZW50IiwiZXNjYXBlIiwicGFyYW1zIiwiaW5zdGVhZCIsInNpbGVudCIsImZvcmNlIiwib3JpZ01ldGhvZCIsImNhbmNlbGVkIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwibWVtYmVybGlzdCIsIm1lbWJlcnNXcmFwIiwiZm9ybSIsInJpZ2h0IiwiYm90dG9tIiwidG9hc3RXcmFwcGVyIiwiaWNvbiIsInRpbWVvdXQiLCJ0b2FzdEVsZW0iLCJpbm5lclRleHQiLCJtb2RhbE1vZHVsZSIsImhpZGVPbkZ1bGxzY3JlZW4iLCJoZWFkZXJNb2R1bGUiLCJoZWFkZXIiLCJmb290ZXIyTW9kdWxlIiwiZm9jdXNMb2NrIiwiYmFja2Ryb3AiLCJiYWNrZHJvcFdpdGhMYXllciIsImNsb3NpbmdMaXN0ZW5lcnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZUVycm9ycyIsImdlbmVyYXRlVGFiIiwidGFicyIsIk1vZGFsU3RhY2siLCJDaGFuZ2Vsb2dDbGFzc2VzIiwiVGV4dEVsZW1lbnQiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJkZWZhdWx0UHJvcHMiLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJpbWFnZSIsInN1YnRpdGxlIiwiY2UiLCJjaGFuZ2Vsb2dJdGVtcyIsIm1hcmdpbiIsInJlbmRlckhlYWRlciIsIkNoaWxkIiwiZ3JvdyIsInNocmluayIsInRhZyIsIlRhZ3MiLCJINCIsIlNpemVzIiwiU01BTEwiLCJDb2xvcnMiLCJTVEFOREFSRCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwiZGVmYXVsdEZvb3RlciIsIm9uU2Nyb2xsIiwiTW9kYWxBY3Rpb25zIiwiTWFya2Rvd24iLCJDb25maXJtYXRpb25Nb2RhbCIsImVtcHR5RnVuY3Rpb24iLCJvcGVuTW9kYWwiLCJyZWQiLCJtb2RhbEtleSIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsInByb2ZpbE1vZHVsZSIsImZldGNoTXV0dWFsRnJpZW5kcyIsIkxpZ2h0Y29yZFVzZXJCYWRnZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsInJlbGF0aW9ucyIsImZyaWVuZHMiLCJpc0ZyaWVuZCIsImlzQmxvY2tlZCIsImhpZ2h0bGlnaHRKUyIsImhpZ2hsaWdodCIsIm1lc3NhZ2VNb2R1bGUxIiwibWVzc2FnZU1vZHVsZTIiLCJDb2RlQ29udGVudCIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsInNldHRpbmdUaXRsZSIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJjb21wIiwiQWxsUHJldmlld3MiLCJ0YWIiLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwiZ2V0UHJvcHMiLCJyZW5kZXJQcmV2aWV3IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImJvcmRlclJhZGl1cyIsInJlbmRlckNvZGUiLCJnZW5lcmF0ZUNvZGUiLCJnZXRTdHJGb3JQcm9wIiwiY29tcFBhdGgiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wTmFtZSIsImNvbXBDYXRlZ29yeSIsInByb3BTdHJpbmdzIiwiY2hpbGRyZW5Qcm9wIiwic3RyIiwib3BlblRhZyIsImNsb3NlVGFnIiwidmlzaWJsZUtleSIsInByb3BPYmplY3QiLCJpc0xhc3QiLCJpc0ZpcnN0IiwiY2hpbGRyZW5EYXRhIiwiaGVscCIsIm1hcmdpbkJvdHRvbSIsInJlbmRlcnMiLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsInNldEltbWVkaWF0ZSIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJhY3Rpb24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVubW91bnRlZCIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImF1dGhvcklkIiwiYXV0aG9yTGluayIsImlzU2Nhbm5pbmciLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9uQWRkb25DaGFuZ2VzIiwiY29tcG9uZW50RGlkTW91bnQiLCJiZEV2ZW50cyIsIm9wZW5Gb2xkZXIiLCJvcGVuUGF0aCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJzb3J0T3B0aW9ucyIsImRpcmVjdGlvbnMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJDaGVja1VwZGF0ZXMiLCJaZXJlc1BsdWdpbkxpYnJhcnkiLCJQbHVnaW5VcGRhdGVzIiwiY2hlY2tBbGwiLCJtYXJnaW5MZWZ0IiwicmVmcmVzaEljb24iLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZ2V0VmFsdWUiLCJkcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsIkJERXJyb3JCb3VuZGFyeSIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJEZWxldGUiLCJEb3duQXJyb3ciLCJFZGl0IiwibWFyZ2luTW9kdWxlIiwibWFyZ2luVG9wNjAiLCJWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMiLCJwcmV2aWV3IiwiaXNmZXRjaGluZyIsImFzc2V0Q29tcG9uZW50cyIsInVwZGF0ZVdoZW5GZXRjaGVkIiwiZGVmYXVsdFNldHRpbmciLCJSUENQcm9wcyIsImFzc2V0IiwidXBkYXRlUHJldmlldyIsIm9wdGlvbnNDb21wb25lbnRzIiwib2hnb2RvaGZ1Y2siLCJfb3B0aW9uc0NvbXBvbmVudHMiLCJhcnJheSIsImlucHV0VGV4dE1vZHVsZXMiLCJJbnB1dFRleHQiLCJyZW1vdmVLZXliaW5kIiwiX2hvcml6b250YWwiLCJpbnB1dE1pbmkiLCJzaXplMTYiLCJzaXplMjAiLCJpbnB1dCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsImZsZXgiLCJycGMiLCJpc0FjdGl2ZSIsIlByb2ZpbGUiLCJQb3BvdXQiLCJUYWIiLCJlbXB0eUNsYXNzZXMiLCJQcmVzZW5jZUVycm9yQ2F0Y2hlciIsImVyckluZm8iLCJlbXB0eVN0YXRlSW1hZ2UiLCJlbXB0eVN0YXRlSGVhZGVyIiwiZW1wdHlTdGF0ZVN1YnRleHQiLCJwb3BvdXRNb2R1bGVzIiwiVXNlclBvcG91dENvbXBvbmVudCIsIlBvcG91dFByb3BzIiwiVXNlclBvcG91dCIsInJlbmRlcjEiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwicmVuZGVyMiIsInJlbmRlcjMiLCJwb3BvdXQiLCJleGNsdWRlUHJvcGVydGllcyIsInByb2ZpbGVNb2R1bGVzIiwiVXNlclByb2ZpbGVDb21wb25lbnQiLCJQcm9maWxlUHJvcHMiLCJjb25uZWN0ZWRQcm9maWxlU3RvcmUiLCJVc2VyUHJvZmlsZSIsInJlbmRlcjQiLCJwcm9maWxlIiwiVjJDX0xheWVyIiwia2V5dXBMaXN0ZW5lciIsInRyYW5zZm9ybSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNoYW5nZUNhdGVnb3J5Iiwic2VhcmNoS2V5RG93biIsImNoZWNrQ29ubmVjdGlvbiIsImNvbm5lY3QiLCJHdWlsZFN0b3JlIiwiQXZhdGFyRGVmYXVsdHMiLCJTb3J0ZWRHdWlsZFN0b3JlIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImZldGNoIiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2J2IiwiY29udGVudFNjcm9sbGVyIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInNjcmVlblgiLCJzY3JlZW5ZIiwiam9pbldpbmRvdyIsIkJyb3dzZXJXaW5kb3ciLCJ3ZWJDb250ZW50cyIsImxvYWRVUkwiLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25Ub3AiLCJjZW50ZXIiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImJkU2VydmVyIiwib25saW5lIiwibWVtYmVycyIsImljb25VcmwiLCJuYXRpdmVqb2luIiwic2VydmVyMiIsImd1aWxkTGlzdCIsImdldEZsYXR0ZW5lZEd1aWxkSWRzIiwiZGVmYXVsdExpc3QiLCJERUZBVUxUX0FWQVRBUlMiLCJTZXJ2ZXJDYXJkIiwiZmFsbGJhY2siLCJmbG9vciIsImNvbm5lY3RFbmRQb2ludCIsIlNpZGViYXJWaWV3IiwidG9vbHMiLCJUb29scyIsIlRhYkJhclNlcGFyYXRvciIsInNlYXJjaElucHV0IiwiVGFiQmFySGVhZGVyIiwiVGFiQmFySXRlbSIsIm1heExlbmd0aCIsInNlYXJjaGlucHV0Iiwibm90Q29ubmVjdGVkIiwiY29sdW1uTW9kdWxlIiwibWluSGVpZ2h0IiwibGluZUhlaWdodCIsIlYyQ19TZXJ2ZXJDYXJkIiwiaW1hZ2VFcnJvciIsImNhcmRNb2R1bGUiLCJjYXJkIiwiY2FyZFByaW1hcnkiLCJfaG9yaXpvbnRhbFJldmVyc2UiLCJ3cmFwTW9kdWxlIiwibm9XcmFwIiwic3RyZWFtZXJNb2RlRW5hYmxlZCIsIm9uRXJyb3IiLCJoYW5kbGVFcnJvciIsImRyYWdnYWJsZSIsImhvcml6b250YWwiLCJWMkNfU2lkZWJhclZpZXciLCJTY3JvbGxlciIsImZhZGUiLCJkYXJrIiwiVjJDX1JlbG9hZEljb24iLCJ4bWxucyIsIlYyQ19TY3JvbGxlciIsInNjcm9sbGVyTW9kdWxlMSIsInNjcm9sbGVySG9yaXpvbnRhbCIsInNjcm9sbGVyTW9kdWxlMiIsInNpZGViYXJSZWdpb25TY3JvbGxlciIsIndyYXBwZXJDbGFzcyIsInNjcm9sbGVyRmFkZSIsInNjcm9sbGVyQ2xhc3MiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXIiLCJjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwIiwidGhlbWVHaG9zdCIsInNjcm9sbGVyVHJhY2siLCJWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCIsIlNldHRpbmdzR3JvdXAiLCJWMkNfU2V0dGluZ3NHcm91cCIsImJ1dHRvbkNvbXBvbmVudCIsIlYyQ19TZXR0aW5nc1RpdGxlIiwiY2xhc3NuYW1lcyIsImdldENsYXNzTmFtZSIsIlN3aXRjaEl0ZW0iLCJiZXRhIiwidXNlclNldHRpbmdzVm9pY2UiLCJWMkNfVGFiQmFySGVhZGVyIiwiVjJDX1RhYkJhckl0ZW0iLCJWMkNfVGFiQmFyU2VwYXJhdG9yIiwiaW50ZXJ2YWxNb2R1bGUxIiwiSW50ZXJ2YWwiLCJUaW1lUmVuZGVyIiwiX2ludGVydmFsIiwiZ2V0VXBkYXRlZFRpbWUiLCJnZXREaWZmIiwiY2hlY2tVbml4IiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsInJlbmRlclRpbWUiLCJudW1iZXIiLCJyZW1vdmVaZXJvIiwidXNlZFByb3BzIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfRU5EIiwiVVNFUl9BQ1RJVklUWV9USU1FU1RBTVBfU1RBUlQiLCJWMkNfVG9vbHMiLCJ0b29sc01vZHVsZSIsInRvb2xzQ29udGFpbmVyIiwiY29udGFpbmVyTW9kdWxlIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkJvbGQiLCJrZXliaW5kIiwia2V5YmluZEJvbGQiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwiRW11bGF0ZWRUb29sdGlwIiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsInRvb2x0aXAiLCJsYWJlbEVsZW1lbnQiLCJ0b29sdGlwQ29udGVudCIsInBvaW50ZXJFbGVtZW50IiwidG9vbHRpcFBvaW50ZXIiLCJwb3BvdXRzIiwiY2FuU2hvd0Fib3ZlIiwiY2FuU2hvd0JlbG93IiwiY2FuU2hvd0xlZnQiLCJjYW5TaG93UmlnaHQiLCJfY2xhc3NOYW1lIiwic2hvd0Fib3ZlIiwic2hvd0JlbG93Iiwic2hvd0xlZnQiLCJzaG93UmlnaHQiLCJjZW50ZXJIb3Jpem9udGFsbHkiLCJjZW50ZXJWZXJ0aWNhbGx5Iiwibm9kZWNlbnRlciIsImZpbmRET01Ob2RlIiwiVjJDX1hTdmciXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtR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ekIsRUFBaUM7QUFBQ2s3QixPQUFDLEVBQUU7QUFBSixLQUFqQyxDQUhKLEVBSUlwOEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVduakIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDQyxlQUFTLEVBQUUsTUFBWjtBQUFvQnkrQixVQUFJLEVBQUUsU0FBMUI7QUFBcUN4RCxPQUFDLEVBQUU7QUFBeEMsS0FBakMsQ0FKSixDQUhHLENBQVA7QUFVSDs7QUFoQnFELEM7Ozs7Ozs7Ozs7O0FDRjFELG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGtDIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjVcIjtcclxuLypcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn0qL1xyXG5leHBvcnQgY29uc3QgYmJkQ2hhbmdlbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiQkJEJ3MgY2hhbmdlbG9nLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgIFwiQ3VzdG9tIGNzcyBsaXZlIHVwZGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMFwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXHJcblxyXG4gICAgLyogQ29yZSAqL1xyXG4gICAgLyogPT09PT09ICovXHJcbiAgICBcIlB1YmxpYyBTZXJ2ZXJzXCI6ICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMVwiLCAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkhpZGUgQ2hhbm5lbHNcIjogICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtM1wiLCAgaW5mbzogXCJIaWRlIGNoYW5uZWxzIGluIG1pbmltYWwgbW9kZVwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtNlwiLCAgaW5mbzogXCJSZXBsYWNlIDEyaHIgdGltZXN0YW1wcyB3aXRoIHByb3BlciBvbmVzXCIsICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG5cclxuICAgIC8qIENvbnRlbnQgKi9cclxuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcblxyXG4gICAgLyogRGV2ZWxvcGVyICovXHJcbiAgICBcIkRldmVsb3BlciBNb2RlXCI6ICAgICAgICAgXHQgIHtpZDogXCJiZGEtZ3MtOFwiLCBpbmZvOiBcIkRldmVsb3BlciBNb2RlIFRvZ2dsZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJDb3B5IFNlbGVjdG9yXCI6XHRcdFx0ICB7aWQ6IFwiZm9yay1kbS0xXCIsIGluZm86IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG4gICAgXCJSZWFjdCBEZXZUb29sc1wiOlx0XHRcdCAge2lkOiBcInJlYWN0RGV2VG9vbHNcIiwgaW5mbzogXCJBZGRzIHJlYWN0IGRldmVsb3BlciB0b29scyB0byB0aGUgZGV2dG9vbHMuIE11c3QgYmUgaW5zdGFsbGVkIGluIEdvb2dsZSBDaHJvbWUgb24geW91ciBwYy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJMaWdodGNvcmQgQXBpXFxcIiBzZWN0aW9uLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRW5hYmxlIExpZ2h0Y29yZCBTZXJ2ZXJzXCI6ICAge2lkOiBcImxpZ2h0Y29yZC01XCIsIGluZm86IFwiRW5hYmxlIExpZ2h0Y29yZCdzIHNlcnZlcnMuIERpc2FibGluZyB0aGlzIHdpbGwgZGlzYWJsZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHRoZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJFbmFibGUgR2xhc3N0cm9uXCI6ICAgICAgICAgICB7aWQ6IFwiZW5hYmxlX2dsYXNzdHJvblwiLCBpbmZvOiBcIkVuYWJsZSBHbGFzc3Ryb24uIElmIHlvdSdyZSBub3QgdXNpbmcgdHJhbnNwYXJlbnQgdGhlbWVzLCB0aGlzIGNhbiByZWR1Y2UgbGFnLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcclxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cclxuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xyXG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxyXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbi8vICAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuLy8gICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuLy8gICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbi8vICAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4vLyAgICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4vLyAgICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4vLyAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuLy8gICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbi8vICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIH07XHJcblxyXG4vLyAgICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuLy8gICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuLy8gICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4vLyAgICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4vLyAgICAgLy8gICAgIH1cclxuXHJcbi8vICAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgLy8gfTtcclxuXHJcbi8vICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuLy8gICAgIH07XHJcbi8vIH1cclxuXHJcbi8vIHBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHMgfHwgW11cclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZmllbGRzIHx8IFtdKS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlLmluY2x1ZGVzKHNlYXJjaCkgfHwgZS5uYW1lLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICAgICB9KS5pbmNsdWRlcyh0cnVlKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH0pLmluY2x1ZGVzKHRydWUpXHJcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fX0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XHJcbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxyXG59OyIsIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cclxuXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5sZXQgc2VsZWN0b3JzXHJcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcclxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XHJcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXHJcbiAgICBsZXQgc2VsZWN0cyA9IFtdXHJcbiAgICBsZXQgdXNlclNldHRpbmdzQWNjb3VudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IEJETW9kdWxlcy5nZXQoZSA9PiB0eXBlb2YgZS5jaGlsZHJlbiA9PT0gXCJzdHJpbmdcIilbMF1cclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXHJcbiAgICBpZih1c2VyU2V0dGluZ3NBY2NvdW50KXtcclxuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgICAgICBzZWxlY3RzLnB1c2goYC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzU2VjdXJpdHkpfSAuJHtyZW1vdmVEYShjaGlsZHJlbi5jaGlsZHJlbil9ID4gZGl2Om50aC1jaGlsZCgyKWApXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxyXG4gICAgcmV0dXJuIHNlbGVjdHNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxyXG5cclxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcclxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcclxuJHtzZWxlY3RvcnMuam9pbihcIiwgXCIpfSB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBibHVyKDRweCk7XHJcbiAgICBvcGFjaXR5OiAuODtcclxufVxyXG5cclxuJHtzZWxlY3RvcnMubWFwKGUgPT4gZStcIjpob3ZlclwiKS5qb2luKFwiLCBcIil9ICB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IG5vbmU7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59YClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkNsYXNzTm9ybWFsaXplciA9IHRoaXNcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luQ2VydGlmaWVyLCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IHsgY2FwdHVyZVJlamVjdGlvblN5bWJvbCB9IGZyb20gXCJldmVudHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cclxuXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEV4dGVuc2lvbnMoKXtcclxuICAgICAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgbG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IEpTT04ucGFyc2UoZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSkpXHJcbiAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5rZXlzKGFkZG9uQ2FjaGUpXHJcbiAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgIGlmKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuXHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwidGltZXN0YW1wXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImhhc2hcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIG9mIHByb3BzKXtcclxuICAgICAgICAgICAgICAgIGlmKCEocHJvcC5rZXkgaW4gdmFsdWUpIHx8IHR5cGVvZiB2YWx1ZVtwcm9wLmtleV0gIT09IHByb3AudHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLmhhc2ggIT09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5yZXN1bHQuc3VzcGVjdCl7IC8vIHJlZmV0Y2ggZnJvbSByZW1vdGUgdG8gYmUgc3VyZSB5b3UncmUgdXAgdG8gZGF0ZS5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQWRkb25DYWNoZSgpe1xyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoSlNPTi5zdHJpbmdpZnkoYWRkb25DYWNoZSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gY29udGVudFR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSA9IGZzLndhdGNoKGJhc2VGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHJldHVybiBwbHVnaW5Nb2R1bGUudW5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5yZWxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5yZWxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xyXG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBpZiAobWV0YS5pbmRleE9mKFwiTUVUQVwiKSA8IDApIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxzLnRlc3RKU09OKHJhd01ldGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcGFyc2VkLmZvcm1hdCA9IFwianNvblwiO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gaXNQbHVnaW4gPyBvcmlnaW5hbEpTUmVxdWlyZSA6IG9yaWdpbmFsQ1NTUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyBzZWxmLnBsdWdpbnNGb2xkZXIgOiBzZWxmLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlscy5zdHJpcEJPTShjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBtZXRhLmFkZGVkID0gc3RhdHMuYXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5tb2RpZmllZCA9IHN0YXRzLm10aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XHJcbiAgICAgICAgICAgIGlmICghaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1ldGEuY3NzID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlscy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBsYWNlaG9sZGVyUGx1Z2luKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0TmFtZTogKCkgPT4ge3JldHVybiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZTt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcclxuICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiAoKSA9PiB7cmV0dXJuIGRhdGEubWVzc2FnZSA/IGRhdGEubWVzc2FnZSA6IFwiVGhpcyBwbHVnaW4gd2FzIHVuYWJsZSB0byBiZSBsb2FkZWQuIENoZWNrIHRoZSBhdXRob3IncyBwYWdlIGZvciB1cGRhdGVzLlwiO30sXHJcbiAgICAgICAgICAgICAgICBnZXRWZXJzaW9uOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgZmlsZW5hbWU6IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXHJcbiAgICAgICAgICAgIHdlYnNpdGU6IGRhdGEud2Vic2l0ZSA/IGRhdGEud2Vic2l0ZSA6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG5cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCB0cnVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZVtyZXN1bHQuaGFzaF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHdpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiB7bWVzc2FnZTogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIsIHN0YWNrOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIn19XHJcbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XHJcbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XHJcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hFeHRlbnNpb25zKClcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cclxuICAgIGxvYWRUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJ0aGVtZVwiKTt9XHJcbn07XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvbnRlbnRNYW5hZ2VyIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgTGlnaHRjb3JkTG9nbyBmcm9tIFwiLi4vc3ZnL2xpZ2h0Y29yZFwiO1xyXG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XHJcbmltcG9ydCBFbW9qaU1vZHVsZSBmcm9tIFwiLi9lbW9qaU1vZHVsZVwiXHJcbmltcG9ydCB7cmVtb3RlIGFzIGVsZWN0cm9ufSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5jb25zdCB7aXBjUmVuZGVyZXJ9ID0gcmVxdWlyZShcImVsZWN0cm9uXCIpO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxuICAgIC8vIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKERhdGFTdG9yZS5jb25maWdGaWxlKSk7XHJcbiAgICAvLyB0aGlzLmluaXQoKTtcclxufVxyXG5cclxubGV0IG1ldGhvZHNcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldE1ldGhvZHMgPSBmdW5jdGlvbihtKSB7XHJcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XHJcbiAgICBtZXRob2RzID0gbVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5oYXNTdGFydGVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5mbGF0KSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5FRCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIEVuaGFuY2VkRGlzY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dHJpYnV0ZXMuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgLypcclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IGJkQ29uZmlnLnVwZGF0ZXIgPyBiZENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBiZENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IGJkQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIFtgVGhlcmUgaXMgYW4gdXBkYXRlIGF2YWlsYWJsZSBmb3IgQmFuZGFnZWRCRCdzIEluamVjdG9yICgke2xhdGVzdExvY2FsVmVyc2lvbn0pLmAsIFwiWW91IGNhbiBlaXRoZXIgdXBkYXRlIGFuZCByZXN0YXJ0IG5vdywgb3IgbGF0ZXIuXCJdLCB7XHJcbiAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIlVwZGF0ZSBOb3dcIixcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJNYXliZSBMYXRlclwiLFxyXG4gICAgICAgICAgICBvbkNvbmZpcm06IGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9uVXBkYXRlRmFpbGVkID0gKCkgPT4ge1V0aWxzLmFsZXJ0KFwiQ291bGQgTm90IFVwZGF0ZVwiLCBgVW5hYmxlIHRvIHVwZGF0ZSBhdXRvbWF0aWNhbGx5LCBwbGVhc2UgZG93bmxvYWQgdGhlIGluc3RhbGxlciBhbmQgcmVpbnN0YWxsIG5vcm1hbGx5LjxiciAvPjxiciAvPjxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPmApO307XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZFVwZGF0ZSA9IGF3YWl0IHRoaXMudXBkYXRlSW5qZWN0b3IoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRpZFVwZGF0ZSkgcmV0dXJuIG9uVXBkYXRlRmFpbGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLnJlbGF1bmNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLmV4aXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9Ki9cclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgdGhpcy5pbml0U2V0dGluZ3MoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XHJcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcclxuICAgIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXHJcbiAgICBhd2FpdCBjb250ZW50TWFuYWdlci5sb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcclxuXHJcbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgYXRvYihEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIikpKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFBsdWdpbkNlcnRpZmllci5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIikubGVuZ3RoKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XHJcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkge1xyXG4gICAgICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XHJcbiAgICBpZiAoYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIGlmIChiYmRDaGFuZ2Vsb2cpIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0YWNobWVudC5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICBpZihiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCl7XHJcbiAgICAgICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIilcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpXHJcbiAgICBpZihsb2dvKXtcclxuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcclxuICAgICAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxyXG4gICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDQuODEsOS42N1Y2LjMzYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFBMy41MywzLjUzLDAsMCwwLDQ2LjIsM2MtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS42N2MwLDIuMjEsMS44OSwzLjMzLDMuNzcsMy4zM2EzLjg3LDMuODcsMCwwLDAsMy40NS0yLjE4bC0yLjEyLTFDNDcsMTEuMTcsNDQuODEsMTAuODUsNDQuODEsOS42N1pNMTAuNjgsMTIuODloMi40MVYzLjE3SDEwLjY4Wk03MS43NiwzLjE0SDY4LjE5VjcuMjNMNzAuNTcsOS40di00aDEuMjdjLjgxLDAsMS4yMS40MSwxLjIxLDF2M2MwLC42My0uMzgsMS4wNS0xLjIxLDEuMDVINjguMTh2Mi4zMWgzLjU3YzEuOTIsMCwzLjcyLTEsMy43Mi0zLjJWNi4zOUM3NS40OCw0LjEzLDczLjY4LDMuMTQsNzEuNzYsMy4xNFpNNTQuMjIsM2MtMiwwLTQsMS4xLTQsMy4zNFY5LjY2YzAsMi4yMywyLDMuMzQsNCwzLjM0czMuOTUtMS4xMSwzLjk1LTMuMzRWNi4zNEM1OC4xOSw0LjExLDU2LjIsMyw1NC4yMiwzWm0xLjU1LDYuNjZjMCwuNy0uNzgsMS4wNi0xLjU0LDEuMDZzLTEuNTUtLjM1LTEuNTUtMS4wNlY2LjM0YzAtLjcyLjc1LTEuMSwxLjUtMS4xczEuNTkuMzUsMS41OSwxLjFaTTY2Ljg0LDYuMzRjMC0yLjI5LTEuNTgtMy4yLTMuNTUtMy4ySDU5LjQ2djkuNzNoMi40NVY5Ljc3aC40M2wyLjIyLDMuMDloM0w2NSw5LjUyQzY2LjEzLDkuMTUsNjYuODQsOC4xNCw2Ni44NCw2LjM0Wk02My4zMyw3LjY1SDYxLjkxVjUuNDNoMS40MkExLjExLDEuMTEsMCwxLDEsNjMuMzMsNy42NVpNMjkuODMsMTNoMi40MlYzLjA2SDI5LjgzVjYuNzNsLTMsMFYzLjA5SDI0Ljd2OS43OGgyLjE0VjguNjhsMywwWk0xNy4xNiw5Ljc2VjYuNDJjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MWEzLjU1LDMuNTUsMCwwLDAtMy4zNi0yLjI0Yy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5Ljc2YzAsMi4yMSwyLDMuMTUsMy45LDMuMTVzMy41OC0xLDMuNTgtM1Y3LjU4SDE4Ljc5bDAsMS4zNkgyMC4zdi43N0MyMC4zLDEwLjkyLDE3LjE2LDEwLjk0LDE3LjE2LDkuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0yLjkzIC0zKVwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cclxuPC9zdmc+YFxyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgYXR0cmlic1BhdGNocyA9IFtdXHJcbiAgICB0aGlzLmNhbmNlbFBhdGNoQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcclxuICAgIFxyXG4gICAgLy8gVE9ETzogdHJ5IHRvIHBhdGNoIGNvcnJlY3RseSB0aGUgdXNlciBwb3BvdXQgb24gYSBuZXh0IHVwZGF0ZVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBlbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRGlzY29yZFRhZ1wiKVxyXG4gICAgLnRoZW4oRGlzY29yZFRhZyA9PiB7XHJcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XHJcbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJvcHMpe1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBEaXNjb3JkVGFnQ29tcChwcm9wcylcclxuXHJcbiAgICAgICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXHJcblxyXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIGtleTogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG5cclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW3JldHVyblZhbHVlXVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHByb3BzLnVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXHJcbiAgICAgICAgICAgIGxldCBkaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgY2hpbGRyZW4pXHJcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkaXZcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZSl7IC8vIHRoaXMgY2FuIGJlIGEgYmxvY2tlZCBtZXNzYWdlIChub3Qgb3BlbmVkKVxyXG4gICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wiZGF0YS1tZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICAgICAgfVxyXG4gICAgfX0pKVxyXG4gICAgICAgIC8qXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wibWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgfX0pKSovXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZXNDaGVja2VkID49IDUwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gTm8gZXh0ZXJuYWxzXHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSAmJiAhRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSl7XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnByb3RvdHlwZSAmJiBlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zKVxyXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBnZXRQcmVkaWNhdGVTZWN0aW9ucyA9IHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnNcclxuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldFByZWRpY2F0ZVNlY3Rpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG5cclxuICAgICAgICAgICAgaWYocmVzdWx0WzFdLnNlY3Rpb24gPT09IFwiTXkgQWNjb3VudFwiKXsgLy8gdXNlciBzZXR0aW5ncywgbm90IGd1aWxkIHNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5zZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIodGhpcykpXHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvcGVkLnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59O1xyXG5cclxuXHJcbmxldCBjbGFzc05hbWVMYXllclxyXG5sZXQgY2xhc3NOYW1lU29jaWFsTGlua3NcclxubGV0IGNsYXNzTmFtZU1vZGFsXHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTGF5ZXIpY2xhc3NOYW1lTGF5ZXIgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllclxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lU29jaWFsTGlua3MpY2xhc3NOYW1lU29jaWFsTGlua3MgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNvY2lhbExpbmtzICYmIHR5cGVvZiBlLnNvY2lhbExpbmtzID09PSBcInN0cmluZ1wiKVswXS5zb2NpYWxMaW5rc1xyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVTb2NpYWxMaW5rcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSAmJiBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIjYWNlX3NldHRpbmdzbWVudVwiKSkgbm9kZS5pZCA9IFwiYWNlX3NldHRpbmdzbWVudV9jb250YWluZXJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEVtb2ppIFBpY2tlclxyXG4gICAgICAgICAgICAvL25vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpXHJcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIVRhYkJhcikgcmV0dXJuO1xyXG4gICAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcclxuICAgICAgICBpZiAoQW5jaG9yKSB7XHJcbiAgICAgICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdXHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lQ29sb3JNdXRlZCxcclxuICAgICAgICAgICAgc2l6ZXMsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZVZlcnNpb25IYXNoXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JNdXRlZClbMF0uY29sb3JNdXRlZCxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBjb25zdCB2ZXJzaW9uSGFzaCA9IGAoJHtiZENvbmZpZy5oYXNoID8gYmRDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBiZENvbmZpZy5icmFuY2h9KWA7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgTGlnaHRjb3JkICR7ZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIGAoJHsoZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLmNvbW1pdCB8fCBcIlVua25vd25cIikuc2xpY2UoMCwgNyl9KWApKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgQkJEICR7YmJkVmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgdmVyc2lvbkhhc2gpKVxyXG4gICAgICAgIF1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzaW9ucyA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgfTtcclxuICAgIH19KTtcclxufTtcclxuXHJcbmNvbnN0IGdldEd1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xyXG4gICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xyXG4gICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYmxvYkNvbnRhaW5lclwiKTtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRDbGFzc2VzID0gZ2V0R3VpbGRDbGFzc2VzKCk7XHJcbiAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IGJsb2JDbGFzcyA9IEd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBCRFYyLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xyXG4gICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSBjbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIGNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSBjbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSBjbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWVcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRQaWxscyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgIW0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQudG9TdHJpbmcgJiYgbS5kZWZhdWx0LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJ0cmFuc2xhdGUzZFwiKSk7XHJcbiAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuWzNdLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuQXR0YWNobWVudFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBBdHRhY2htZW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXR0YWNobWVudFwiKVswXSAvLyB0ZW1wb3JhcnlcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIUF0dGFjaG1lbnQgfHwgIUF0dGFjaG1lbnQuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5BdHRhY2htZW50UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChBdHRhY2htZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSlyZXR1cm5cclxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0gfHwgbnVsbFxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdHRhY2htZW50IHx8ICFhdHRhY2htZW50LnVybClyZXR1cm5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcclxuICAgICAgICB9KSlcclxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXHJcbiAgICB9fSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcclxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXHJcbiAgICAgICAgaWYoZGl2LmNoaWxkTm9kZXMubGVuZ3RoKXJldHVyblxyXG4gICAgICAgIGxldCBibG9ja0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICBibG9ja0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoYmxvY2tEaXYpXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG5cclxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxyXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XHJcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkgXHJcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcclxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XHJcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xyXG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcclxuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xyXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSAvKnJlcXVpcmUoXCJyZXF1ZXN0XCIpOyovIG51bGxcclxuXHJcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XHJcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcclxuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcclxuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcclxuXHJcbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcclxuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XHJcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG5cclxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcclxuXHJcbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcclxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcclxuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXHJcbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTtcclxuXHJcbi8qKlxyXG4gKiBEb24ndCBleHBvc2UgY29yZSAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImNvbnN0IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fID0gd2luZG93LnJlcXVpcmVcclxuXHJcbmltcG9ydCB7YmRDb25maWd9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCByZWxlYXNlQ2hhbm5lbCA9IERpc2NvcmROYXRpdmUuZ2xvYmFscyA/IERpc2NvcmROYXRpdmUuZ2xvYmFscy5yZWxlYXNlQ2hhbm5lbCA6IERpc2NvcmROYXRpdmUuYXBwID8gRGlzY29yZE5hdGl2ZS5hcHAuZ2V0UmVsZWFzZUNoYW5uZWwoKSA6IFwic3RhYmxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGF0YVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHtzZXR0aW5nczoge3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGEgPSB7fTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGF0YVN0b3JlID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuQkRGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLkJERmlsZSwgXCJiaW5hcnlcIikpXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnNldHRpbmdzRmlsZSkpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IHNldHRpbmdzID0gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHtbcmVsZWFzZUNoYW5uZWxdOiBzZXR0aW5nc30pO1xyXG4gICAgICAgICAgICBlbHNlIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRCRERhdGEoXCJzZXR0aW5nc1wiLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICBVdGlscy5hbGVydChcIkNvcnJ1cHQgU3RvcmFnZVwiLCBcIlRoZSBiZCBzdG9yYWdlIGhhcyBzb21laG93IGJlY29tZSBjb3JydXB0LiBZb3UgbWF5IGVpdGhlciB0cnkgdG8gc2FsdmFnZSB0aGUgZmlsZSBvciBkZWxldGUgaXQgdGhlbiByZWxvYWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5qZWN0aW9uUGF0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdGlvblBhdGgpIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlYWxMb2NhdGlvbiA9IGZzLmV4aXN0c1N5bmMobG9jYXRpb24pID8gbG9jYXRpb24gOiBmcy5leGlzdHNTeW5jKHJvYW1pbmdMb2NhdGlvbikgPyByb2FtaW5nTG9jYXRpb24gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVhbExvY2F0aW9uKSByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSByZWFsTG9jYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZ0ZpbGUoKSB7cmV0dXJuIHRoaXMuX2NvbmZpZ0ZpbGUgfHwgKHRoaXMuX2NvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5pbmplY3Rpb25QYXRoLCBcImJldHRlcmRpc2NvcmRcIiwgXCJjb25maWcuanNvblwiKSk7fVxyXG4gICAgZ2V0IEJERmlsZSgpIHtyZXR1cm4gdGhpcy5fQkRGaWxlIHx8ICh0aGlzLl9CREZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzdG9yYWdlLmpzb25cIikpO31cclxuICAgIGdldCBzZXR0aW5nc0ZpbGUoKSB7cmV0dXJuIHRoaXMuX3NldHRpbmdzRmlsZSB8fCAodGhpcy5fc2V0dGluZ3NGaWxlID0gcGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoLCBcImJkc2V0dGluZ3MuanNvblwiKSk7fVxyXG4gICAgZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBwbHVnaW5OYW1lICsgXCIuY29uZmlnLmpzb25cIik7fVxyXG5cclxuICAgIGdldFNldHRpbmdHcm91cChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2V0dGluZ0dyb3VwKGtleSwgZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QkREYXRhKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XSB8fCBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJERGF0YShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJiaW5hcnlcIik7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2TW9kZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRlYnVnTGlzdGVuZXIgPSB0aGlzLmRlYnVnTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyID0gdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSB0aGlzLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0RGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wRGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0Q29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wQ29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0xpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjWyVjRGV2TW9kZSVjXSAlY0JyZWFrL1Jlc3VtZVwiLCBcImNvbG9yOiByZWQ7XCIsIFwiY29sb3I6ICMzMDMwMzA7IGZvbnQtd2VpZ2h0OjcwMDtcIiwgXCJjb2xvcjpyZWQ7XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1kZWJ1Z2dlclxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb3B5U2VsZWN0b3JMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoZS50YXJnZXQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgICAgICBjbGFzc0xheWVyLCBcclxuICAgICAgICAgICAgICAgIGNsYXNzSXRlbXNcclxuICAgICAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5kaXNhYmxlZFBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tZW51KVswXVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XHJcbiAgICAgICAgICAgICAgICBpZighY2xhc3NJdGVtcyB8fCAhY2xhc3NMYXllci5sYXllcilyZXR1cm4gY29uc29sZS5sb2coY2xhc3NJdGVtcywgY2xhc3NMYXllci5sYXllcilcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY20gPSBET00ucXVlcnkoXCIuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5tZW51KSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudCA+IC5cIitVdGlscy5yZW1vdmVEYShjbGFzc0xheWVyLmxheWVyQ29udGFpbmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzTGF5ZXIubGF5ZXJ9XCI+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY20gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5tZW51fSAke2NsYXNzSXRlbXMuc3R5bGVGbGV4aWJsZX0gJHtjbGFzc0l0ZW1zLmFjY29tbW9kYXRlU2Nyb2xsYmFyfSBiZC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIlwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5hcHBlbmQoY20pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY21XcmFwKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gZS5jbGllbnRZICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibWVudVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmlkID0gXCJiZC1jb3B5LXNlbGVjdG9yLWNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ29weSBTZWxlY3RvciBBY3Rpb25zXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ2xhc3NlcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc2Nyb2xsZXJXcmFwKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlckNsYXNzZXMudGhlbWVHaG9zdEhhaXJsaW5lfVwiPjwvZGl2PmApXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXIpWzBdLnNjcm9sbGVyfSAke2NsYXNzSXRlbXMuc2Nyb2xsZXJ9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlcldyYXAuYXBwZW5kKHNjcm9sbGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZChzY3JvbGxlcldyYXApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNNID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY21XcmFwLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBjbS5wYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gY20uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWcgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwiZ3JvdXBcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWkgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5pdGVtfSAke2NsYXNzSXRlbXMubGFiZWxDb250YWluZXJ9ICR7Y2xhc3NJdGVtcy5jb2xvckRlZmF1bHR9XCIgcm9sZT1cIm1lbnVpdGVtXCIgaWQ9XCJiZC1jb3B5LXNlbGVjdG9yLWl0ZW0tY21cIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubGFiZWx9XCI+Q29weSBTZWxlY3RvcjwvZGl2PmApKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuTmF0aXZlTW9kdWxlLmNvcHkoc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBET00ucXVlcnlBbGwoXCJkaXZbcm9sZT1tZW51aXRlbV0uXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyAmJiBlbGVtZW50cy5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5hZGQoY2xhc3NJdGVtcy5mb2N1c2VkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21nLmFwcGVuZChjbWkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc2Nyb2xsZXIuY2hpbGROb2Rlcy5sZW5ndGgpeyAvLyBhcGVuZCBhIHNlcGFyYXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5zZXBhcmF0b3J9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKGNtZyk7XHJcbiAgICAgICAgICAgICAgICBpZihjbVdyYXAuY2xpZW50SGVpZ2h0IDwgY21XcmFwLnNjcm9sbEhlaWdodCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZyBcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSAoY21XcmFwLnN0eWxlLnRvcCAtIGNtZy5jbGllbnRIZWlnaHQpICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmdcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgc2V0VGltZW91dChhdHRhY2gsIDEpO1xyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RvcihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHJldHVybiBgIyR7ZWxlbWVudC5pZH1gO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGxQYXRoKGVsKXtcclxuICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChlbC5wYXJlbnROb2RlKXtcclxuICAgICAgICAgICAgICBpZiAoZWwuaWQpe1xyXG4gICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdCgnIycrZWwuaWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWw9PWVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKStBcnJheS5mcm9tKGVsLmNsYXNzTGlzdC5lbnRyaWVzKCkpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYz0xLGU9ZWw7ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2U9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLGMrKyk7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKygodHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbC5jbGFzc05hbWUpIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhIWUpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikrXCI6bnRoLWNoaWxkKFwiK2MrXCIpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWw9ZWwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oXCIgPiBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdWxsUGF0aChlbGVtZW50KVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gOyovXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy9pZiAod2luZG93LmdldE1hdGNoZWRDU1NSdWxlcykgcmV0dXJuIHdpbmRvdy5nZXRNYXRjaGVkQ1NTUnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3Qgc2hlZXRzID0gWy4uLmNzc10uZmlsdGVyKHMgPT4gIXMuaHJlZiB8fCAhcy5ocmVmLmluY2x1ZGVzKFwiQmV0dGVyRGlzY29yZEFwcFwiKSk7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSBzaGVldHMubWFwKHMgPT4gWy4uLihzLmNzc1J1bGVzIHx8IFtdKV0pLmZsYXQoKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50UnVsZXMgPSBydWxlcy5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4ICYmICFyLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmluY2x1ZGVzKFwiKlwiKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRSdWxlcztcclxuICAgIH1cclxufTsiLCJleHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzYWJsZVR5cGluZyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5zdGFydFR5cGluZylcclxuICAgICAgICAudGhlbih0eXBpbmdNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXNcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdGFydFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdGFydFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdG9wVHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZ1xyXG4gICAgICAgICAgICB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0b3BUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXNhYmxlVHlwaW5nID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJ1Z0h1bnRlckJhZGdlIGZyb20gXCIuLi9zdmcvYnVnX2h1bnRlclwiXHJcbmltcG9ydCBMaWdodGNvcmRVc2VyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9MaWdodGNvcmRVc2VyXCI7XHJcbmltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgeyBzZXR0aW5nc0Nvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ2lyY3VzIGZyb20gXCIuLi9zdmcvY2lyY3VzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KCkgeyAvLyBHZW5lcmF0ZSBVVUlEIChObyBjcnlwdG8gcm5nKVxyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24oYykge1xyXG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxufSAgXHJcblxyXG5jb25zdCBhd2FpdGluZ0JhZGdlc1Byb21pc2VzID0ge31cclxubGV0IGJhZGdlc1RvRmV0Y2ggPSBbXVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc3RhbnRTZXJ2ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLl9jYWNoZSA9IHtcclxuICAgICAgICAgICAgYmFkZ2VzOiB7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EaXN0YW50U2VydmVyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYWNoZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZVxyXG4gICAgfVxyXG5cclxuICAgIHNldCBjYWNoZShkYXRhKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdGhpcy5fY2FjaGUgIT09IFwib2JqZWN0XCIpcmV0dXJuIHRoaXMuX2NhY2hlID0gZGF0YVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZSA9IE9iamVjdC5hc3NpZ24odGhpcy5fY2FjaGUsIGRhdGEpXHJcbiAgICB9LypcclxuXHJcbiAgICBhc3luYyBkZWxldGUoKXtcclxuICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJEZWxldGluZyBhbGwgaW5mb3MgYWJvdXQgeW91IG9uIExpZ2h0Y29yZCBTZXJ2ZXJzLi4uXCIsIHt0eXBlOiBcIndhcm5cIn0pXHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlcXVlc3QoUm91dGVzLmRlbGV0ZSwgXCJkZWxldGVcIilcclxuICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCwgY291bGRuJ3QgZGVsZXRlIGluZm9ybWF0aW9ucy4gU2VlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3NcIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGRlbGV0ZSBhbGwgaW5mb3JtYXRpb25zOiAkeyhyZXMuc3RhdHVzK1wiIFwiK3Jlcy5zdGF0dXNUZXh0K1wiIFwiK2F3YWl0IHJlcy50ZXh0KCkpfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBTdWNjZXNmdWxseSBkZWxldGVkIGluZm9ybWF0aW9ucy5gKVxyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJTdWNjZXNmdWxseSBkZWxldGVkIGluZm9ybWF0aW9uc1wiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uID0gbnVsbFxyXG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgQmRBcGkuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCwgY291bGRuJ3QgZGVsZXRlIGluZm9ybWF0aW9ucy4gU2VlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3NcIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7ZXJyLnN0YWNrfWApXHJcbiAgICAgICAgfSlcclxuICAgIH0qL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuXHJcbiAgICAgICAgbGV0IHJlc29sdmVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXHJcblxyXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pcmV0dXJuIHJlc29sdmUoW10pXHJcbiAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2gucHVzaChbdXNlciwgcmVzb2x2ZV0pXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gYmFkZ2VzVG9GZXRjaFxyXG4gICAgICAgICAgICAgICAgaWYodXNlcnMubGVuZ3RoID09PSAwKXJldHVyblxyXG4gICAgICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5iYWRnZXMsIFwiUE9TVFwiLCBKU09OLnN0cmluZ2lmeSh1c2Vycy5tYXAoZSA9PiBlWzBdKSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBzZXJ2ZXIgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIShlcnIgaW5zdGFuY2VvZiBMaWdodGNvcmRFcnJvcikpY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cclxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICB9LCA2MDAwMDApO1xyXG5cclxuICAgICAgICByZXNvbHZlKGJhZGdlcylcclxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG4gICAgICAgIHJldHVybiBiYWRnZXNcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xyXG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihkYXRhID8ge1xyXG4gICAgICAgICAgICBib2R5OiBkYXRhXHJcbiAgICAgICAgfSA6IHt9KVxyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5elwiLFxyXG4gICAgYmFkZ2VzOiBbIC8vIFRPRE86IEFkZCBtb3JlIGJhZGdlcyArIHNlcnZlciBzaWRlIHN2Z1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxyXG4gICAgICAgICAgICAgICAgXCI2OTYwMDM0NTY2MTEzODUzOTZcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzI2J1Z19odW50ZXJcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJCdWZmb29uXCIsXHJcbiAgICAgICAgICAgIGlkOiBcIjA2OTA0ZDMxLTY1YjQtNDFlYy1hNTBjLTg2NThiYmQxYWY5NlwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiMzg5MDE2ODk1NTQzNzA1NjAyXCIsXHJcbiAgICAgICAgICAgICAgICBcIjY2NDYwMDEzNDUyODY2MzU2NVwiLFxyXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3lvdXR1LmJlL0VKdGI2ei1kbFQ4P3Q9MTQ1XCJcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XHJcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYFxyXG59IiwiLyoqXHJcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXHJcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxyXG4gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxyXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXHJcbiAqIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcclxuICogSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEFcclxuICogUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxyXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcclxuICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFXHJcbiAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxyXG4gKiBcclxuICogRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQkRQbHVnaW5MaWJyYXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQG5hbWUgT2Zmc2V0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUb3Agb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IC0gUmlnaHQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIExlZnQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIE91dGVyIGhlaWdodCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICovXHJcblxyXG4gLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSByZW1vdmVzIGFkZGVkIGxpc3RlbmVyLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyXHJcbiAqL1xyXG4gXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVRvb2xzIHtcclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcclxuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGFzIHRoZSBlbGVtZW50IGlkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNzcyAtIGNzcyB0byBhZGQgdG8gdGhlIGRvY3VtZW50XHJcblx0ICovXHJcblx0c3RhdGljIGFkZFN0eWxlKGlkLCBjc3MpIHtcclxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKERPTVRvb2xzLmNyZWF0ZUVsZW1lbnQoYDxzdHlsZSBpZD1cIiR7aWR9XCI+JHtjc3N9PC9zdHlsZT5gKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgc3R5bGUgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVN0eWxlKGlkKSB7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGRzL3JlcXVpcmVzIGEgcmVtb3RlIHNjcmlwdCB0byBiZSBsb2FkZWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGhpcyBzY3JpcHRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIGZyb20gd2hpY2ggdG8gbG9hZCB0aGUgc2NyaXB0XHJcblx0ICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkXHJcblx0ICovXHJcblx0c3RhdGljIGFkZFNjcmlwdChpZCwgdXJsKSB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcblx0XHRcdGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcblx0XHRcdHNjcmlwdC5pZCA9IGlkO1xyXG5cdFx0XHRzY3JpcHQuc3JjID0gdXJsO1xyXG5cdFx0XHRzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcblx0XHRcdHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xyXG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzY3JpcHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgcmVtb3RlIHNjcmlwdCBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU2NyaXB0KGlkKSB7XHJcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gaHR0cHM6Ly9qYXZhc2NyaXB0LmluZm8vanMtYW5pbWF0aW9uXHJcbiAgICBzdGF0aWMgYW5pbWF0ZSh7dGltaW5nID0gXyA9PiBfLCB1cGRhdGUsIGR1cmF0aW9ufSkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgIFxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcclxuICAgICAgICAgIC8vIHRpbWVGcmFjdGlvbiBnb2VzIGZyb20gMCB0byAxXHJcbiAgICAgICAgICBsZXQgdGltZUZyYWN0aW9uID0gKHRpbWUgLSBzdGFydCkgLyBkdXJhdGlvbjtcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPiAxKSB0aW1lRnJhY3Rpb24gPSAxO1xyXG4gICAgICBcclxuICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGVcclxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGltaW5nKHRpbWVGcmFjdGlvbik7XHJcbiAgICAgIFxyXG4gICAgICAgICAgdXBkYXRlKHByb2dyZXNzKTsgLy8gZHJhdyBpdFxyXG4gICAgICBcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPCAxKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgbXkgc2hpdCB2ZXJzaW9uIG9mIG5vdCBoYXZpbmcgdG8gdXNlIGAkYCBmcm9tIGpRdWVyeS4gTWVhbmluZ1xyXG4gICAgICogdGhhdCB5b3UgY2FuIHBhc3MgYSBzZWxlY3RvciBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5fS5cclxuICAgICAqIEl0IGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIHBhc3MgYSBzdHJpbmcgb2YgaHRtbCBhbmQgaXQgd2lsbCBwZXJmb3JtIGFuZCByZXR1cm4gYHBhcnNlSFRNTGAuXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUxcclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeSBvciBIVE1MIHRvIHBhcnNlXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIEVpdGhlciB0aGUgcmVzdWx0IG9mIGBwYXJzZUhUTUxgIG9yIGBxdWVyeWBcclxuICAgICAqL1xyXG4gICAgc3RhdGljIFEoc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUhUTUwoc2VsZWN0b3IpO1xyXG4gICAgICAgIGNvbnN0IGlzSFRNTCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCA/IEFycmF5LmZyb20oZWxlbWVudCkuc29tZShuID0+IG4ubm9kZVR5cGUgPT09IDEpIDogZWxlbWVudC5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICBpZiAoaXNIVE1MKSByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBmb3VuZCBlbGVtZW50IG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeShzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbGAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gQXJyYXkgb2YgYWxsIGZvdW5kIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeUFsbChzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBvZiBIVE1MIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLFxyXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXHJcbiAgICAgKiBUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXkgY2FuIHRoZW4gYmUgYXBwZW5kZWQgYWxsIGF0IG9uY2UgdG8gYW5vdGhlciBub2RlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXHJcbiAgICAgKiBub2RlcyBhbmQgdGhlcmUgd2VyZSBtdWx0aXBsZSB0b3AgbGV2ZWwgbm9kZXMsIG90aGVyd2lzZSB0aGUgc2luZ2xlIG5vZGUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIEhUTUwgdG8gYmUgcGFyc2VkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBUaGUgcmVzdWx0IG9mIEhUTUwgcGFyc2luZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBpZiAoZnJhZ21lbnQpIHJldHVybiBub2RlO1xyXG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/IG5vZGUuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2Rlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWx0ZXJuYXRlIG5hbWUgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MfSAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge3JldHVybiB0aGlzLnBhcnNlSFRNTChodG1sLCBmcmFnbWVudCk7fVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGVzY2FwZXMgaXQgdXNpbmcgdGhlIGJyb3dlcidzIG93biBlc2NhcGluZyBtZWNoYW5pc20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIGh0bWwgdG8gYmUgZXNjYXBlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXNjYXBlSFRNTChodG1sKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcclxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xyXG4gICAgICAgIHNwYW5FbGVtZW50LmFwcGVuZCh0ZXh0Tm9kZSk7XHJcbiAgICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gc3BhbkVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gYWRkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZGRDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIHJlbW92ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudDogVG9nZ2xlIGNsYXNzIHZhbHVlO1xyXG4gICAgICogaS5lLiwgaWYgY2xhc3MgZXhpc3RzIHRoZW4gcmVtb3ZlIGl0IGFuZCByZXR1cm4gZmFsc2UsIGlmIG5vdCwgdGhlbiBhZGQgaXQgYW5kIHJldHVybiB0cnVlLlxyXG4gICAgICogV2hlbiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50OlxyXG4gICAgICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYWRkIHNwZWNpZmllZCBjbGFzcyB2YWx1ZSwgYW5kIGlmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwgcmVtb3ZlIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHRvZ2dsZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5kaWNhdG9yXSAtIE9wdGlvbmFsIGluZGljYXRvciBmb3IgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSB0b2dnbGVkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUsIGluZGljYXRvcikge1xyXG4gICAgICAgIGNsYXNzbmFtZSA9IGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBpZiAodHlwZW9mKGluZGljYXRvcikgIT09IFwidW5kZWZpbmVkXCIpIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMsIGluZGljYXRvcikpO1xyXG4gICAgICAgIGVsc2UgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYykpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaGFzIGEgc3BlY2lmaWMgY2xhc3NcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gYHRydWVgIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKS5ldmVyeShjID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIG9uZSBjbGFzcyB3aXRoIGFub3RoZXJcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gcmVwbGFjZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBmb3IgdGhlIGNsYXNzXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXBsYWNlQ2xhc3MoZWxlbWVudCwgb2xkTmFtZSwgbmV3TmFtZSkge1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2Uob2xkTmFtZSwgbmV3TmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgYXBwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBhcHBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFwcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUuYXBwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIHByZXBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIHByZXBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLnByZXBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50Lmluc2VydEFmdGVyKG90aGVyRWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXROb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbnNlcnRBZnRlcih0aGlzTm9kZSwgdGFyZ2V0Tm9kZSkge1xyXG4gICAgICAgIHRhcmdldE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc05vZGUsIHRhcmdldE5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50LmFmdGVyKG5ld0VsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWZ0ZXIodGhpc05vZGUsIG5ld05vZGUpIHtcclxuICAgICAgICB0aGlzTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCB0aGlzTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBuZXh0IHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIrIFwiICsgc2VsZWN0b3IpIDogZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzdWJzZXF1ZW50IHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgbmV4dCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0QWxsKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwifiAqXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc3Vic2VxdWVudCBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0VW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIG5leHQucHVzaChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJldmlvdXMgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHJldHVybiBwcmV2aW91cyAmJiBwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSA/IHByZXZpb3VzIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBwcmVjZWVkaW5nIHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c0FsbChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZWNlZWRpbmcgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCB3aGljaCBpbmRleCBpbiBjaGlsZHJlbiBhIGNlcnRhaW4gbm9kZSBpcy4gU2ltaWxhciB0byBqUXVlcnkncyBgJC5pbmRleCgpYFxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbmQgaXRzIGluZGV4IGluIHBhcmVudFxyXG4gICAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5vZGVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluZGV4SW5QYXJlbnQobm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgbGV0IG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5pbmRleEluUGFyZW50fSAqL1xyXG4gICAgc3RhdGljIGluZGV4KG5vZGUpIHtyZXR1cm4gdGhpcy5pbmRleEluUGFyZW50KG5vZGUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCBpZiBpdCBtYXRjaGVzIHRoZSBzZWxlY3RvcixcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwYXJlbnQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgc2libGluZyBlbGVtZW50IG9yIG51bGxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gIXNlbGVjdG9yIHx8IGVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IGVsZW1lbnQucGFyZW50RWxlbWVudCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGFuY2VzdG9ycyBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHBhcmVudHMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgcGFyZW50cyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIGlmIChzZWxlY3Rvcikgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKTtcclxuICAgICAgICBlbHNlIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFuY2VzdG9ycyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGFuY2VzdG9ycyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmICFlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHNpYmxpbmdzIG9mIHRoZSBlbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiKlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBzaWJsaW5ncyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaWJsaW5ncyhlbGVtZW50LCBzZWxlY3RvciA9IFwiKlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoZSA9PiBlICE9IGVsZW1lbnQgJiYgZS5tYXRjaGVzKHNlbGVjdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgY3NzIHN0eWxlcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHN0eWxlIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBzdHlsZS4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIEF0dHJpYnV0ZSB0byBnZXQgb3Igc2V0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFZhbHVlIHRvIHNldCBmb3IgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY3NzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbYXR0cmlidXRlXTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgd2lkdGggZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSB3aWR0aCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgd2lkdGguICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gV2lkdGggdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd2lkdGgoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS53aWR0aCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBoZWlnaHQgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBoZWlnaHQgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGhlaWdodC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBIZWlnaHQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGVpZ2h0KGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0KTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5uZXIgdGV4dCBvZiBhbiBlbGVtZW50IGlmIGdpdmVuIGEgdmFsdWUsIG90aGVyd2lzZSByZXR1cm5zIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIHRleHQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBDb250ZW50IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBFaXRoZXIgdGhlIHN0cmluZyBzZXQgYnkgdGhpcyBjYWxsIG9yIHRoZSBjdXJyZW50IHRleHQgY29udGVudCBvZiB0aGUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRleHQoZWxlbWVudCwgdGV4dCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGV4dCkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHBhZ2UuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBvZmZzZXQgb2ZcclxuICAgICAqIEByZXR1cm4ge09mZnNldH0gLSBUaGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmZzZXQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbGlzdGVuZXJzKCkgeyByZXR1cm4gdGhpcy5fbGlzdGVuZXJzIHx8ICh0aGlzLl9saXN0ZW5lcnMgPSB7fSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb25gIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyBvbmNlLlxyXG4gICAgICogYGNvbnN0IGNhbmNlbCA9IERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiZmlyZWQhXCIpOyBjYW5jZWwoKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbmFsaXR5IGZvciB0aGlzIG1ldGhvZCBtYXRjaGVzIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub259IGJ1dCBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXRzZWxmXHJcbiAgICAgKiBhbmQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIgdXBvbiB0aGUgZmlyc3QgZmlyaW5nIG9mIHRoZSBkZXNpcmVkIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbmNlKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9IDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIF9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgbGV0IG1hdGNoRmlsdGVyID0gbGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT0gdHlwZSwgZGVmYXVsdEZpbHRlciA9IF8gPT4gXztcclxuICAgICAgICBpZiAoZWxlbWVudCkgbWF0Y2hGaWx0ZXIgPSBsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCwgZGVmYXVsdEZpbHRlciA9IGwgPT4gbC5lbGVtZW50ID09IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSB8fCBbXTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA/IGxpc3RlbmVycy5maWx0ZXIobWF0Y2hGaWx0ZXIpIDogbGlzdGVuZXJzLmZpbHRlcihkZWZhdWx0RmlsdGVyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGxpc3QubGVuZ3RoOyBjKyspIGxpc3RbY10uY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvZmZgIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVkIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGlja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBjbGljayBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCJjbGljay5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KEVsZW1lbnR8c3RyaW5nKX0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVtb3ZlIGxpc3RlbmVyIGZyb21cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRdIC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gW2RlbGVnYXRlXSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBvcmlnaW5hbCBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2ZmKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVsZW1lbnQpID09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG5vZGUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBib2R5LlxyXG4gICAgICogVGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB1cG9uIGZpcmluZy5cclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHRvIHdhaXQgZm9yXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBldmVudFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvbk1vdW50IC0gZGV0ZXJtaW5lcyBpZiBpdCBzaG91bGQgZmlyZSBvbiBNb3VudCBvciBvbiBVbm1vdW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBvbk1vdW50ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci51bnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrLCBtdXRhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShvbk1vdW50ID8gbXV0YXRpb24uYWRkZWROb2RlcyA6IG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGB0cnVlYCAqL1xyXG4gICAgc3RhdGljIG9uTW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGBmYWxzZWAgKi9cclxuICAgIHN0YXRpYyBvblVubW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25BZGRlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50KG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vblVubW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uVW5tb3VudChub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgbXVsdGlwbGUgZWxlbWVudHMgaW50byBvbmUgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8SFRNTEVsZW1lbnQ+fSBlbGVtZW50cyAtIGFycmF5IG9mIGVsZW1lbnRzIHRvIHB1dCBpbnRvIGEgc2luZ2xlIHBhcmVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd3JhcChlbGVtZW50cykge1xyXG4gICAgICAgIGNvbnN0IGRvbVdyYXBwZXIgPSB0aGlzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImRvbS13cmFwcGVyXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBlbGVtZW50cy5sZW5ndGg7IGUrKykgZG9tV3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50c1tlXSk7XHJcbiAgICAgICAgcmV0dXJuIGRvbVdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvbHZlcyB0aGUgbm9kZSB0byBhbiBIVE1MRWxlbWVudC4gVGhpcyBpcyBtYWlubHkgdXNlZCBieSBsaWJyYXJ5IG1vZHVsZXMuXHJcbiAgICAgKiBAcGFyYW0geyhqUXVlcnl8RWxlbWVudCl9IG5vZGUgLSBub2RlIHRvIHJlc29sdmVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlc29sdmVFbGVtZW50KG5vZGUpIHtcclxuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRE9NID0gRE9NVG9vbHMiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcclxufVxyXG5cclxubGV0IEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXVxyXG5sZXQgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVswXVxyXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxyXG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdXHJcbmxldCBndWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVswXVxyXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb2ppTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5pbml0KCkuY2F0Y2goZXJyID0+IFV0aWxzLmVycihcIkVtb2ppTW9kdWxlXCIsIFwiQW4gZXJyb3Igb2NjdXJlZFwiLCBlcnIpKSAvLyBiZXR0ZXIgbG9nZ2luZ1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKXtcclxuICAgICAgICAvKiogRW1vamkgQXV0b0NvbXBsZXRlICovXHJcbiAgICAgICAgaWYoIUF1dG9jb21wbGV0ZU1vZHVsZSlBdXRvY29tcGxldGVNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpXHJcbiAgICAgICAgaWYoIUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpXHJcbiAgICAgICAgaWYoIUVtb2ppTW9kdWxlUXVlcnkpRW1vamlNb2R1bGVRdWVyeSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylcclxuICAgICAgICBpZighTWVzc2FnZXMpTWVzc2FnZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVxyXG4gICAgICAgIGlmKCFndWlsZE1vZHVsZSlndWlsZE1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylcclxuICAgICAgICBpZighZW1vamlTZWFyY2gpZW1vamlTZWFyY2ggPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbiAgICAgICAgaWYoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgICBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zID0gZnVuY3Rpb24oZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW1vamlVc2FibGUoY29uZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHModCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gRW1vamlNb2R1bGVRdWVyeS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKHQsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRChlLCB0LCBhLmVtb2ppcywgbiwgciwgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORywgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSSwgQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuRW1vamksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRpbmVsOiBcIi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsZDogbnVsbCAhPSBlLmd1aWxkSWQgPyBndWlsZE1vZHVsZS5kZWZhdWx0LmdldEd1aWxkKGUuZ3VpbGRJZCkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5UZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFJhd1RleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3Qgc3RhcnQgYXV0b2NvbXBsZXRpb24gb2YgTGlnaHRjb3JkJ3MgZW1vamlzLlwiKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBFbW9qaSBkaXNwbGF5ICovXHJcbiAgICAgICAgd2hpbGUgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKXsgLy8gVE9ETzogUHJvcGVyIGVtb2ppIGZvcm1hdHRpbmcgLyByZW5kZXJpbmdcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2VcIilcclxuICAgICAgICAgICAgICAgIGlmKCFtZXNzYWdlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50XCIpXHJcbiAgICAgICAgICAgICAgICBpZighY29udGVudCB8fCAhY29udGVudC5sZW5ndGgpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge3tcclxuICAgICAgICAgICAgICAgICAqICByYXc6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgaWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBhbmltYXRlZDogYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgICogfVtdfVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgZW1vamlzID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IFtdXHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IG5vZGUgb2YgY29udGVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1BhcnNlZCA9IGZhbHNlXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBDb25zdGFudHMuRW1vamlSZWdleC5leGVjKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJzZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighRW1vamlNb2R1bGVBcGkpRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IEVtb2ppTW9kdWxlQXBpLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKHBhcnNlZFsyXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVtb2ppKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBwYXJzZWRbMF0uc3RhcnRzV2l0aChcIjxhXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXJzZWRbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYXJzZWRbMl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBhcnNlZCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZihoYXNQYXJzZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXdvcmQpcmV0dXJuIFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gZW1vamlzLmZpbmQoZSA9PiBlLnJhdyA9PSB3b3JkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVtb2ppKXJldHVybiB3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighQ3VzdG9tRW1vamlNb2R1bGUpQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYC4ke2Vtb2ppLm5hbWV9LmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppSWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bWJvYWJsZTogYXJyLmxlbmd0aCA9PT0gMSAmJiBjb250ZW50Lmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByZXZpb3VzLmxlbmd0aCA9PT0gMClyZXR1cm4gW2N1cnJlbnRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3VycmVudCA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gKz0gYCAke2N1cnJlbnR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIitjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiwgY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKC4uLndvcmRzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShuZXdDb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9LypcclxuICAgICAgICBsZXQgdXNlck1vZHVsZVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIilcclxuICAgICAgICAudGhlbihFbW9qaVBpY2tlckxpc3RSb3cgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NzID0gRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHRcclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQgPSBjbGFzcyBFbW9qaVBpY2tlckxpc3RSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSlyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlEZXNjcmlwdG9yczogdGhpcy5wcm9wcy5lbW9qaURlc2NyaXB0b3JzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaXNEaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdC5kaXNwbGF5TmFtZSA9IFwiRW1vamlQaWNrZXJMaXN0Um93XCJcclxuICAgICAgICB9KSovXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcclxuICAgIGlmIChudWxsID09IG4gfHwgMCA9PT0gbi5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgdmFyIGQgPSBuLm1hcCgoZnVuY3Rpb24oZSwgbikge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHUsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBvbkNsaWNrOiBvLFxyXG4gICAgICAgICAgICBvbkhvdmVyOiByLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogdCA9PT0gbixcclxuICAgICAgICAgICAgaW5kZXg6IG5cclxuICAgICAgICB9LCBsKGUsIG4pKSlcclxuICAgIH0pKTtcclxuICAgIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF1cclxufVxyXG5cclxuZnVuY3Rpb24gUihlLCB0LCBuLCByKSB7XHJcbiAgICB2YXIgYSA9IChuLmxlbmd0aCA+IDAgPyBlLmZvcm1hdCh7XHJcbiAgICAgICAgcHJlZml4OiByKG4pXHJcbiAgICB9KSA6IHQpXHJcbiAgICBpZihBcnJheS5pc0FycmF5KGEpKXtcclxuICAgICAgICBhLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCB7fSwgXCJbTGlnaHRjb3JkXSBcIikpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBhID0gXCJbTElHSFRDT1JEXSBcIithXHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xyXG4gICAgICAgIHRpdGxlOiBhXHJcbiAgICB9LCBhKVxyXG59XHJcblIuZGlzcGxheU5hbWUgPSBcInJlbmRlckhlYWRlclwiO1xyXG5cclxubGV0IEVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxubGV0IGlzVXNhYmxlID0gZmFsc2VcclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5cclxuZnVuY3Rpb24gc2V0RW1vamlVc2FibGUodXNhYmxlKXtcclxuICAgIGlzVXNhYmxlID0gdXNhYmxlXHJcbiAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKUVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxyXG4gICAgaWYoIWlzRW1vamlEaXNhYmxlZClpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5cclxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZCA9IGZ1bmN0aW9uKGVtb2ppKXtcclxuICAgICAgICBpZihpc1VzYWJsZSl7XHJcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5pbXBvcnQgeyBhZGRvbkNhY2hlIH0gZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5cclxuY29uc3QgY2FjaGUgPSB7fVxyXG5jb25zdCBjYWNoZTIgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5DZXJ0aWZpZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2goYXR0YWNobWVudCwgaWQpe1xyXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlzVHJ1c3RlZChoYXNoKXtcclxuICAgICAgICByZXR1cm4gY2FjaGVbaGFzaF0gJiYgIWNhY2hlW2hhc2hdLnN1c3BlY3RcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKXtcclxuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXHJcbiAgICBmb3IobGV0IGtleXdvcmQgb2YgZGF0YS5zcGxpdCgvW15cXHdcXGRdKy9nKSl7XHJcbiAgICAgICAgZm9yKGxldCBvb2Ygb2YgW1xyXG4gICAgICAgICAgICBcInRva2VuXCIsXHJcbiAgICAgICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICAgICAgXCJwaG9uZVwiLFxyXG4gICAgICAgICAgICBcIk1GQVwiLFxyXG4gICAgICAgICAgICBcIjJmYVwiLFxyXG4gICAgICAgICAgICBcImNoaWxkX3Byb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJsb2NhbFN0b3JhZ2VcIixcclxuICAgICAgICAgICAgXCJldmFsXCIsXHJcbiAgICAgICAgICAgIFwiZ2V0R2xvYmFsXCIsXHJcbiAgICAgICAgICAgIFwiQnJvd3NlcldpbmRvd1wiXHJcbiAgICAgICAgXSl7XHJcbiAgICAgICAgICAgIGlmKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkgJiYgIWtleXdvcmQudG9Mb3dlckNhc2UoKSA9PT0gXCJkb210b2tlbmxpc3RcIil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhvb2YsIGtleXdvcmQpXHJcbiAgICAgICAgICAgICAgICBpc0hhcm1mdWwgPSBcInRva2VuIHN0ZWFsZXIvdmlydXNcIlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIHRoZSBNRVRBIGNvbW1lbnQgZnJvbSBwbHVnaW5zXHJcbiAgICAgICAgaWYoKC92YXIgW1xcd1xcZF8kXSs9XFxbXCIvZ2kpLnRlc3Qobm9fY29tbWVudHMpKXtcclxuICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXhwcyA9IFtcclxuICAgICAgICAgICAgICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydcXCkvZyxcclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICAgICAgLyoqIG1hbmdsZWQgKi9cclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAvLyBiKCcweDAnKVxyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gYignMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVnZXggb2YgcmVnZXhwcyl7XHJcbiAgICAgICAgICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgICAgICAgICAgICAgIGlmKHJlZ2V4LnRlc3Qobm9fY29tbWVudHMpKWlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICBjYWNoZVtoYXNoXSA9IHtcclxuICAgICAgICBzdXNwZWN0OiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXHJcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcclxuICAgICAgICBoYXJtOiBpc0hhcm1mdWwsXHJcbiAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICBmaWxlbmFtZVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhgRm91bmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICR7Y2FjaGVbaGFzaF0udHlwZS50b0xvd2VyQ2FzZSgpfTogJHtjYWNoZVtoYXNoXS5uYW1lfWApXHJcblxyXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXHJcbn1cclxuXHJcbmNvbnN0IGhhc2hUb1VybCA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIYXNoKGhhc2gsIGRhdGEsIGZpbGVuYW1lLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spe1xyXG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxyXG4gICAgaWYoIWNhY2hlW2hhc2hdKXtcclxuICAgICAgICBub2RlRmV0Y2goXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvTGlnaHRjb3JkL2ZpbGVoYXNoZXNAbWFzdGVyL2hhc2hlcy9cIitoYXNoLCB7IC8vIFVzaW5nIG5vZGUtZmV0Y2ggdG8gYnlwYXNzIGNvcnNcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnQgLy8gaGF2ZSB0byBzZXQgdXNlci1hZ2VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIHJlc3VsdC5oYXNoID0gaGFzaFxyXG4gICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZVxyXG5cclxuICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcclxuICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cclxuXHJcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXHJcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXHJcblxyXG4gICAgY3JlYXRlUmVhZFN0cmVhbShfX3BhdGgpLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSlcclxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgIH0pLm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gX19wYXRoXHJcblxyXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICBpZih2YWx1ZS50aW1lc3RhbXAgPCAoRGF0ZS5ub3coKSAtIDYuMDQ4ZSs4KSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgY29udGVudE1hbmFnZXIuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYmFzZW5hbWUoX19wYXRoKSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKVxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcclxuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXHJcbiAgICBpZighYXR0YWNobWVudC51cmwuc3RhcnRzV2l0aChcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuXHJcbiAgICBub2RlRmV0Y2goYXR0YWNobWVudC51cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50XHJcbiAgICAgICAgfVxyXG4gICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpXHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuICAgICAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxyXG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxyXG5cclxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgICAgICAgICAgICAgIGlmKGVsZW0pZWxlbS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KS5jYXRjaCgoKT0+e30pXHJcbn1cclxuXHJcbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxubGV0IGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVybiAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cclxuXHJcbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxuICAgIGlmKCFjaGlsZE1vZHVsZSljaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG4gICAgXHJcbiAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBcclxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09IFwiQVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgKipcIitmaWxlbmFtZStcIioqIG1pZ2h0IGJlIGRhbmdlcm91cyAqKihcIityZXN1bHQuaGFybStcIikqKi4gXFxuXFxuKipXZSBkb24ndCByZWNvbW1hbmQgdG8gZG93bmxvYWQgaXQqKi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyBpdCBiZWxvdy5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBBbnl3YXlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJEb24ndCAhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLnJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoY2hpbGQuaHJlZilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihbXCJkaXZcIl0uaW5jbHVkZXMoY2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLlwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgNDAgMzJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC0zMilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDpcIiNmMDQ3NDdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOkJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSwgZGl2KVxyXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhbmQgbGF1bmNoIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsIHN0eWxlOlwiYnJhbmRcIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwiLHN0cm9rZTpcIiMzNjM5M2ZcIixzdHlsZTp7Y29sb3I6XCIjNDA4N2VkXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcImN1cnJlbnRDb2xvclwiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgYW5kIEluc3RhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXllZEFycmF5KG9iail7XHJcbiAgICBsZXQgYXJyID0gW11cclxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBhcnIucHVzaChbaywgb2JqW2tdXSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXJyXHJcbn1cclxuXHJcbmxldCBrZXkgPSBudWxsXHJcbmxldCBzYXZlID0gbnVsbFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxyXG4udGhlbihsb2NhbFN0b3JhZ2VNb2R1bGUgPT4ge1xyXG4gICAgbGV0IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZU1vZHVsZS5pbXBsXHJcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkoa2V5KSkpXHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9LCAxMDAwMDApO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCB2YWwgPSBzYWZlSlNPTlBhcnNlKGF0b2IobG9jYWxTdG9yYWdlLmdldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiKSkpXHJcbiAgICAgICAgaWYodmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgIUFycmF5LmlzQXJyYXkodmFsKSB8fCB2YWwubGVuZ3RoICE9PSAyIHx8IHZhbC5maW5kKGUgPT4gdHlwZW9mIGUgIT09IFwic3RyaW5nXCIpIHx8IEJ1ZmZlci5mcm9tKHZhbFswXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAxNiB8fCBCdWZmZXIuZnJvbSh2YWxbMV0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMzIpe1xyXG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgICAgIHNhdmUoKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAga2V5ID0gdmFsXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxyXG4gICAgICAgIHNhdmUoKVxyXG4gICAgfVxyXG59KVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkoKXtcclxuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxyXG59XHJcblxyXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IG5ldyBFcnJvcihlKSA6IGVcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGEpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1jYmNcIiwgQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKSlcclxuICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpKTtcclxuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJldHVybiBcInt9XCJcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICBsZXQgYXJncyA9IFtCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpXVxyXG4gICAgXHJcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xyXG4gICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcclxuICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2VuY3J5cHRlZCwgY2lwaGVyLmZpbmFsKCldKTtcclxuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcclxufSIsImltcG9ydCB7YmRwbHVnaW5FcnJvcnMsIHBsdWdpbkNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5Nb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXI7fVxufVxuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcbiAgICBiZHBsdWdpbkVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRQbHVnaW5zKCkpKTtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBsdWdpbiwgbmFtZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4uZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtuYW1lXSkgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBsdWdpbkNvb2tpZVtuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RhcnRQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBwbHVnaW4gKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0b3AoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IChjb25zb2xlLmxvZyhwLmZpbGVuYW1lLCBmaWxlbmFtZSkpIHx8IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcbiAgICB0cnkgeyBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7fVxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi11bmxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFBsdWdpbihiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBjb25zdCBlbmFibGVkID0gcGx1Z2luQ29va2llW3BsdWdpbl07XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1yZWxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZnVsbFBhdGgpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiLCBwbHVnaW5Db29raWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5uZXdNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25NZXNzYWdlKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuY2hhbm5lbFN3aXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJhd09ic2VydmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihlKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luTW9kdWxlKCk7IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFYyQ19QdWJsaWNTZXJ2ZXJzIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IExheWVyIGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL2xheWVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfUHVibGljU2VydmVycyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uID0gdGhpcy5fYXBwZW5kQnV0dG9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlYyX1B1YmxpY1NlcnZlcnMgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KExheWVyLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIiwgaWQ6IFwicHVic2xheWVyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1B1YmxpY1NlcnZlcnMsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwifSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwdWJzbGF5ZXJyb290XCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RSb290KCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUxheWVyc1xyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVycyAmJiBlLmxheWVyKVswXS5sYXllcnMuc3BsaXQoXCIgXCIpWzBdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGNvbnN0IGxheWVycyA9IERPTS5xdWVyeShcIi5sYXllcnMsIC5cIitjbGFzc05hbWVMYXllcnMpO1xyXG4gICAgICAgIGlmICghbGF5ZXJzKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGF5ZXJzLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChcIjxkaXYgaWQ9J3B1YnNsYXllcnJvb3QnPlwiKSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKCFyb290KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFJTEVEIFRPIExPQ0FURSBST09UOiAubGF5ZXJzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHRoaXMuY29tcG9uZW50LCByb290KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWxpXCIgY2xhc3M9XCIke0JEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtfVwiPmApO1xyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgYnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICBjb25zdCBsYWJlbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtcHViLWJ1dHRvblwiIGNsYXNzPVwiJHtcIndyYXBwZXItMjVlVkluIFwiICsgQkRWMi5ndWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFza31cIj5wdWJsaWM8L2Rpdj5gKTtcclxuICAgICAgICBsYWJlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge3RoaXMucmVuZGVyKCk7fSk7XHJcbiAgICAgICAgYnRuLmFwcGVuZChsYWJlbCk7XHJcbiAgICAgICAgcmV0dXJuIGJ0bjtcclxuICAgIH1cclxuXHJcbiAgICBfYXBwZW5kQnV0dG9uKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZG93bmxvYWRQcm9ncmVzcyAmJiBlLnR1dG9yaWFsQ29udGFpbmVyKVswXS50dXRvcmlhbENvbnRhaW5lcilcclxuICAgICAgICBdXHJcbiAgICAgICAgaWYgKERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikpIHJldHVybjtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBET00ucXVlcnkoYGRpdi4ke2NsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyfSA+IGRpdmApO1xyXG4gICAgICAgIERPTS5hZnRlcihndWlsZHMsIHRoaXMuYnV0dG9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRCdXR0b24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdCA9IHdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lID09IFwiTmF2aWdhYmxlR3VpbGRzXCIpO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkTGlzdE9sZCA9IHdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xyXG4gICAgICAgIGlmICghR3VpbGRMaXN0ICYmICFHdWlsZExpc3RPbGQpIFV0aWxzLndhcm4oXCJQdWJsaWNTZXJ2ZXJcIiwgXCJDYW4ndCBmaW5kIEd1aWxkTGlzdCBjb21wb25lbnRcIik7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRMaXN0ID8gR3VpbGRMaXN0IDogR3VpbGRMaXN0T2xkLnByb3RvdHlwZSwgR3VpbGRMaXN0ID8gXCJkZWZhdWx0XCIgOiBcInJlbmRlclwiLCB7YWZ0ZXI6IHRoaXMuX2FwcGVuZEJ1dHRvbn0pO1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUJ1dHRvbigpIHtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2goKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5ndWlsZFBhdGNoO1xyXG4gICAgICAgIERPTS5xdWVyeShcIiNiZC1wdWItbGlcIikucmVtb3ZlKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xyXG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgcHVibGljU2VydmVyc01vZHVsZSBmcm9tIFwiLi9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vY2xhc3NOb3JtYWxpemVyXCI7XHJcbmltcG9ydCBkTW9kZSBmcm9tIFwiLi9kZXZNb2RlXCI7XHJcblxyXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcclxuaW1wb3J0IENhcmRMaXN0IGZyb20gXCIuLi91aS9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XHJcbmltcG9ydCBWMkNfQWNjb3VudEluZm9zIGZyb20gXCIuLi91aS9BY2NvdW50SW5mb3NcIjtcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBBbnRpQWRETSBmcm9tIFwiLi9BbnRpQWRETVwiO1xyXG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcclxuaW1wb3J0IGRpc2FibGVUeXBpbmcgZnJvbSBcIi4vZGlzYWJsZVR5cGluZ1wiO1xyXG5pbXBvcnQgQXBpUHJldmlldyBmcm9tIFwiLi4vdWkvQXBpUHJldmlld1wiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuLi91aS9zd2l0Y2hcIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi4vdWkvbWFyZ2ludG9wXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XHJcblxyXG5jbGFzcyBCRFNpZGViYXJIZWFkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzaWRlYmFyQ29tcG9uZW50cyA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLlNlcGFyYXRvciAmJiBlLkhlYWRlciAmJiBlLkl0ZW0pXHJcblxyXG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0J1dHRvbiA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkNoYW5nZWxvZ1wifSwgXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Zsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCJ9LCBjbGFzc05hbWU6IFwiYmQtY2hhbmdlbG9nLWJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7VXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7fX0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEhpc3RvcnksIHtjbGFzc05hbWU6IFwiYmQtaWNvblwiLCBzaXplOiBcIjE2cHhcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCByZW5kZXJlZCA9IG5ldyBzaWRlYmFyQ29tcG9uZW50cy5IZWFkZXIoe1xyXG4gICAgICAgICAgICBjaGlsZHJlbjogUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgXCJCYW5kYWdlZCBCRFwiLCBjaGFuZ2Vsb2dCdXR0b24pLFxyXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIlxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1NldHRpbmdzUGFuZWwge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5ncyA9IHRoaXMudXBkYXRlU2V0dGluZ3MuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNpZGViYXIgPSBuZXcgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb21wb25lbnRzKClcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNvbXBvbmVudHMoKXtcclxuICAgICAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGlnaHRjb3JkXCIsIG1ha2VDb21wb25lbnQodGhpcy5saWdodGNvcmRDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwic3RhdHVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5QcmVzZW5jZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJhY2NvdW50aW5mb1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQWNjb3VudEluZm9zQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxjYXBpcHJldmlld1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuQXBpUHJldmlld0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuXHJcbiAgICAgICAgLyogQmFuZGFnZWQgQkQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJCRENoYW5nZWxvZ1RpdGxlXCIsIG1ha2VDb21wb25lbnQoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJEU2lkZWJhckhlYWRlcigpLnJlbmRlcigpXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY29yZVwiLCBtYWtlQ29tcG9uZW50KHRoaXMuY29yZUNvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjdXN0b21jc3NcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmN1c3RvbUNzc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJwbHVnaW5zXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJwbHVnaW5zXCIpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJ0aGVtZXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInRoZW1lc1wiKSkpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcixcclxuICAgICAgICAgICAgY2xhc3NTaWRlYmFyXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLnNwbGl0KFwiIFwiKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3Qgc2lkZWJhciA9IERPTS5xdWVyeShcIi5cIitjbGFzc05hbWVMYXllcitcIiAuXCIrY2xhc3NTaWRlYmFyLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdK1wiLCAuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLnVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wiKTtcclxuICAgICAgICBpZiAoIXNpZGViYXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCByb290ID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1zZXR0aW5nc3BhbmUtY29udGFpbmVyXCIgY2xhc3M9XCIke2NsYXNzU2lkZWJhci5jb250ZW50UmVnaW9ufSBjb250ZW50LXJlZ2lvblwiPmApO1xyXG4gICAgICAgIHNpZGViYXIuYXBwZW5kKHJvb3QpO1xyXG5cclxuICAgICAgICBVdGlscy5vblJlbW92ZWQocm9vdCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUocm9vdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJjb3JlXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBNc2dMb2dTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcIm1zZ2xvZ1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge31cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNldHRpbmdzKGlkLCBlbmFibGVkLCBzaWRlYmFyKSB7XHJcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIGVsc2UgcHVibGljU2VydmVyc01vZHVsZS5yZW1vdmVCdXR0b24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHZvaWNlTW9kZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgICAgICBlbHNlIGNvbG9yZWRUZXh0LnJlbW92ZUNvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay13cC0xXCIpIHtcclxuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtcclxuICAgICAgICAgICAgZWxzZSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIFwiIzJmMzEzNlwiKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyppZiAoaWQgPT09IFwicmVhY3REZXZUb29sc1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgcmVhY3REZXZUb29scy5zdG9wKCk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxyXG4gICAgICAgICAgICBzaWRlYmFyLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF1cclxuICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0N1cnJlbnRHYW1lOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICAgICAgZWxzZSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTRcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC04XCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICAvL2lmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIHtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2lkZWJhcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhci5yZW5kZXIoc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29yZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcclxuICAgIH1cclxuXHJcbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAoaSA9PT0gMCA/IG51bGwgOiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCBzZWN0aW9uLnRpdGxlKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLThcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJpc1RhYnNcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogaXNDaGVja2VkLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT0gXCJsaWdodGNvcmQtOFwiICYmIGlzQ2hlY2tlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwiZ3JlZW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vazogXCJvdXRsaW5lZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwiYnJhbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5pcGMuc2VuZChcIk5FV19UQUJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwiT3BlbiBhIG5ldyBUYWJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxyXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcclxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTaG91bGQgcmVsYXVuY2hcIilcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogcmVtb3RlLnByb2Nlc3MuYXJndi5zbGljZSgxKS5jb25jYXQoW1wiLS1kaXNhYmxlLWJldHRlcmRpc2NvcmRcIl0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuYXBwLnF1aXQoKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHRydWVcclxuICAgICAgICAgICAgfSwgXCJSZWxhdW5jaCB3aXRob3V0IEJldHRlckRpc2NvcmRcIiksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24sIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcInllbGxvd1wiLFxyXG4gICAgICAgICAgICAgICAgbG9vazogXCJnaG9zdFwiLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIixcclxuICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IFwicmVkXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDbGVhcmluZ0NhY2hlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDbGVhcmluZyBjYWNoZS4uLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnNlc3Npb24uY2xlYXJDYWNoZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJDYWNoZSBpcyBjbGVhcmVkICFcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBDaGVjayBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNDbGVhcmluZ0NhY2hlXHJcbiAgICAgICAgICAgIH0sIFwiQ2xlYXIgY2FjaGVcIilcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgUHJlc2VuY2VDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHJlc2VuY2VTZXR0aW5ncywge1xyXG4gICAgICAgICAgICBrZXk6IFwibHBwYW5uZWxcIixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIFxyXG4gICAgICAgICAgICBzZXR0aW5nczogdGhpcy5QcmVzZW5jZVNldHRpbmdzXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBBY2NvdW50SW5mb3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQWNjb3VudEluZm9zLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBhbm5lbFwiXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBBcGlQcmV2aWV3Q29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBpUHJldmlldywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwaXBhbm5lbFwiXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjdXN0b21Dc3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDc3NFZGl0b3IsIHtrZXk6IFwiY3NzZWRpdG9yXCJ9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckFkZG9uUGFuZSh0eXBlKSB7XHJcbiAgICAgICAgLy8gSSBrbm93IHRoaXMgc2hvdWxkbid0IGJlIGhlcmUsIGJ1dCB3aGVuIGl0IGlzbid0LFxyXG4gICAgICAgIC8vIFJlYWN0IHJlZnVzZXMgdG8gY2hhbmdlIHRoZSBidXR0b24gd2hlbiBnb2luZ1xyXG4gICAgICAgIC8vIGJldHdlZW4gcGx1Z2lucyBhbmQgdGhlbWVzIHBhZ2UuLi4gc29tZXRoaW5nXHJcbiAgICAgICAgLy8gdG8gZGVidWcgbGF0ZXIuXHJcbiAgICAgICAgY2xhc3MgQ29udGVudExpc3QgZXh0ZW5kcyBCRFYyLnJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZWZpeCA9IHRoaXMucHJvcHMudHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy50eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICByZW5kZXIoKSB7cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47fVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlbmRlciA9IENvbnRlbnRMaXN0LnByb3RvdHlwZS5yZW5kZXI7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnRlbnRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgICAgICAgICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRMaXN0LCB7dHlwZX0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDYXJkTGlzdCwge3R5cGV9KSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbCBvbiB3aW5kb3dcclxuICovXHJcblxyXG5mdW5jdGlvbiBtYWtlQ29tcG9uZW50KGNoaWxkcmVuKXtcclxuICAgIGNsYXNzIFNldHRpbmdDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oc2lkZWJhciwgKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzaWRlYmFyXHJcbiAgICByZXR1cm4gKHMpID0+IHtcclxuICAgICAgICBzaWRlYmFyID0gc1xyXG4gICAgICAgIHJldHVybiBTZXR0aW5nQ29tcG9uZW50XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxzID0ge31cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcihwYW5lbCwgY29tcG9uZW50KXtcclxuICAgICAgICB0aGlzLnBhbmVsc1twYW5lbF0gPSBjb21wb25lbnRcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnQocGFuZWwsIHNpZGViYXIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhbmVsc1twYW5lbF0oc2lkZWJhcilcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFt7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQmV0dGVyRGlzY29yZCBTZXR0aW5nc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY29yZVwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlBsdWdpbnNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInBsdWdpbnNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJUaGVtZXNcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcInRoZW1lc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkN1c3RvbSBDU1NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImN1c3RvbWNzc1wiXHJcbiAgICAgICAgfV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IExDaXRlbXMoKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTGlnaHRjb3JkIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJsaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlJpY2hQcmVzZW5jZVwiLCBcclxuICAgICAgICAgICAgICAgIGlkOiBcInN0YXR1c1wiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQWNjb3VudCBJbmZvXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJhY2NvdW50aW5mb1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IExDRGV2SXRlbXMoKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXVxyXG4gICAgICAgIGlmKCF3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUpcmV0dXJuIGl0ZW1zXHJcbiAgICAgICAgaXRlbXMucHVzaCguLi5bXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmQgQXBpXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJDb21wb25lbnRzIFByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxjYXBpcHJldmlld1wiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdKVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENpdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgLi4udGhpcy5MQ0Rldkl0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGUuc2VjdGlvbilyZXR1cm4gZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiQ1VTVE9NXCIsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChcIkJEQ2hhbmdlbG9nVGl0bGVcIilcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWxTaWRlYmFyIG9uIHdpbmRvd1xyXG4gKi8iLCJpbXBvcnQge2JkdGhlbWVFcnJvcnMsIHRoZW1lQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jbGFzcyBUaGVtZU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5UaGVtZU1vZHVsZSA9IHRoaXNcclxuICAgIH1cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XHJcbn1cclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkVGhlbWVEYXRhKCk7XHJcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XHJcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XHJcbiAgICAgICAgaWYgKCF0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgdGhlbWVDb29raWVbdGhlbWUubmFtZV0gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xyXG4gICAgICAgIGlmICghYmR0aGVtZXNbdGhlbWVdKSBkZWxldGUgdGhlbWVDb29raWVbdGhlbWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gYXBwbGllZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmVuYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gZmFsc2U7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGRpc2FibGVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAobmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZVRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lKTtcclxuICAgIGVsc2UgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b2dnbGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuIEl0IG1heSBub3QgaGF2ZSBiZWVuIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpO1xyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLWxvYWRlZFwiLCB0aGVtZS5uYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51bmxvYWRUaGVtZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgZGVsZXRlIGJkdGhlbWVzW3RoZW1lXTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS11bmxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICB0aGlzLnVubG9hZFRoZW1lKGJkdGhlbWUuZmlsZW5hbWUpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmR0aGVtZS5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybiB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZU9yTmFtZSk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSwgdHJ1ZSksIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtcmVsb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiB0aGlzLnJlbG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVwZGF0ZVRoZW1lTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIpO1xyXG4gICAgaWYgKHNhdmVkKSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGVtZUNvb2tpZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnNhdmVUaGVtZURhdGEgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwidGhlbWVzXCIsIHRoZW1lQ29va2llKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZU1vZHVsZSgpOyIsImltcG9ydCB7YmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlscyB7XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyB3aWR0aCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9XG4gICAgLyoqIERvY3VtZW50L3dpbmRvdyBoZWlnaHQgKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxuXG4gICAgc3RhdGljIGdldCBXaW5kb3dDb25maWdGaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBmcmFtZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIHN0cmlwQk9NKGNvbnRlbnQpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGV4dEFyZWEoKSB7XG4gICAgICAgIHJldHVybiBET00ucXVlcnkoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hhbm5lbFRleHRBcmVhICYmIGUudGl0bGVXcmFwcGVyKVswXS5jaGFubmVsVGV4dEFyZWEuc3BsaXQoXCIgXCIpWzBdK1wiIHRleHRhcmVhXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbnNlcnRUZXh0KHRleHRhcmVhLCB0ZXh0KSB7XG4gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvblN0YXJ0ID0gMDtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uRW5kID0gdGV4dGFyZWEudmFsdWUubGVuZ3RoO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydFRleHRcIiwgZmFsc2UsIHRleHQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9nKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICMzYTcxYzE7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICMzYTcxYzE7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB3YXJuKG1vZHVsZU5hbWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjRThBNDAwOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjRThBNDAwO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXJyKG1vZHVsZU5hbWUsIG1lc3NhZ2UsIGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6IHJlZDtcIiwgXCJcIik7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5ncm91cENvbGxhcHNlZChcIiVjRXJyb3I6IFwiICsgZXJyb3IubWVzc2FnZSwgXCJjb2xvcjogcmVkO1wiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0IHN0cmluZ3Mgd2l0aCBwbGFjZWhvbGRlcnMgKGB7e3BsYWNlaG9sZGVyfX1gKSBpbnRvIGZ1bGwgc3RyaW5ncy5cbiAgICAgKiBRdWljayBleGFtcGxlOiBgUGx1Z2luVXRpbGl0aWVzLmZvcm1hdFN0cmluZyhcIkhlbGxvLCB7e3VzZXJ9fVwiLCB7dXNlcjogXCJaZXJlYm9zXCJ9KWBcbiAgICAgKiB3b3VsZCByZXR1cm4gXCJIZWxsbywgWmVyZWJvc1wiLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBzdHJpbmcgdG8gZm9ybWF0XG4gICAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyAtIG9iamVjdCBsaXRlcmFsIG9mIHBsYWNlaG9sZGVycyB0byByZXBsYWNlbWVudHNcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIHN0cmluZ1xuICAgICAqL1xuICAgIHN0YXRpYyBmb3JtYXRTdHJpbmcoc3RyaW5nLCB2YWx1ZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgICBsZXQgcmVwbGFjZW1lbnQgPSB2YWx1ZXNbdmFsXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VtZW50KSkgcmVwbGFjZW1lbnQgPSBKU09OLnN0cmluZ2lmeShyZXBsYWNlbWVudCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mKHJlcGxhY2VtZW50KSA9PT0gXCJvYmplY3RcIiAmJiByZXBsYWNlbWVudCAhPT0gbnVsbCkgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudC50b1N0cmluZygpO1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobmV3IFJlZ0V4cChge3ske3ZhbH19fWAsIFwiZ1wiKSwgcmVwbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2csIFwiXFxcXCQmXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyB0ZXN0SlNPTihkYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgaXNFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsIHx8IG9iaiA9PSB1bmRlZmluZWQgfHwgb2JqID09IFwiXCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkgcmV0dXJuIG9iai5sZW5ndGggPT0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiAoLi4ucGFyYW1zKSA9PiB7XG4gICAgICAgICAgICB0cnkgeyByZXR1cm4gbWV0aG9kKC4uLnBhcmFtcyk7XHR9XG4gICAgICAgICAgICBjYXRjaCAoZSkgeyB0aGlzLmVycihcIlN1cHByZXNzZWRFcnJvclwiLCBcIkVycm9yIG9jY3VycmVkIGluIFwiICsgbWVzc2FnZSwgZSk7IH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB7YmVmb3JlLCBhZnRlciwgaW5zdGVhZCwgb25jZSA9IGZhbHNlLCBzaWxlbnQgPSBmYWxzZSwgZm9yY2UgPSBmYWxzZX0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgd2hhdC5kaXNwbGF5TmFtZSB8fCB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lIHx8IHdoYXQubmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IHdoYXQuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwicGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgICAgIGlmIChmb3JjZSkgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge307XG4gICAgICAgICAgICBlbHNlIHJldHVybiBjb25zb2xlLmVycm9yKG1ldGhvZE5hbWUsIFwiZG9lcyBub3QgZXhpc3QgZm9yXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ01ldGhvZCA9IHdoYXRbbWV0aG9kTmFtZV07XG4gICAgICAgIGxldCBjYW5jZWxlZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInVucGF0Y2hcIiwgbWV0aG9kTmFtZSwgXCJvZlwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgLy93aGF0W21ldGhvZE5hbWVdID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZSAvLyB0aGlzIGFsbG93IHRvIG1vbmtleXBhdGNoIG1vcmUgdGhhbiBvbmUgdGltZS5cbiAgICAgICAgfTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYoY2FuY2VsZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnTWV0aG9kLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0aGlzT2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgIG1ldGhvZEFyZ3VtZW50czogYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgIGNhbmNlbFBhdGNoOiBjYW5jZWwsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxNZXRob2Q6IG9yaWdNZXRob2QsXG4gICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsTWV0aG9kOiAoKSA9PiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5vcmlnaW5hbE1ldGhvZC5hcHBseShkYXRhLnRoaXNPYmplY3QsIGRhdGEubWV0aG9kQXJndW1lbnRzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpbnN0ZWFkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJldCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKGluc3RlYWQsIFwiYGluc3RlYWRgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBSZXQgIT09IHVuZGVmaW5lZCkgZGF0YS5yZXR1cm5WYWx1ZSA9IHRlbXBSZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhiZWZvcmUsIFwiYGJlZm9yZWAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNhbGxPcmlnaW5hbE1ldGhvZCgpO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlcikgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYWZ0ZXIsIFwiYGFmdGVyYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uY2UpIGNhbmNlbCgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5hc3NpZ24od2hhdFttZXRob2ROYW1lXSwgb3JpZ01ldGhvZCk7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19tb25rZXlQYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoIXdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kID0gb3JpZ01ldGhvZDtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0udG9TdHJpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb3JpZ01ldGhvZC50b1N0cmluZygpO307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBtdXRhdGlvbnMubGVuZ3RoOyBtKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1ttXTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXROZXN0ZWRQcm9wKG9iaiwgcGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgvXFxzP1xcLlxccz8vKS5yZWR1Y2UoZnVuY3Rpb24ob2JqLCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIG9ialtwcm9wXTtcbiAgICAgICAgfSwgb2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgVGhlIHN0cmluZyB0byBzaG93IGluIHRoZSB0b2FzdC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnR5cGUgQ2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUgdG9hc3Qgc3R5bGlzdGljYWxseSBhbmQgc2VtYW50aWNhbGx5LiBDaG9pY2VzOiBcIlwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwiZGFuZ2VyXCIvXCJlcnJvclwiLCBcIndhcm5pbmdcIi9cIndhcm5cIi4gRGVmYXVsdDogXCJcIlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pY29uIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aW1lb3V0IEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXIgJiYgZS5oYXNOb3RpY2UpWzBdLnNpZGViYXIuc3BsaXQoXCIgXCIpWzldK1wiICsgZGl2XCIpIHx8IG51bGw7XG4gICAgICAgICAgICBjb25zdCBtZW1iZXJsaXN0ID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUubWVtYmVyc1dyYXApWzBdLm1lbWJlcnNXcmFwKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBmb3JtID0gY29udGFpbmVyID8gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJmb3JtXCIpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjb250YWluZXIgPyBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDMxMDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbWVtYmVybGlzdCA/IG1lbWJlcmxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IDA7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0ID8gcmlnaHQgLSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IFV0aWxzLnNjcmVlbldpZHRoIC0gbGVmdCAtIDI0MDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGZvcm0gPyBmb3JtLm9mZnNldEhlaWdodCA6IDgwO1xuICAgICAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RzXCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCBsZWZ0ICsgXCJweFwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcIndpZHRoXCIsIHdpZHRoICsgXCJweFwiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20gKyBcInB4XCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikuYXBwZW5kQ2hpbGQodG9hc3RXcmFwcGVyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7dHlwZSA9IFwiXCIsIGljb24gPSB0cnVlLCB0aW1lb3V0ID0gMzAwMH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCB0b2FzdEVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0XCIpO1xuICAgICAgICBpZiAodHlwZSkgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJ0b2FzdC1cIiArIHR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiBpY29uKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImljb25cIik7XG4gICAgICAgIHRvYXN0RWxlbS5pbm5lclRleHQgPSBjb250ZW50O1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJvcGVuTW9kYWxcIiwgXCJ1cGRhdGVNb2RhbFwiKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiQ29uZmlybU1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsQWN0aW9ucyB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsQWN0aW9ucy5vcGVuTW9kYWwocHJvcHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChDb25maXJtYXRpb25Nb2RhbCwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgICByZWQ6IGRhbmdlcixcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgICAgIH0sIHByb3BzKSwgY29udGVudCk7XG4gICAgICAgIH0sIHttb2RhbEtleToga2V5fSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgICAgIGlmKCFjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKVxuICAgIH1cbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5nZXRUb2tlbiB8fCB0aGVNb2R1bGUuZ2V0RW1haWwgfHwgdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gIWlzRGVmYXVsdCA/IHRoZU1vZHVsZS5kZWZhdWx0IDogdGhlTW9kdWxlXHJcbiAgICAgICAgICAgICAgICBpZighbW9kKXJldHVybiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kLmdldFRva2VuICYmICFtb2QuZ2V0RW1haWwgJiYgIW1vZC5zaG93VG9rZW4pcmV0dXJuIHRoZU1vZHVsZVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImdldFRva2VuXCIgfHwgcHJvcCA9PT0gXCJnZXRFbWFpbFwiIHx8IHByb3AgPT09IFwic2hvd1Rva2VuXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgZnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIiAmJiBvYmouZ2V0RW1haWwpIHJldHVybiAoKSA9PiBcInB1cHBldDExMTEyQGdtYWlsLmNvbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcInNob3dUb2tlblwiICYmIG9iai5zaG93VG9rZW4pIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoZU1vZHVsZSwge2RlZmF1bHQ6IHByb3h5fSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gcHJvdGVjdChtLmRlZmF1bHQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5VW5pcXVlUHJvcGVydGllcyA9IChwcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAocHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsID0ge1xyXG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxyXG4gICAgICAgICAgICByZWFjdERvbTogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImZpbmRET01Ob2RlXCJdKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMiA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBqb2luQkQxKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMFRtZm81WmJPUkNScWJBZFwiKTt9XHJcbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxyXG5cclxuICAgIGpvaW5CRDIoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIySFNjbThqXCIpO31cclxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxyXG5cclxuICAgIGpvaW5MQygpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjdlRmZmMkFcIik7fVxyXG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcblxyXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XHJcbiAgICBnZXQgc2xhdGVFZGl0b3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2xhdGVUZXh0QXJlYVwiXSk7fVxyXG4gICAgZ2V0IG1lc3NhZ2VDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibWVzc2FnZVwiLCBcImNvbnRhaW5lckNvenlcIl0pO31cclxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XHJcblx0XHRjb25zdCBndWlsZHNXcmFwcGVyID0gQkRNb2R1bGVzLmdldChlID0+IGUud3JhcHBlciAmJiBlLnVucmVhZE1lbnRpb25zQmFyKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ndWlsZHNFcnJvciAmJiBlLnNlbGVjdGVkKVswXVxyXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuICAgIGdldCBNZXNzYWdlQ29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk1lc3NhZ2VcIik7fVxyXG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO31cclxuICAgIGdldCBOYXRpdmVNb2R1bGUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZXRCYWRnZVwiXSk7fVxyXG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cclxuICAgIGdldCBHdWlsZEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJsZWF2ZUd1aWxkXCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uaGlkZSAmJiBtLnNob3cgJiYgIW0uc2VhcmNoICYmICFtLnN1Ym1pdCAmJiAhbS5zZWFyY2ggJiYgIW0uYWN0aXZhdGVSYWdpbmdEZW1vbiAmJiAhbS5kaXNtaXNzKTt9XHJcbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cclxuICAgIGdldCBMYXllclN0YWNrKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wicG9wTGF5ZXJcIl0pO31cclxuICAgIGdldCBVc2VyU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDdXJyZW50VXNlclwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cclxuICAgIGdldCBDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm9wZW5Qcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IFByaXZhdGVDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNlbGVjdFByaXZhdGVDaGFubmVsXCJdKTt9XHJcblxyXG4gICAgb3BlbkRNKHVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGZJZCA9IHRoaXMuVXNlclN0b3JlLmdldEN1cnJlbnRVc2VyKCkuaWQ7XHJcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwcml2YXRlQ2hhbm5lbElkID0gdGhpcy5DaGFubmVsU3RvcmUuZ2V0RE1Gcm9tVXNlcklkKHVzZXJJZCk7XHJcbiAgICAgICAgaWYgKHByaXZhdGVDaGFubmVsSWQpIHJldHVybiB0aGlzLlByaXZhdGVDaGFubmVsQWN0aW9ucy5zZWxlY3RQcml2YXRlQ2hhbm5lbChwcml2YXRlQ2hhbm5lbElkKTtcclxuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3Qgc3R5bGUgPSBgXHJcbiAgICAuY29udGFpbmVyLTJSbDAxdSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmNoYXQtM2JSeHh1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2lkZWJhci0ySzhwRmgge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbmA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVm9pY2VNb2RlIHtcclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcIlZvaWNlTW9kZVwiLCBzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJWb2ljZU1vZGVcIik7XHJcbiAgICB9XHJcbn07IiwiY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIG0uZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gobSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQnlQcm9wcyA9ICguLi5wcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAoLi4ucHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG5sZXQgbW9kID0gIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlQcm9wcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG5leHBvcnQgZGVmYXVsdCBtb2RcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5XZWJwYWNrTW9kdWxlcyA9IG1vZCIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCJcclxuXHJcbmxldCBwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRVc2VyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGRlbGV0ZSBwcm9wcy5ocmVmLnRhcmdldFxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhwcm9wcylcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHByb3BzLkFuY2hvciBocmVmPXtcIi91c2Vycy9cIitwcm9wcy51c2VyLmlkfSB7Li4ucHJvcHMuaHJlZn0gb25DbGljaz17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICAgICAgICBpZighcHJvZmlsTW9kdWxlKXByb2ZpbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lm9wZW4gJiYgZS5kZWZhdWx0LmZldGNoTXV0dWFsRnJpZW5kcylbMF1cclxuICAgICAgICAgICAgICAgIHByb2ZpbE1vZHVsZS5kZWZhdWx0Lm9wZW4ocHJvcHMudXNlci5pZClcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3Byb3BzLkFuY2hvcj5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVnSHVudGVyQmFkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAzMS4zIDI5LjVcIiB7Li4ucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuMSAxMi4zYy0yLjUgMy4yLTYuMSA0LjgtOC45IDQuM0wzLjYgMjguOGMtLjcuOS0xLjkgMS0yLjguMy0uOS0uNy0xLTEuOS0uNC0yLjhMMTAgMTQuMWMtMS4zLTIuNS0uNi02LjQgMi05LjcgMy4yLTQgOC01LjUgMTAuOC0zLjRzMi40IDcuMi0uNyAxMS4zelwiIGZpbGw9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmN1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiAgey4uLnRoaXMucHJvcHMuc3ZnfSBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjREQyRTQ0XCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMzIDMzYTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMmwxLTEyaDI4bDEgMTJ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRUE1OTZFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTEzIDM1Yy0uNzkyLTEuODc1LTEuNzUtMy4yOTEtMy40MTctNC42NjYgMS43NS0xLjQ1OSA0LjU0Mi01LjUgNS4yNS04LjI5MnMyLjc1IDguMTI1IDIuMDQyIDEwLjYyNVMxMyAzNSAxMyAzNXptMTAuMzAzIDBjLjc5MS0xLjg3NSAxLjc1LTMuMjkxIDMuNDE2LTQuNjY2LTEuNzUtMS40NTktNC41NDEtNS41LTUuMjUtOC4yOTItLjcwNy0yLjc5Mi0yLjc1IDguMTI1LTIuMDQgMTAuNjI1LjcwOCAyLjUgMy44NzQgMi4zMzMgMy44NzQgMi4zMzN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQkUxOTMxXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzI4IDI0LjI2M0EyLjUgMi41IDAgMDA4IDIyLjVjMC0uNTY1LS4xOTUtMS4wODEtLjUxMS0xLjVINGwtLjI3MiAzLjI2M3ptMjguNTQ0IDBMMzIgMjFoLTMuNDg5QTIuNDgyIDIuNDgyIDAgMDAyOCAyMi41YTIuNSAyLjUgMCAwMDQuMjcyIDEuNzYzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE0XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjI2XCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMgMzVIMTNzMi02IDItMTNoNmMwIDcgMiAxMyAyIDEzek0xNyAyaDJ2N2gtMnpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNTVBQ0VFXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjgzOC4yMDZDMTcuNjY3LjA0MiAxNyAuMzE4IDE3IDEuNDE4djFjMCAxLjEuODY1IDEuNzUzIDEuOTIzIDEuNDUxbDUuMTU0LS45MDFjMS43MTUtLjM0MyAxLjU0OC0xLjU5My4wODUtMS44ODRMMTguODM4LjIwNnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNDQ0Q2RERcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTggNmwtLjA4MS4xMjNDMTAuOTM4IDE2Ljk4MSAzIDE1LjAxNSAzIDE5djIuNWEyLjUgMi41IDAgMDA0Ljk1LjVIMTJhMiAyIDAgMDA0IDBoNGEyIDIgMCAwMDQgMGg0LjA1YTIuNSAyLjUgMCAwMDQuOTUtLjVWMTljMC00LTgtMi0xNS0xM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxnIGZpbGw9XCIjRjVGOEZBXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45NDggNi4wNzhsLS4wMy4wNDVDMTcuMTMyIDExLjYxOSAxMC44MTEgMTYuMTI2IDggMTh2NGEyIDIgMCAwMDQgMHYtNGMuOTgyLS45ODIgNS44MTMtNi43ODcgNS45ODQtMTEuNzMyLS4wMS0uMDY0LS4wMjctLjEyNi0uMDM2LS4xOXptLjA4LjM5OEMxOC4zMjQgMTEuMzc0IDIzLjAzMSAxNy4wMzEgMjQgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMi43NS0xLjgzMy04Ljk1My02LjE5LTkuOTcyLTExLjUyNHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy45ODQgNi4yN0MxNy45MjIgOC4zNDYgMTcuNjA2IDE2LjM5NCAxNiAxOHY0YTIgMiAwIDAwNCAwdi00Yy0xLjU2NC0xLjU2NC0xLjkwNS05LjI0MS0xLjk3OS0xMS41NTktLjAxMS0uMDU3LS4wMjctLjExMy0uMDM3LS4xNzF6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkTG9nbyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTY4IDE2OC42OVwiIHsuLi5wcm9wc30gaGVpZ2h0PVwiMTAwJVwiIHdpZHRoPXtwcm9wcy5zaXplfT5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fYVwiIHgxPXs2Ni43fSB5MT17LTQ4Ny43fSB4Mj17NjYuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTE0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fYlwiIHgxPXsxMDEuN30geTE9ey00ODcuN30geDI9ezEwMS43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMjA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19jXCIgeDE9ezg0fSB5MT17LTQwOH0geDI9ezg0fSB5Mj17LTU3Ni42OX0gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiI2ZmZlwiIGQ9XCJNMTQuOSAzNS4zaDEzOS4yVjEzM0gxNC45elwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTY2LjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMDEuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19iKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMHYxNjhsMTY4IC42OVYwem0xMTEuMyAxMjQuMXMtMy40LTQuMS02LjMtNy43YzEyLjYtMy41IDE3LjQtMTEuMyAxNy40LTExLjNhNTIuNTIgNTIuNTIgMCAwMS0xMS4xIDUuNiA2OC42MyA2OC42MyAwIDAxLTM4LjkgNCA3MC4xMiA3MC4xMiAwIDAxLTE0LjEtNC4xIDQ4Ljg4IDQ4Ljg4IDAgMDEtNy4xLTMuM2MtLjMtLjItLjYtLjMtLjktLjVhLjc2Ljc2IDAgMDAtLjQtLjJjLTEuNy0xLTIuNi0xLjYtMi42LTEuNnM0LjYgNy42IDE2LjggMTEuMmMtMi45IDMuNi02LjQgNy45LTYuNCA3LjktMjEuMi0uNi0yOS4zLTE0LjUtMjkuMy0xNC41IDAtMzAuNiAxMy44LTU1LjQgMTMuOC01NS40IDEzLjgtMTAuMyAyNi45LTEwIDI2LjktMTBsMSAxLjFDNTIuOCA1MC4zIDQ1IDU3LjkgNDUgNTcuOWE1Ni4yIDU2LjIgMCAwMTUuNy0yLjcgNzIuMTkgNzIuMTkgMCAwMTIxLjgtNiA4Ljc1IDguNzUgMCAwMTEuNi0uMiA4OS4xIDg5LjEgMCAwMTE5LjQtLjIgNzguNDUgNzguNDUgMCAwMTI4LjkgOS4xcy03LjUtNy4yLTIzLjktMTIuMWwxLjMtMS41czEzLjEtLjMgMjYuOSAxMGMwIDAgMTMuOCAyNC44IDEzLjggNTUuNC4xLS4xLTggMTMuOC0yOS4yIDE0LjR6XCIgZmlsbD1cInVybCgjcHJlZml4X19jKVwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcblxyXG4vKipcclxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKX1cclxuICovXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmxldCBtYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG5sZXQgY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG5sZXQgc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxubGV0IHNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxyXG5jb25zdCBHdWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcylbMF0uZGVmYXVsdFxyXG5jb25zdCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRSZWxhdGlvbnNoaXBzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHNlc3Npb25Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRTZXNzaW9ucylbMF0uZGVmYXVsdFxyXG5jb25zdCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdLmRlZmF1bHRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19BY2NvdW50SW5mb3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGlmKCFtYXJnaW5Nb2R1bGUyKW1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbiAgICAgICAgaWYoIWNvbG9yTW9kdWxlKWNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxuICAgICAgICBpZighc2l6ZU1vZHVsZSlzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiQWNjb3VudCBJbmZvc1wiLz4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIFByb2ZpbGVcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRQcm9maWxlVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgU3RhdGlzdGljc1xyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFN0YXRpc3RpY3MoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGVkIFNlc3Npb25zXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U2Vzc2lvblZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlc3Npb25WYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zUmF3ID0gc2Vzc2lvbk1vZHVsZS5nZXRTZXNzaW9ucygpXHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnMgPSBPYmplY3Qua2V5cyhzZXNzaW9uc1JhdykuZmlsdGVyKGUgPT4gZSAhPT0gXCJhbGxcIikubWFwKGUgPT4gc2Vzc2lvbnNSYXdbZV0pXHJcblxyXG4gICAgICAgIGlmKHNlc3Npb25zLmxlbmd0aCA9PT0gMClyZXR1cm4gXCItIE5vIHNlc3Npb24gZGV0ZWN0ZWQuIFBsZWFzZSB0cnkgaW4gYSBmZXcgc2Vjb25kc1wiXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHNlc3Npb25zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGArIGlkOiAke2Uuc2Vzc2lvbklkfVxyXG4rIG9zOiAke2UuY2xpZW50SW5mby5vc1swXS50b1VwcGVyQ2FzZSgpK2UuY2xpZW50SW5mby5vcy5zbGljZSgxKX1cclxuKyBjbGllbnQ6ICR7ZS5jbGllbnRJbmZvLmNsaWVudH1cclxuKyBzdGF0dXM6ICR7ZS5zdGF0dXN9XHJcbisgQWN0aXZpdGllczogJHtlLmFjdGl2aXRpZXMubGVuZ3RofWBcclxuICAgICAgICB9KS5qb2luKFwiXFxuXCIrXCItXCIucmVwZWF0KDM4KStcIlxcblwiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFByb2ZpbGVWYWx1ZSgpe1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7RGF0ZX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSB1c2VyLmNyZWF0ZWRBdFxyXG5cclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLnN0YXJ0c1dpdGgoXCIvXCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gXCJodHRwczovL2Rpc2NvcmQuY29tXCIrYXZhdGFyVVJMXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGF2YXRhclVSTC5lbmRzV2l0aChcIj9zaXplPTEyOFwiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IGF2YXRhclVSTC5yZXBsYWNlKFwiP3NpemU9MTI4XCIsIFwiP3NpemU9NDA5NlwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFVzZXJuYW1lOiAke3VzZXIudXNlcm5hbWV9XHJcbisgRGlzY3JpbWluYXRvcjogJHt1c2VyLmRpc2NyaW1pbmF0b3J9XHJcbisgVGFnOiAke3VzZXIudGFnfVxyXG4rIElEOiAke3VzZXIuaWR9XHJcbisgQXZhdGFyOiAke3VzZXIuYXZhdGFyfVxyXG4rIEF2YXRhciBVUkw6ICR7YXZhdGFyVVJMfVxyXG4rIENyZWF0aW9uIERhdGU6ICR7KGNyZWF0ZWRBdC5nZXREYXRlKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0TW9udGgoKSsxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldEZ1bGxZZWFyKCkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfSAke2NyZWF0ZWRBdC5nZXRIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfWggJHtjcmVhdGVkQXQuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfW1pbiAke2NyZWF0ZWRBdC5nZXRTZWNvbmRzKCl9c1xyXG4rIEZsYWdzOiAke3VzZXIuZmxhZ3N9XHJcbisgSGFzIE5pdHJvOiAke3VzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gRW1haWw6ICR7dXNlci5lbWFpbH1cclxuLSAyRkE6ICR7dXNlci5tZmFFbmFibGVkID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBIYXMgQmVlbiBPbiBNb2JpbGU6ICR7dXNlci5tb2JpbGUgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIFBob25lOiAke3VzZXIucGhvbmUgfHwgXCJOb25lXCJ9XHJcbi0gVmVyaWZpZWQ6ICR7dXNlci52ZXJpZmllZH1gXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGlzdGljcygpe1xyXG5cclxuICAgICAgICBjb25zdCBndWlsZHMgPSBPYmplY3QudmFsdWVzKEd1aWxkTW9kdWxlLmdldEd1aWxkcygpKVxyXG4gICAgICAgIGNvbnN0IHJlbGF0aW9ucyA9IE9iamVjdC5rZXlzKHJlbGF0aW9uU2hpcE1vZHVsZS5nZXRSZWxhdGlvbnNoaXBzKCkpXHJcbiAgICAgICAgY29uc3QgZnJpZW5kcyA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNGcmllbmQoZSkpXHJcbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IHJlbGF0aW9ucy5maWx0ZXIoZSA9PiByZWxhdGlvblNoaXBNb2R1bGUuaXNCbG9ja2VkKGUpKVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgU2VydmVyIENvdW50OiAke2d1aWxkcy5sZW5ndGh9IHNlcnZlcnNcclxuKyBSZWxhdGlvbnM6ICR7cmVsYXRpb25zLmxlbmd0aH0gcmVsYXRpb25zXHJcbisgRnJpZW5kcyBDb3VudDogJHtmcmllbmRzLmxlbmd0aH0gZnJpZW5kc1xyXG4tIEJsb2NrZWQgVXNlcnMgQ291bnQ6ICR7YmxvY2tlZC5sZW5ndGh9IGJsb2NrZWQgdXNlcnNgXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5sZXQgaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGlnaGxpZ2h0KVswXVxyXG5sZXQgbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxyXG5cclxuY2xhc3MgQ29kZUNvbnRlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUxKW1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxyXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMiltZXNzYWdlTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1lc3NhZ2VDb250ZW50KVswXVxyXG4gICAgICAgIGlmKCFzY3JvbGxiYXJNb2R1bGUxKXNjcm9sbGJhck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lKVswXVxyXG4gICAgICAgIGlmKCFoaWdodGxpZ2h0SlMpaGlnaHRsaWdodEpTID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGlnaGxpZ2h0KVswXVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YCR7bWVzc2FnZU1vZHVsZTEubWFya3VwfSAke21lc3NhZ2VNb2R1bGUyLm1lc3NhZ2VDb250ZW50fWB9PlxyXG4gICAgICAgICAgICA8cHJlPlxyXG4gICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9e2Ake3Njcm9sbGJhck1vZHVsZTEuc2Nyb2xsYmFyR2hvc3RIYWlybGluZX0gaGxqc2B9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBoaWdodGxpZ2h0SlMuaGlnaGxpZ2h0KHRoaXMucHJvcHMubGFuZ3VhZ2UsIHRoaXMucHJvcHMuY29udGVudCkudmFsdWV9fT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2NvZGU+XHJcbiAgICAgICAgICAgIDwvcHJlPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59IiwiLy8gR29vZCBsdWNrIHRvIHJlYWQgbXkgY29kZSwgRXZlbiBtZSBjYW4ndCByZWFkIGl0IHByb3Blcmx5LlxyXG5cclxuaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIlxyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIlxyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiXHJcblxyXG5jb25zdCBrZXlzID0ge1xyXG4gICAgc2V0dGluZ1RpdGxlOiB1dWlkdjQoKVxyXG59XHJcbmxldCBmb3JtTW9kdWxlXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXRlczogW11cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIWZvcm1Nb2R1bGUpZm9ybU1vZHVsZSA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxyXG4gICAgICAgIC8qKiBcclxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzID0gWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcclxuICAgICAgICB9KS5mbGF0KCkpXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJcIiBzZWxlY3RhYmxlPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tcG9uZW50cyBhcmUgaGVyZSBmb3IgdGhlIHBsdWdpbiBkZXZzLiBUaGV5IGNhbiBxdWlja2x5IGVtYmVkIGFueSBjb21wb25lbnQgYmVsb3cgd2l0aCB0aGlzIHBhbmVsLlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1UZXh0PlxyXG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcD48L01hcmdpblRvcD5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cIm91dGxpbmVkXCIgc2l6ZT1cIm1lZGl1bVwiIGhvdmVyQ29sb3I9XCJncmVlblwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9BcGlzXCIpXHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9mb3JtTW9kdWxlLkZvcm1TZWN0aW9uPixcclxuICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5tYXAoY29tcCA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgaWYoY29tcC5BbGxQcmV2aWV3cylBbGxQcmV2aWV3cyA9IGNvbXAuQWxsUHJldmlld3NcclxuICAgICAgICAgICAgICAgIGxldCBvbkNoYW5nZSA9ICh0YWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc2V0U3RhdGUgPSAobmV3U3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVzOiBbT2JqZWN0LmFzc2lnbihzdGF0ZSwgbmV3U3RhdGUpXS5jb25jYXQodGhpcy5zdGF0ZS5zdGF0ZXMuZmlsdGVyKGUgPT4gZS5lbGVtICE9PSBjb21wKSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5zdGF0ZXMuZmluZChlID0+IGUuZWxlbSA9PT0gY29tcClcclxuICAgICAgICAgICAgICAgIGlmKCFzdGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYjogXCJwcmV2aWV3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW06IGNvbXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHt9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdGVzLnB1c2goc3RhdGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0UHJvcHMgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsID0ge31cclxuICAgICAgICAgICAgICAgICAgICBBbGxQcmV2aWV3cy5mb3JFYWNoKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxbT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXSA9IGNhdGVnb3J5WzBdW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlLm9wdGlvbnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxba2V5XSA9IEFsbFByZXZpZXdzLmZpbmQoZSA9PiBlLmZpbmQoZSA9PiBlW2tleV0pKVtzdGF0ZS5vcHRpb25zW2tleV1dW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlclByZXZpZXcgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcCwgZ2V0UHJvcHMoKSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHJlbmRlckNvZGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3ttYXJnaW46IFwiMjBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNYXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzeFwiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcImpzeFwiKX0vPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzXCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwicmVhY3RcIil9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2V0U3RyRm9yUHJvcCA9ICh2YWx1ZSwgY29tcFBhdGgsIGxhbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgJiYgdmFsdWUuJCR0eXBlb2YgJiYgKHZhbHVlLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCB2YWx1ZS4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb21wUGF0aCA9PT0gXCJMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcclxuICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxufX0sXHJcbiAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIixcclxuICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLFxyXG4gICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgfSwgY2xhc3NOYW1lOiBcImxjLXRhYi1ib3gtc2hhZG93XCIgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlLCBudWxsLCBcIlByZXZpZXcgdGFic1wiKVxyXG4gICAgKVxyXG4pYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgc3R5bGU9e3tcclxuICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXHJcbiAgICB9fT5cclxuICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+UHJldmlldyB0YWJzPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJZb3VyIGNvbXBvbmVudHMgaGVyZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgXCIgICAgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZW5lcmF0ZUNvZGUgPSBmdW5jdGlvbihsYW5nKXsgLy8gY29kZSBmb3JtYXR0aW5nIGlzIGhhcmRcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wTmFtZSA9IGNvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3JpZXMgPSBPYmplY3Qua2V5cyh3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBDYXRlZ29yeSA9IGNhdGVnb3JpZXMuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke2NvbXBDYXRlZ29yeX0uJHtjb21wTmFtZX1gXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBnZXRQcm9wcygpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW5Qcm9wID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoa2V5ID09IFwiY2hpbGRyZW5cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5Qcm9wID0gZ2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSBrZXkrXCI9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvcHNba2V5XSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gYHske2dldFN0ckZvclByb3AocHJvcHNba2V5XSwgY29tcFBhdGgsIGxhbmcpfX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3BlblRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlblByb3Ape1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsb3NlVGFnID0gYDwvJHtjb21wUGF0aH0+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke29wZW5UYWd9XFxuICAgICR7Y2hpbGRyZW5Qcm9wfVxcbiR7Y2xvc2VUYWd9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UYWcgPSBgPCR7Y29tcFBhdGh9ICR7cHJvcFN0cmluZ3Muam9pbihcIiBcIil9Lz5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlblRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4gfHwgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGRyZW4gJiYgY2hpbGRyZW4uJCR0eXBlb2YgJiYgKGNoaWxkcmVuLiQkdHlwZW9mID09PSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSB8fCBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gMHhlYWM3KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGdldFN0ckZvclByb3AoY2hpbGRyZW4sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmlzaWJsZUtleSA9IC9bXlxcd1xcZF9dL2cudGVzdChrZXkpID8gSlNPTi5zdHJpbmdpZnkoa2V5KSA6IGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IHZpc2libGVLZXkrXCI6IFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJvcHNba2V5XSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gZ2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZykuc3BsaXQoXCJcXG5cIikubWFwKChzdHIsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PT0gMClyZXR1cm4gc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIiAgICBcIiArIHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oXCJcXG5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLnB1c2goc3RyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcE9iamVjdCA9IFwie1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByb3BTdHJpbmdzLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5mb3JFYWNoKChzdHIsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gaSA9PT0gcHJvcFN0cmluZ3MubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpcnN0ID0gaSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0ZpcnN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIixcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiXFxuICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc0xhc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9XCJcXG59XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW5EYXRhID0gdHlwZW9mIGNoaWxkcmVuID09PSBcInN0cmluZ1wiICYmIGNoaWxkcmVuLnN0YXJ0c1dpdGgoXCJSZWFjdC5jcmVhdGVFbGVtZW50XCIpID8gY2hpbGRyZW4gOiBKU09OLnN0cmluZ2lmeShjaGlsZHJlbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KCR7Y29tcFBhdGh9LCAke3Byb3BPYmplY3R9LCAke2NoaWxkcmVuRGF0YX0pYFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBoZWxwID0gY29tcC5oZWxwIHx8IHt9XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5mbyA9IGhlbHAuaW5mbyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5pbmZvfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IHdhcm4gPSBoZWxwLndhcm4gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJ3YXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAud2Fybn1cclxuICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICAgICAgICAgIGxldCBkYW5nZXIgPSBoZWxwLmRhbmdlciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmRhbmdlcn1cclxuICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IGhlbHAuZXJyb3IgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJlcnJvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmVycm9yfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBoZWxwLnN1Y2Nlc3MgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJzdWNjZXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuc3VjY2Vzc31cclxuICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZX1cclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nc1RpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIHtpbmZvfVxyXG4gICAgICAgICAgICAgICAgICAgIHtzdWNjZXNzfVxyXG4gICAgICAgICAgICAgICAgICAgIHt3YXJufVxyXG4gICAgICAgICAgICAgICAgICAgIHtlcnJvcn1cclxuICAgICAgICAgICAgICAgICAgICB7ZGFuZ2VyfVxyXG4gICAgICAgICAgICAgICAgICAgIHtBbGxQcmV2aWV3cy5tYXAoY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5vbkNsaWNrKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLnRleHQpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0uY2hpbGRyZW4pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnkubGVuZ3RoID09PSAxKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7a2V5fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biBvcHRpb25zPXtjYXRlZ29yeS5tYXAoKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0LVwiK2luZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogSlNPTi5zdHJpbmdpZnkoZVtPYmplY3Qua2V5cyhlKVswXV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9IHZhbHVlPXtcIm9wdC1cIisoc3RhdGUub3B0aW9uc1trZXldIHx8IFwiMFwiKX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUub3B0aW9ucywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleV06ICh2YWx1ZS52YWx1ZSB8fCBcIjBcIikucmVwbGFjZShcIm9wdC1cIiwgXCJcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gc2VhcmNoYWJsZT17dHJ1ZX0vPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Cb3R0b206IFwiOHB4XCJ9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGFicyB0YWJzPXtbe2xhYmVsOiBcIlByZXZpZXdcIiwgaWQ6IFwicHJldmlld1wifSwge2xhYmVsOiBcIkNvZGVcIiwgaWQ6IFwiY29kZVwifV19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU9e3N0YXRlLnRhYn0gY2hpbGRyZW49e3N0YXRlLnRhYiA9PT0gXCJwcmV2aWV3XCIgPyByZW5kZXJQcmV2aWV3KCkgOiByZW5kZXJDb2RlKCl9IG9uQ2hhbmdlPXtvbkNoYW5nZX0vPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVuZGVycygpe1xyXG5cclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tIFwiLi9pY29ucy9lZGl0XCI7XHJcbmltcG9ydCBEZWxldGVJY29uIGZyb20gXCIuL2ljb25zL2RlbGV0ZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2NvbXBvbmVudHMvc3dpdGNoXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgeyBwcm9jZXNzRmlsZSB9IGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcbmNvbnN0IGFuY2hvckNsYXNzZXMgPSBCRFYyLmFuY2hvckNsYXNzZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUGx1Z2luQ2FyZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0dGluZ3MgPSB0aGlzLnNob3dTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luICYmIHR5cGVvZih0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKSA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NQYW5lbCA9IFwiXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdCA9IHRoaXMuZWRpdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlID0gdGhpcy5kZWxldGUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuZW5hYmxlZCxcclxuICAgICAgICAgICAgc2V0dGluZ3M6IGZhbHNlLFxyXG4gICAgICAgICAgICByZWxvYWRzOiAwLFxyXG4gICAgICAgICAgICB0cnVzdGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnBhbmVsUmVmLmN1cnJlbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzZXR0aW5nc09wZW46IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmFwcGVuZENoaWxkKHRoaXMuc2V0dGluZ3NQYW5lbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy0zXCJdKSByZXR1cm47XHJcbiAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNIaWRkZW4gPSAoY29udGFpbmVyLCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighY29udGFpbmVyKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihgQ29udGFpbmVyIGlzIHVuZGVmaW5lZC5gKSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZVRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZUJvdHRvbSA9IGVUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNOb2RlID0gdGhpcy5yZWZzLmNhcmROb2RlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzTm9kZS5jbG9zZXN0KFwiZGl2W2NsYXNzKj1cXFwiY29udGVudFJlZ2lvblNjcm9sbGVyLVxcXCJdXCIpXHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyLCB0aGlzTm9kZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGVPZmZzZXQgPSBET00ub2Zmc2V0KHRoaXNOb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gRE9NLm9mZnNldChjb250YWluZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpc05vZGVPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AgLSAzMDtcclxuICAgICAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPiBvcmlnaW5hbCkgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsICsgKHByb2dyZXNzICogKGVuZFBvaW50IC0gb3JpZ2luYWwpKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBvcmlnaW5hbCAtIChwcm9ncmVzcyAqIChvcmlnaW5hbCAtIGVuZFBvaW50KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHRyeSB7IHRoaXMuc2V0dGluZ3NQYW5lbCA9IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwoKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgdGhpcy5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1vcGVuIHVpLXN3aXRjaC1pdGVtXCIsIHJlZjogXCJjYXJkTm9kZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7c3R5bGU6IHtcImZsb2F0XCI6IFwicmlnaHRcIiwgXCJjdXJzb3JcIjogXCJwb2ludGVyXCJ9LCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcy5zZXR0aW5nc3BhbmVsLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFhTdmcsIG51bGwpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke3RoaXMubmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogXCJzZXR0aW5nc3BhbmVsXCJ9KSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCAhPT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIiwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtfX2h0bWw6IHRoaXMuc2V0dGluZ3NQYW5lbH19KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRUaXRsZShuYW1lLCB2ZXJzaW9uLCBhdXRob3IpIHtcclxuICAgICAgICBjb25zdCB0aXRsZSA9IFwie3tuYW1lfX0gdnt7dmVyc2lvbn19IGJ5IHt7YXV0aG9yfX1cIi5zcGxpdCgvKHt7W0EtWmEtel0rfX0pLyk7XHJcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7bmFtZX19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW25hbWVJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcIm5hbWUgYmRhLW5hbWVcIn0sIG5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHZlcnNpb25JbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e3ZlcnNpb259fVwiKTtcclxuICAgICAgICBpZiAobmFtZUluZGV4KSB0aXRsZVt2ZXJzaW9uSW5kZXhdID0gUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJ2ZXJzaW9uIGJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCBhdXRob3JJbmRleCA9IHRpdGxlLmZpbmRJbmRleChzID0+IHMgPT0gXCJ7e2F1dGhvcn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImF1dGhvciBiZGEtYXV0aG9yXCJ9O1xyXG4gICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5jbGFzc05hbWUgKz0gYCAke2FuY2hvckNsYXNzZXMuYW5jaG9yfSAke2FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gO1xyXG4gICAgICAgICAgICAgICAgcHJvcHMudGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yLmxpbmspIHByb3BzLmhyZWYgPSBhdXRob3IubGluaztcclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IuaWQpIHByb3BzLm9uQ2xpY2sgPSAoKSA9PiB7QkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7IEJEVjIub3BlbkRNKGF1dGhvci5pZCk7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aXRsZVthdXRob3JJbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KGF1dGhvci5saW5rIHx8IGF1dGhvci5pZCA/IFwiYVwiIDogXCJzcGFuXCIsIHByb3BzLCBhdXRob3IubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aXRsZS5mbGF0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUxpbmsodGl0bGUsIHVybCkge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0ge2NsYXNzTmFtZTogXCJiZGEtbGluayBiZGEtbGluay13ZWJzaXRlXCIsIHRhcmdldDogXCJfYmxhbmtcIn07XHJcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwic3RyaW5nXCIpIHByb3BzLmhyZWYgPSB1cmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZih1cmwpID09IFwiZnVuY3Rpb25cIikgcHJvcHMub25DbGljayA9IChldmVudCkgPT4ge2V2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB1cmwoKTt9O1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHByb3BzLCB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZUJ1dHRvbih0aXRsZSwgY2hpbGRyZW4sIGFjdGlvbikge1xyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgY29sb3I9XCJibGFja1wiIHNpZGU9XCJ0b3BcIiB0ZXh0PXt0aXRsZX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtYWRkb24tYnV0dG9uXCIgb25DbGljaz17YWN0aW9ufT57Y2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICAgPC9Ub29sdGlwV3JhcD47XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICB0aGlzLnVubW91bnRlZCA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlua3MoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBbXTtcclxuICAgICAgICBjb25zdCBhZGRvbiA9IHRoaXMucHJvcHMuYWRkb247XHJcbiAgICAgICAgaWYgKGFkZG9uLndlYnNpdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIldlYnNpdGVcIiwgYWRkb24ud2Vic2l0ZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5zb3VyY2UpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlNvdXJjZVwiLCBhZGRvbi5zb3VyY2UpKTtcclxuICAgICAgICBpZiAoYWRkb24uaW52aXRlKSB7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlN1cHBvcnQgU2VydmVyXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RlciA9IC9cXC5nZ1xcLyguKikkLztcclxuICAgICAgICAgICAgICAgIGxldCBjb2RlID0gYWRkb24uaW52aXRlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3Rlci50ZXN0KGNvZGUpKSBjb2RlID0gY29kZS5tYXRjaCh0ZXN0ZXIpWzFdO1xyXG4gICAgICAgICAgICAgICAgQkRWMi5MYXllclN0YWNrLnBvcExheWVyKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChjb2RlKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWRkb24uZG9uYXRlKSBsaW5rcy5wdXNoKHRoaXMubWFrZUxpbmsoXCJEb25hdGVcIiwgYWRkb24uZG9uYXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnBhdHJlb24pIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIlBhdHJlb25cIiwgYWRkb24ucGF0cmVvbikpO1xyXG4gICAgICAgIHJldHVybiBsaW5rcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZm9vdGVyKCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5saW5rcztcclxuICAgICAgICByZXR1cm4gKGxpbmtzLmxlbmd0aCB8fCB0aGlzLmhhc1NldHRpbmdzKSAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLWZvb3RlciBiZGEtZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tbGlua3MgYmRhLWxpbmtzXCJ9LFxyXG4gICAgICAgICAgICAgICAgLi4uKGxpbmtzLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+IGluZGV4IDwgbGlua3MubGVuZ3RoIC0gMSA/IFtlbGVtZW50LCBcIiB8IFwiXSA6IGVsZW1lbnQpLmZsYXQoKSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdGhpcy5oYXNTZXR0aW5ncyAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge29uQ2xpY2s6IHRoaXMuc2hvd1NldHRpbmdzLCBjbGFzc05hbWU6IFwiYmQtYnV0dG9uIGJkYS1zZXR0aW5ncy1idXR0b25cIiwgZGlzYWJsZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9LCBcIlNldHRpbmdzXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnRvZ2dsZSAmJiB0aGlzLnByb3BzLnRvZ2dsZSh0aGlzLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9KTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KCkge3RoaXMucHJvcHMuZWRpdCh0aGlzLm5hbWUpO31cclxuICAgIGRlbGV0ZSgpIHt0aGlzLnByb3BzLnJlbW92ZSh0aGlzLm5hbWUpO31cclxuICAgIHJlbG9hZCgpIHt0aGlzLnByb3BzLnJlbG9hZCh0aGlzLm5hbWUpO31cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXROYW1lKCkgOiB0aGlzLnByb3BzLmFkZG9uLm5hbWUpO31cclxuICAgIGdldCBhdXRob3IoKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiB0aGlzLnByb3BzLmFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLmRlc2NyaXB0aW9uKTt9XHJcbiAgICBnZXQgdmVyc2lvbigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRWZXJzaW9uKCkgOiB0aGlzLnByb3BzLmFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3MpIHJldHVybiB0aGlzLnNldHRpbmdzQ29tcG9uZW50O1xyXG4gICAgICAgIGNvbnN0IHthdXRob3JJZCwgYXV0aG9yTGlua30gPSB0aGlzLnByb3BzLmFkZG9uO1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZSA9IHt9XHJcbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xyXG4gICAgICAgICAgICBpZighdGhpcy5pc1NjYW5uaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTY2FubmluZyA9IHRydWVcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHJlc29sdmUodGhpcy5wcm9wcy5hZGRvbi5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgPyBjb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCB0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMudW5tb3VudGVkKXJldHVyblxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJ1c3RlZDogcmVzdWx0LnN1c3BlY3QgPyBcInN1c3BlY3RcIiA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgKCkgPT4ge30pXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaXNUcnVzdGVkID09PSBcInN1c3BlY3RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcInJnYigyNDAsIDcxLCA3MSlcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkIGJkLWFkZG9uLWNhcmQgc2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCIsIHN0eWxlfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24taGVhZGVyIGJkYS1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZC10aXRsZSBiZGEtaGVhZGVyLXRpdGxlXCJ9LCB0aGlzLmJ1aWxkVGl0bGUodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHtuYW1lOiB0aGlzLmF1dGhvciwgaWQ6IGF1dGhvcklkLCBsaW5rOiBhdXRob3JMaW5rfSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWFkZG9uLWNvbnRyb2xzIGJkYS1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5lZGl0ICYmIHRoaXMubWFrZUJ1dHRvbihcIkVkaXRcIiwgPEVkaXRJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5lZGl0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZW1vdmUgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRGVsZXRlXCIsIDxEZWxldGVJY29uIGNsYXNzTmFtZT1cImJkLWljb25cIiAvPiwgdGhpcy5kZWxldGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbG9hZCAmJiB0aGlzLm1ha2VCdXR0b24oXCJSZWxvYWRcIiwgPFJlbG9hZEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLnJlbG9hZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1zY3JvbGxlci13cmFwIGJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyIGJkLWFkZG9uLWRlc2NyaXB0aW9uIGJkYS1kZXNjcmlwdGlvbiBzY3JvbGxlclwifSwgdGhpcy5kZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdGhpcy5mb290ZXJcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZS5yZW5kZXI7XHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWMkNfUGx1Z2luQ2FyZC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyIsImltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gXCIuL2Vycm9yQm91bmRhcnlcIjtcclxuaW1wb3J0IENvbnRlbnRDb2x1bW4gZnJvbSBcIi4vY29udGVudENvbHVtblwiO1xyXG5pbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi9yZWxvYWRJY29uXCI7XHJcbmltcG9ydCBBZGRvbkNhcmQgZnJvbSBcIi4vYWRkb25jYXJkXCI7XHJcbmltcG9ydCBEcm9wZG93biBmcm9tIFwiLi9jb21wb25lbnRzL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCBTZWFyY2ggZnJvbSBcIi4vY29tcG9uZW50cy9zZWFyY2hcIjtcclxuXHJcbmltcG9ydCB7c2V0dGluZ3NDb29raWUsIHBsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4uL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4uL21vZHVsZXMvYmRBcGlcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgYmRFdmVudHMgZnJvbSBcIi4uL21vZHVsZXMvYmRFdmVudHNcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gdGhpcy5vbkFkZG9uQ2hhbmdlcy5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Gb2xkZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGwgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGw7XHJcbiAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5QYXRoIHx8IHNoZWxsLm9wZW5JdGVtO1xyXG4gICAgICAgIG9wZW4odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IGFbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gYi5wbHVnaW4gJiYgYi5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYi5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpICA6IGJbdGhpcy5zdGF0ZS5zb3J0XTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihmaXJzdCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0LnRvTG9jYWxlTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShzZWNvbmQudG9Mb2NhbGVMb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdCA+IHNlY29uZCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPiBmaXJzdCkgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuYXNjZW5kaW5nKSBzb3J0ZWRBZGRvbnMucmV2ZXJzZSgpO1xyXG4gICAgICAgIGNvbnN0IHJlbmRlcmVkID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYSA9IDA7IGEgPCBzb3J0ZWRBZGRvbnMubGVuZ3RoOyBhKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkb24gPSBzb3J0ZWRBZGRvbnNbYV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0QXV0aG9yKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5nZXREZXNjcmlwdGlvbihhZGRvbik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSBtYXRjaGVzID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvcikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgYXV0aG9yLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24pIG1hdGNoZXMgPSBtYXRjaGVzIHx8IGRlc2NyaXB0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgdmVyc2lvbi50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc3RhdGUucXVlcnkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoYWRkb24pO1xyXG4gICAgICAgICAgICByZW5kZXJlZC5wdXNoKDxFcnJvckJvdW5kYXJ5PjxBZGRvbkNhcmQgey4uLnByb3BzfSByZWxvYWQ9eyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiB0aGlzLm1hbmFnZXIucmVsb2FkLmJpbmQodGhpcy5tYW5hZ2VyKX0gLz48L0Vycm9yQm91bmRhcnk+KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5hbWUoYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IGFkZG9uLm5hbWUpO31cclxuICAgIGdldEF1dGhvcihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0QXV0aG9yKCkgOiBhZGRvbi5hdXRob3IpO31cclxuICAgIGdldERlc2NyaXB0aW9uKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXREZXNjcmlwdGlvbigpIDogYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldFZlcnNpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IGFkZG9uLnZlcnNpb24pO31cclxuXHJcbiAgICByZW5kZXJDaGVja1VwZGF0ZXMoKXtcclxuICAgICAgICBpZighd2luZG93LlplcmVzUGx1Z2luTGlicmFyeSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKCF3aW5kb3cuUGx1Z2luVXBkYXRlcylyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHR5cGVvZiB3aW5kb3cuUGx1Z2luVXBkYXRlcy5jaGVja0FsbCAhPT0gXCJmdW5jdGlvblwiKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXRoaXMuaXNQbHVnaW5zKXJldHVybiBudWxsXHJcblxyXG4gICAgICAgIHJldHVybiA8VG9vbHRpcFdyYXAgdGV4dD1cIkNoZWNrcyBmb3IgdXBkYXRlcyBvZiBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGlzIGZlYXR1cmUuIFJpZ2h0LWNsaWNrIGZvciBhIGxpc3QuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7bWFyZ2luTGVmdDogXCIxMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBjb2xvcj1cImJyYW5kXCIgbG9vaz1cImZpbGxlZFwiIHNpemU9XCJtaW5cIiBob3ZlckNvbG9yPVwiZGVmYXVsdFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIlBsdWdpbiB1cGRhdGUgY2hlY2sgaW4gcHJvZ3Jlc3MuXCIsIHt0eXBlOiBcImluZm9cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBjb21wbGV0ZS5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBjaGVja2luZyB1cGRhdGUuXCIsIHt0eXBlOiBcImVycm9yXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfX0gd3JhcHBlcj17ZmFsc2V9IGRpc2FibGVkPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2hlY2sgZm9yIFVwZGF0ZXNcclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByZWZyZXNoSWNvbiA9IDxUb29sdGlwIGNvbG9yPVwiYmxhY2tcIiBwb3NpdGlvbj1cInRvcFwiIHRleHQ9XCJSZWxvYWQgTGlzdFwiPlxyXG4gICAgICAgICAgICB7KHByb3BzKSA9PiBcclxuICAgICAgICAgICAgPFJlbG9hZEljb24gey4uLnByb3BzfSBjbGFzc05hbWU9XCJiZC1pY29uIGJkLXJlbG9hZCBiZC1yZWxvYWQtaGVhZGVyXCIgc2l6ZT1cIjE4cHhcIiBvbkNsaWNrPXthc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1BsdWdpbnMpIHBsdWdpbk1vZHVsZS51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoZW1lTW9kdWxlLnVwZGF0ZVRoZW1lTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICB9fSAvPlxyXG4gICAgICAgICAgICB9PC9Ub29sdGlwPjtcclxuICAgICAgICBjb25zdCBhZGRvbkNhcmRzID0gdGhpcy5nZXRBZGRvbnMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIDxDb250ZW50Q29sdW1uIHRpdGxlPXtgJHt0aGlzLnByb3BzLnR5cGUudG9VcHBlckNhc2UoKX3igJQke2FkZG9uQ2FyZHMubGVuZ3RofWB9PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjbGFzc05hbWU9XCJiZC1idXR0b24gYmQtcGZidG5cIiBvbkNsaWNrPXt0aGlzLm9wZW5Gb2xkZXIuYmluZCh0aGlzKX0+T3BlbiB7dGhpcy5pc1BsdWdpbnMgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwifSBGb2xkZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAge3RoaXMucmVuZGVyQ2hlY2tVcGRhdGVzKCl9XHJcbiAgICAgICAgICAgIHshc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgcmVmcmVzaEljb259XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtY29udHJvbHMgYmQtYWRkb24tY29udHJvbHNcIj5cclxuICAgICAgICAgICAgICAgIDxTZWFyY2ggb25DaGFuZ2U9e3RoaXMuc2VhcmNofSBwbGFjZWhvbGRlcj17YFNlYXJjaCAke3RoaXMucHJvcHMudHlwZX0uLi5gfSAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1kcm9wZG93bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPlNvcnQgYnk6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuc29ydE9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLnNvcnR9IHN0eWxlPVwidHJhbnNwYXJlbnRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+T3JkZXI6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIG9wdGlvbnM9e3RoaXMuZGlyZWN0aW9uc30gb25DaGFuZ2U9e3RoaXMucmV2ZXJzZX0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmRhLXNsaXN0IGJkLWFkZG9uLWxpc3RcIj57YWRkb25DYXJkc308L2Rpdj5cclxuICAgICAgICA8L0NvbnRlbnRDb2x1bW4+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ2FyZExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENhcmRMaXN0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCRExvZ28gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInN2Z1wiLFxyXG4gICAgICAgICAgICB7aGVpZ2h0OiBcIjEwMCVcIiwgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ28gXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSwgc3R5bGU6IHtmaWxsUnVsZTogXCJldmVub2RkXCIsIGNsaXBSdWxlOiBcImV2ZW5vZGRcIiwgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLCBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwifSwgdmlld0JveDogXCIwIDAgMjAwMCAyMDAwXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtZXRhZGF0YVwiLCBudWxsKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGVmc1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cxXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIyMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjE1XCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMjU1LDI1NSwyNTUsMC4xNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93M1wifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MylcIn0sIGQ6IFwiTTExOTUuNDQrMTM1LjQ0MkwxMTk1LjQ0KzEzNS40NDJMOTk3LjYrMTM2LjQ0MkMxMDI0LjIrMTQ5Ljc0MisxMTcwLjM0KzE2My41NDIrMTE5My42NCsxNzkuNzQyQzEyNjQuMzQrMjI4Ljg0MisxMzE5Ljc0KzI5MS4yNDIrMTM1OC4yNCszNjUuMDQyQzEzOTguMTQrNDQxLjY0MisxNDE5Ljc0KzUzMC42NDIrMTQyMi41NCs2MjkuNjQyTDE0MjIuNTQrNjMwLjg0MkwxNDIyLjU0KzYzMi4wNDJDMTQyMi41NCs3NzMuMTQyKzE0MjIuNTQrMTIyOC4xNCsxNDIyLjU0KzEzNjkuMTRMMTQyMi41NCsxMzcwLjM0TDE0MjIuNTQrMTM3MS41NEMxNDE5Ljg0KzE0NzAuNTQrMTM5OC4yNCsxNTU5LjU0KzEzNTguMjQrMTYzNi4xNEMxMzE5Ljc0KzE3MDkuOTQrMTI2NC40NCsxNzcyLjM0KzExOTMuNjQrMTgyMS40NEMxMTcxLjA0KzE4MzcuMTQrMTAyNS43KzE4NTAuNTQrMTAwMCsxODYzLjU0TDExOTMuNTQrMTg2NC41NEMxNTM5Ljc0KzE4NjYuNDQrMTg2NC41NCsxNjkzLjM0KzE4NjQuNTQrMTI5Ni42NEwxODY0LjU0KzcxNi45NDJDMTg2Ni40NCszMTIuNDQyKzE1NDEuNjQrMTM1LjQ0MisxMTk1LjQ0KzEzNS40NDJaXCIsIGZpbGw6IFwiIzE3MTcxN1wiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cyKVwifSwgZDogXCJNMTY5NS41NCs2MzEuNDQyQzE2ODUuODQrMjc4LjA0MisxNDA5LjM0KzEzNS40NDIrMTA1Mi45NCsxMzUuNDQyTDM2MS43NCsxMzYuNDQyTDgwMy43NCs0OTAuNDQyTDEwNjAuNzQrNDkwLjQ0MkMxMzM1LjI0KzQ5MC40NDIrMTMzNS4yNCs4MzUuMzQyKzEwNjAuNzQrODM1LjM0MkwxMDYwLjc0KzExNjQuODRDMTE1MC4yMisxMTY0Ljg0KzEyMTAuNTMrMTIwMS40OCsxMjQxLjY4KzEyNTAuODdDMTMwNi4wNysxMzUzKzEyNDUuNzYrMTUwOS42NCsxMDYwLjc0KzE1MDkuNjRMMzYxLjc0KzE4NjMuNTRMMTA1Mi45NCsxODY0LjU0QzE0MDkuMjQrMTg2NC41NCsxNjg1Ljc0KzE3MjEuOTQrMTY5NS41NCsxMzY4LjU0QzE2OTUuNTQrMTIwNS45NCsxNjUxLjA0KzEwODQuNDQrMTU3Mi42NCs5OTkuOTQyQzE2NTEuMDQrOTE1LjU0MisxNjk1LjU0Kzc5NC4wNDIrMTY5NS41NCs2MzEuNDQyWlwiLCBmaWxsOiBcIiMzRTgyRTVcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MSlcIn0sIGQ6IFwiTTE0NjkuMjUrNjMxLjQ0MkMxNDU5LjU1KzI3OC4wNDIrMTE4My4wNSsxMzUuNDQyKzgyNi42NSsxMzUuNDQyTDEzNS40NSsxMzUuNDQyTDEzNS40NSsxMDA0QzEzNS40NSsxMDA0KzEzNS40MjcrMTI1NS4yMSszNTUuNjI2KzEyNTUuMjFDNTc1LjgyNSsxMjU1LjIxKzU3NS44NDgrMTAwNCs1NzUuODQ4KzEwMDRMNTc3LjQ1KzQ5MC40NDJMODM0LjQ1KzQ5MC40NDJDMTEwOC45NSs0OTAuNDQyKzExMDguOTUrODM1LjM0Mis4MzQuNDUrODM1LjM0Mkw2NjQuNjUrODM1LjM0Mkw2NjQuNjUrMTE2NC44NEw4MzQuNDUrMTE2NC44NEM5MjMuOTMyKzExNjQuODQrOTg0LjI0NCsxMjAxLjQ4KzEwMTUuMzkrMTI1MC44N0MxMDc5Ljc4KzEzNTMrMTAxOS40NysxNTA5LjY0KzgzNC40NSsxNTA5LjY0TDEzNS40NSsxNTA5LjY0TDEzNS40NSsxODY0LjU0TDgyNi42NSsxODY0LjU0QzExODIuOTUrMTg2NC41NCsxNDU5LjQ1KzE3MjEuOTQrMTQ2OS4yNSsxMzY4LjU0QzE0NjkuMjUrMTIwNS45NCsxNDI0Ljc1KzEwODQuNDQrMTM0Ni4zNSs5OTkuOTQyQzE0MjQuNzUrOTE1LjU0MisxNDY5LjI1Kzc5NC4wNDIrMTQ2OS4yNSs2MzEuNDQyWlwiLCBmaWxsOiBcIiNGRkZGRkZcIiwgb3BhY2l0eTogXCIxXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ2hlY2tib3ggZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwibGlcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3ggXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveCwgb25DbGljazogdGhpcy5vbkNsaWNrfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtaW5uZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hJbm5lcilbMF0uY2hlY2tib3hJbm5lcn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuY2hlY2tib3hFbGVtZW50KVswXS5jaGVja2JveEVsZW1lbnQsIGNoZWNrZWQ6IHRoaXMuc3RhdGUuY2hlY2tlZCwgb25DaGFuZ2U6ICgpID0+IHt9LCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLmlkLCAhdGhpcy5zdGF0ZS5jaGVja2VkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgY2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IEFycm93IGZyb20gXCIuLi9pY29ucy9kb3duYXJyb3dcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtvcGVuOiBmYWxzZSwgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUgfHwgdGhpcy5wcm9wcy5vcHRpb25zWzBdLnZhbHVlfTtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dNZW51ID0gdGhpcy5zaG93TWVudS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGlkZU1lbnUgPSB0aGlzLmhpZGVNZW51LmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnUoZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IHRydWV9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTWVudSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiBmYWxzZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmFsdWV9KTtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNoYW5nZSkgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGVkKCkge3JldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT0gdGhpcy5zdGF0ZS52YWx1ZSk7fVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcChvcHQgPT4gXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdC1vcHRpb24ke3NlbGVjdGVkLnZhbHVlID09IG9wdC52YWx1ZSA/IFwiIHNlbGVjdGVkXCIgOiBcIlwifWB9IG9uQ2xpY2s9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzLCBvcHQudmFsdWUpfT57b3B0LmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLnByb3BzLnN0eWxlID09IFwidHJhbnNwYXJlbnRcIiA/IFwiIGJkLXNlbGVjdC10cmFuc3BhcmVudFwiIDogXCJcIjtcclxuICAgICAgICBjb25zdCBpc09wZW4gPSB0aGlzLnN0YXRlLm9wZW4gPyBcIiBtZW51LW9wZW5cIiA6IFwiXCI7XHJcbiAgICAgICAgcmV0dXJuICA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcFwiPlxyXG4vLyA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj57dGhpcy5wcm9wcy5sYWJlbH08L2xhYmVsPlxyXG4vLyA8ZGl2IGNsYXNzTmFtZT17YGJkLXNlbGVjdCR7c3R5bGV9JHtpc09wZW59YH0gb25DbGljaz17dGhpcy5zaG93TWVudX0gcmVmPXt0aGlzLmRyb3Bkb3dufT5cclxuLy8gICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWNvbnRyb2xzXCI+XHJcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuLy8gICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuLy8gICAgIDwvZGl2PlxyXG4vLyA8L2Rpdj5cclxuLy8ge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbi8vIDwvZGl2PjsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiLi4vaWNvbnMvc2VhcmNoXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlYXJjaC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NvbnRlbnRDb2x1bW4gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgZGlzcGxheU5hbWUoKSB7cmV0dXJuIFwiQ29udGVudENvbHVtblwiO31cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9sZXQgY29udGVudE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW4pWzBdXHJcbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5wcm9wcy50aXRsZSA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgdGhpcy5wcm9wcy50aXRsZSkgOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uICsgXCIgXCIrY29udGVudE1vZHVsZS5jb250ZW50Q29sdW1uRGVmYXVsdCtcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCIsIHN0eWxlOiB7cGFkZGluZzogXCI2MHB4IDQwcHggMHB4XCJ9fSxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4uL21vZHVsZXMvZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcbmltcG9ydCBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZnJvbSBcIi4vY3NzRWRpdG9yRGV0YWNoZWRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnByb3BzLmxpbmVzID0gMDtcclxuICAgICAgICBzZWxmLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHNlbGYuYXR0YWNoID0gc2VsZi5hdHRhY2guYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaGVkRWRpdG9yID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCwge2F0dGFjaDogc2VsZi5hdHRhY2h9KTtcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2ggPSBzZWxmLmRldGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdGhpcy5wcm9wcy5kZXRhY2hlZCB8fCBCRFYyLmVkaXRvckRldGFjaGVkXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5kZXRhY2hlZCAmJiAhc2VsZi5zdGF0ZS5kZXRhY2hlZCkge1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5kZXRhY2hlZFJvb3QpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2RlTWlycm9yKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBidG9hKHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9tb25va2FpXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gYXRvYihfY2Nzcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjY3NzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmICghX3Jvb3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluamVjdFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwLnNwbGl0KFwiIFwiKVswXSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJkLWRldGFjaGVkLWNzcy1lZGl0b3JcIiwgaWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1lZGl0b3JcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWlubmVycGFuZVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiBzZWxmLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiYXR0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gYXR0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImF0dGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKERPTS5xdWVyeShcIiNlZGl0b3ItZGV0YWNoZWRcIikpIHNlbGYucHJvcHMuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoc2VsZi5yb290KTtcclxuICAgICAgICAgICAgICAgIHNlbGYucm9vdC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwidXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJzYXZlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRFcnJvckJvdW5kYXJ5IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgIHRoaXMuc3RhdGUgPSB7aGFzRXJyb3I6IGZhbHNlfTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaCgpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7aGFzRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwicmVhY3QtZXJyb3JcIn0sIFwiQ29tcG9uZW50IEVycm9yXCIpOyAgXHJcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuOyBcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBCREVycm9yQm91bmRhcnkucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMFYwelwiLz48cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3duQXJyb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xMiA5LjI5TDEyIDEzLjE3bDMuODgtMy44OGMuMzktLjM5IDEuMDItLjM5IDEuNDEgMCAuMzkuMzkuMzkgMS4wMiAwIDEuNDFsLTQuNTkgNC41OWMtLjM5LjM5LTEuMDIuMzktMS40MSAwTDYuNyAxMC43Yy0uMzktLjM5LS4zOS0xLjAyIDAtMS40MS4zOS0uMzggMS4wMy0uMzkgMS40MiAwelwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJ7LyogPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ3aGl0ZVwiIHdpZHRoPVwiMThweFwiIGhlaWdodD1cIjE4cHhcIj5cclxuICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbjwvc3ZnPiAqL31cclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMThweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEzIDNjLTQuOTcgMC05IDQuMDMtOSA5SDFsMy44OSAzLjg5LjA3LjE0TDkgMTJINmMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuOTMgMC0zLjY4LS43OS00Ljk0LTIuMDZsLTEuNDIgMS40MkM4LjI3IDE5Ljk5IDEwLjUxIDIxIDEzIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05em0tMSA1djVsNC4yOCAyLjU0LjcyLTEuMjEtMy41LTIuMDhWOEgxMnpcIi8+XHJcbiAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luVG9wNjApWzBdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJnaW5Ub3AgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZSltYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Ub3A2MH0+PC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0UlBDLCBzZXR0aW5nc1JQQyB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQ3VzdG9tUmljaFByZXNlbmNlIGZyb20gXCIuLi9tb2R1bGVzL0N1c3RvbVJpY2hQcmVzZW5jZVwiXHJcbmltcG9ydCB0aW1lc3RhbXBSZW5kZXIgZnJvbSBcIi4vdGltZXN0YW1wUmVuZGVyXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QcmVzZW5jZVNldHRpbmdzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpIHx8IGRlZmF1bHRSUEMsXHJcbiAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlldyA9IG51bGxcclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMgPSBuZXcgU2V0KClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVXaGVuRmV0Y2hlZChjb21wKXtcclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5hZGQoY29tcClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtJbnB1dFRleHR9IHNldHRpbmcgXHJcbiAgICAgKi9cclxuICAgIG9uQ2hhbmdlKHNldHRpbmcsIHZhbHVlKXtcclxuICAgICAgICBsZXQgZGVmYXVsdFNldHRpbmcgPSBSUENQcm9wcy5maW5kKGUgPT4gZS5pZCA9PT0gc2V0dGluZy5wcm9wcy5pZClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIHRoaXMuc3RhdGUuZGF0YSwge1xyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHRTZXR0aW5nLmlkXTogISF2YWx1ZSA/IHZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLnN0YXRlLmFzc2V0c1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYoc2V0dGluZy5wcm9wcy5pZCA9PT0gXCJhcHBsaWNhdGlvbl9pZFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicnBjXCIsIHNldHRpbmdzUlBDKTtcclxuICAgICAgICB0aGlzLnByZXZpZXcuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5zZXQoc2V0dGluZ3NSUEMpXHJcbiAgICB9XHJcblxyXG4gICAgZmV0Y2hBc3NldHMoKXtcclxuICAgICAgICBpZih0aGlzLmlzZmV0Y2hpbmcgPT09IHRydWUpe1xyXG4gICAgICAgICAgICBsZXQgYXBwID0gdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkICE9PSBhcHApe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gdHJ1ZVxyXG4gICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5mZXRjaEFzc2V0cyh0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpXHJcbiAgICAgICAgLnRoZW4oYXNzZXRzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IE9iamVjdC5rZXlzKGFzc2V0cykubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NldCA9IGFzc2V0c1trXVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBhc3NldC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXNzZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogYXNzZXQudHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnN0YXRlLmRhdGEsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cy5mb3JFYWNoKGUgPT4gZS5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHJldmlldyhkYXRhKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIHx8IChWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzR3JvdXAgdGl0bGU9XCJSaWNoUHJlc2VuY2UgU2V0dGluZ3NcIiBzZXR0aW5ncz17dGhpcy5wcm9wcy5zZXR0aW5nc30gb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9Lz4sXHJcbiAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz4sXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUmljaFByZXNlbmNlXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIHsvKiogb3B0aW9ucyAqL31cclxuICAgICAgICAgICAgICAgIHt0aGlzLm9wdGlvbnNDb21wb25lbnRzfVxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8TWFyZ2luVG9wIC8+XHJcbiAgICAgICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlByZXZpZXdcIi8+XHJcbiAgICAgICAgICAgICAgICB7LyoqIHByZXZpZXcgKi99XHJcbiAgICAgICAgICAgICAgICA8UnBjUHJldmlldyBzZXR0aW5ncz17dGhpc30vPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PjwvZGl2PixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXt3aW5kb3cub2hnb2RvaGZ1Y2t9PlxyXG4gICAgICAgICAgICAgICAgT2ggZ29kIE9oIGZ1Y2tcclxuICAgICAgICAgICAgPC9idXR0b24+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUxrWWE3cnBzX2c0XCIpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgU2VlID8gSSBwdWxsZWQgYSBsaXRsZSBzbmVha3kgb24geWFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zQ29tcG9uZW50cygpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9vcHRpb25zQ29tcG9uZW50cyB8fCAodGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgPSBSUENQcm9wcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGUudHlwZSA9PT0gXCJ0ZXh0XCIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dFRleHQgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5cclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgICAgIGxldCBhcnJheSA9IFs8SW5wdXROdW1iZXIgc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9Lz5dLypcclxuICAgICAgICAgICAgICAgIGlmKGUuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS51bnNoaWZ0KDxEaXNjb3JkQnV0dG9uIHRpdGxlPVwiQ29weSBDdXJyZW50IFRpbWVzdGFtcFwiIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gLz4pXHJcbiAgICAgICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheVxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwiY2hvaWNlXCIpe1xyXG4gICAgICAgICAgICAgICAgaWYoW1wiYXNzZXRzLnNtYWxsXCIsIFwiYXNzZXRzLmxhcmdlXCJdLmluY2x1ZGVzKGUuaWQpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0Q2hvaWNlIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfSBjaG9pY2VzPXtbe3ZhbHVlOiBcIm5vbmVcIiwgbGFiZWw6IFwiTm8gYXNzZXRzXCJ9XS5jb25jYXQodGhpcy5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKX0vPlxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5rbm93biBjaG9pY2UuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKVxyXG4gICAgfVxyXG59XHJcbmNvbnN0IFJQQ1Byb3BzID0gW1xyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkFwcGxpY2F0aW9uIElEXCIsXHJcbiAgICAgICAgaWQ6IFwiYXBwbGljYXRpb25faWRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk5hbWVcIixcclxuICAgICAgICBpZDogXCJuYW1lXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiRGV0YWlsc1wiLFxyXG4gICAgICAgIGlkOiBcImRldGFpbHNcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJCcm93c2luZyBEaXNjb3JkXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU3RhdGVcIixcclxuICAgICAgICBpZDogXCJzdGF0ZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZCBDbGllbnRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJUaW1lc3RhbXAgU3RhcnRcIixcclxuICAgICAgICBpZDogXCJ0aW1lc3RhbXBzLnN0YXJ0XCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBnZXQgcGxhY2Vob2xkZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGUubm93KClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkxhcmdlQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMubGFyZ2VcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlNtYWxsQXNzZXRcIixcclxuICAgICAgICBpZDogXCJhc3NldHMuc21hbGxcIixcclxuICAgICAgICB0eXBlOiBcImNob2ljZVwiXHJcbiAgICB9LFxyXG5dXHJcblxyXG5sZXQgaW5wdXRUZXh0TW9kdWxlc1xyXG5jbGFzcyBJbnB1dFRleHQgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgaWYoaW5wdXRUZXh0TW9kdWxlcyAmJiBpbnB1dFRleHRNb2R1bGVzWzBdKXJldHVybiBpbnB1dFRleHRNb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIGlucHV0VGV4dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICAgICAgaW5wdXRNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUyLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0TnVtYmVyTW9kdWxlc1xyXG5jbGFzcyBJbnB1dE51bWJlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXROdW1iZXJNb2R1bGVzIHx8IChJbnB1dE51bWJlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmlucHV0TWluaSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUxNiAmJiBlLnNpemUyMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yVHJhbnNwYXJlbnQpWzBdLFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSB0eXBlPVwibnVtYmVyXCIgb25DaGFuZ2U9eyh2YWx1ZSwgbmFtZSwgaW5wdXQpID0+IHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0rL2csIFwiXCIpXHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09IHRoaXMuc3RhdGUuZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpbnB1dC5zZXRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH19IHR5cGU9XCJ0ZXh0XCIvPlxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgICAgICB7c2V0dGluZy5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIgPyBcclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRGlzY29yZE5hdGl2ZS5jbGlwYm9hcmQuY29weShEYXRlLm5vdygpK1wiXCIpXHJcbiAgICAgICAgICAgICAgICB9fSBjb2xvcj1cImJyYW5kXCI+Q29weSBjdXJyZW50IHRpbWVzdGFtcDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+IDogbnVsbH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dENob2ljZU1vZHVsZXNcclxuY2xhc3MgSW5wdXRDaG9pY2UgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdID8gXCJhc3NldC1cIit0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA6IFwibm9uZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcHMubWFuYWdlci51cGRhdGVXaGVuRmV0Y2hlZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGRhdGEpe1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGEudmFsdWVcclxuXHJcbiAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlID09PSBcIm5vbmVcIiA/IG51bGwgOiB2YWx1ZS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhID09PSBcIm5vbmVcIiA/IG51bGwgOiB0aGlzLnN0YXRlLmRhdGEucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0Q2hvaWNlTW9kdWxlcyB8fCAoSW5wdXRDaG9pY2VNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBvcHRpb25zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIGxhYmVsOiBcIk5vIGFzc2V0c1wiXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvcHRpb25zPXtvcHRpb25zfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSAvPlxyXG4gICAgICAgICAgICAgICAgey8qPFNlbGVjdCB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfSBvcHRpb25zPXtvcHRpb25zfS8+Ki99XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgRGl2aWRlck1vZHVsZXMgPSBbXVxyXG5jbGFzcyBEaXZpZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBEaXZpZGVyTW9kdWxlcyYmRGl2aWRlck1vZHVsZXNbMF0gPyBEaXZpZGVyTW9kdWxlcyA6IChEaXZpZGVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlciAmJiBPYmplY3Qua2V5cyhlKS5sZW5ndGggPT09IDEpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyRGVmYXVsdClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGRpdmlkZXIsXHJcbiAgICAgICAgICAgIGRpdmlkZXJEZWZhdWx0XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YCR7ZGl2aWRlci5kaXZpZGVyfSAke2RpdmlkZXJEZWZhdWx0LmRpdmlkZXJEZWZhdWx0fWB9PjwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb3dNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXVxyXG4gICAgICAgIGxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBsZXQgZmxleE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IGNvbG9yPVwiYnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUnBjUHJldmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IFwicHJvZmlsZVwiXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFicyA9IFtdXHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuc2V0dGluZ3MucHJldmlldyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiKXtcclxuICAgICAgICBsZXQgYW5jaWVudFRhYiA9IHRoaXMuc3RhdGUuYWN0aXZlXHJcbiAgICAgICAgaWYoYW5jaWVudFRhYiA9PT0gdGFiLnByb3BzLmlkKXJldHVyblxyXG5cclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgZS5zZXRBY3RpdmUoZmFsc2UpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0YWIuc2V0QWN0aXZlKHRydWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiLnByb3BzLmlkXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYm5hdlwiIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiRnVsbCBQcm9maWxlXCIgaWQ9XCJwcm9maWxlXCIvPlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIlVzZXIgUG9wb3V0XCIgaWQ9XCJwb3BvdXRcIi8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8UHJlc2VuY2VFcnJvckNhdGNoZXIgcHJldmlldz17dGhpcy5wcmV2aWV3fSBzdGF0ZT17dGhpcy5zdGF0ZS5ycGN9IHByb3BzPXt7cHJldmlldzogdGhpc319IGtleT17dGhpcy5zdGF0ZS5hY3RpdmV9IC8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJldmlldygpe1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlID09PSBcInByb2ZpbGVcIilyZXR1cm4gUHJvZmlsZVxyXG4gICAgICAgIHJldHVybiBQb3BvdXRcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5wcmV2aWV3LmlzQWN0aXZlKHByb3BzLmlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wcy5wcmV2aWV3LnRhYnMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogISFpc0FjdGl2ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IGBsYy1uYXZJdGVtYFxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUFjdGl2ZWBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IGAgbGMtbmF2SXRlbUluYWN0aXZlYFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9IG9uQ2xpY2s9eygpPT57XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMucHJldmlldy5jaGFuZ2VUYWIodGhpcylcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgZW1wdHlDbGFzc2VzXHJcbmNsYXNzIFByZXNlbmNlRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbXBvbmVudERpZENhdGNoKGVyciwgZXJySW5mbyl7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyckluZm8pXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGVycm9yOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlKXtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmVycm9yKXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlldyA9IG5ldyB0aGlzLnByb3BzLnByZXZpZXcodGhpcy5wcm9wcy5wcm9wcylcclxuICAgICAgICAgICAgICAgIHByZXZpZXcuc2V0U3RhdGUodGhpcy5wcm9wcy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aWV3LnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBlbXB0eUNsYXNzZXMgPSBlbXB0eUNsYXNzZXMgfHwgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5lbXB0eVN0YXRlSW1hZ2UpXHJcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIyMHB4XCJcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUhlYWRlcn0+QW4gZXJyb3Igb2NjdXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtgJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yfSAke0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWB9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgc2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxubGV0IHBvcG91dE1vZHVsZXNcclxubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcclxubGV0IFBvcG91dFByb3BzXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwb3BvdXRNb2R1bGVzIHx8IChwb3BvdXRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoIVVzZXJQb3BvdXQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0IGNvbXBvbmVudC5gKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IHJlbmRlcjEudHlwZS5yZW5kZXIoUG9wb3V0UHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSBuZXcgcmVuZGVyMi50eXBlKHJlbmRlcjIucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIzLnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0Q29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQb3BvdXRQcm9wcyA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlci5pZCwgZ3VpbGRJZDogbnVsbCwgY2hhbm5lbElkOiBudWxsLCBkaXNhYmxlVXNlclByb2ZpbGVMaW5rOiB0cnVlfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IDxkaXYgey4uLndpbmRvdy5MaWdodGNvcmQuQXBpLl8uZXhjbHVkZVByb3BlcnRpZXMocG9wb3V0LnByb3BzLCBbXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiXSl9IC8+XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge2NvbnRhaW5lcn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHByb2ZpbGVNb2R1bGVzXHJcbmxldCBVc2VyUHJvZmlsZUNvbXBvbmVudFxyXG5sZXQgUHJvZmlsZVByb3BzXHJcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclByb2ZpbGVcIiksXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSByZW5kZXIyLnR5cGUucmVuZGVyKHJlbmRlcjIucHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHt9XHJcbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIHByb2ZpbGUucHJvcHMuc3R5bGUgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIHtwcm9maWxlfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbmxldCBwb3BvdXRNb2R1bGVcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlIHx8IChwb3BvdXRNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBybyAmJiBlLmlubGluZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlcyxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZTEuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0fSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVVzZXJQb3BvdXR9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VyUG9wb3V0fSByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5Q2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5oZWFkZXJUb3B9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YXZhdGFyTW9kdWxlMX0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludH0gdmlld0JveD1cIjAgMCA4MCA4MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJ9PntNZXNzYWdlcy5WSUVXX1BST0ZJTEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJUZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnTm9OaWNrbmFtZX0gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7bmFtZVRhZ01vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnVXNlcm5hbWVOb05pY2tuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVVzZXJQb3BvdXR9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+e01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dCA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Jvb3RNb2R1bGUxLmJvZHl9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9ICR7cm9vdE1vZHVsZTEuYm9keUlubmVyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5VGl0bGV9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjM2cHhcIn19IGRpc2FibGVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5mb290ZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb3RpcH0gJHtwcm90aXBNb2R1bGUxLmlubGluZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHtwcm90aXBNb2R1bGUxLnByb30gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfSBzdHlsZT17e2NvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCJ9fT57TWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVB9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Y29sb3JNb2R1bGUxLmNvbG9yU3RhbmRhcmR9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fSAke3Byb3RpcE1vZHVsZTEudGlwfWB9PntNZXNzYWdlcy5DT05URVhUX01FTlVfSElOVH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBTdGF0dXNNb2R1bGVzXHJcbmNsYXNzIFN0YXR1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBTdGF0dXNNb2R1bGVzIHx8IChTdGF0dXNNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGdldFByZXNlbmNlLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBnZXRQcmVzZW5jZS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e3BvaW50ZXJFdmVudHN9PjwvcmVjdD5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHRpbWVzdGFtcENsYXNzID0gXCJcIlxyXG5cclxubGV0IFByb2ZpbGVNb2R1bGVzXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgeyAvLyBUT0RPOiBQcm9iYWJseSB1c2UgaW50ZXJuYWwgQ29tcG9uZW50cyBpbnN0ZWFkIG9mIG1ha2luZyBpdCBmcm9tIHNjcmF0Y2guXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBQcm9maWxlTW9kdWxlcyB8fCAoUHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXggJiYgZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5UHJvZmlsZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckZhZGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSovIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0xheWVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5rZXl1cExpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAga2V5dXBMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLnJlZnMucm9vdC5wYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqIHByb2dyZXNzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogKDEgLSBwcm9ncmVzcyl9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCIucHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LnJlbW92ZShcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqIHByb2dyZXNzICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiW2NsYXNzKj1cXFwibGF5ZXItXFxcIl1cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LmFkZChcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqICgxIC0gcHJvZ3Jlc3MpICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwibGF5ZXIgYmQtbGF5ZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBpZDogdGhpcy5wcm9wcy5pZCwgcmVmOiBcInJvb3RcIiwgc3R5bGU6IHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwic2NhbGUoMS4xKSB0cmFuc2xhdGVaKDBweClcIn19LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uL3Rvb2xzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xyXG5pbXBvcnQgVGFiQmFySGVhZGVyIGZyb20gXCIuLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4uL3RhYkJhckl0ZW1cIjtcclxuXHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL3NlcnZlckNhcmRcIjtcclxuaW1wb3J0IFNpZGViYXJWaWV3IGZyb20gXCIuL3NpZGViYXJWaWV3XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleURvd24gPSB0aGlzLnNlYXJjaEtleURvd24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xyXG4gICAgICAgIHRoaXMuQXZhdGFyRGVmYXVsdHMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiXSk7XHJcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcclxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucm9vdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZldGNoKGAke3NlbGYuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBzZWxmLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQoc2VsZi5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyczogc2VydmVycyxcclxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xyXG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XHJcbiAgICAgICAgb3B0aW9ucy55ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArIHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBvcHRpb25zLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHdpbmRvdy5yZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cud2ViQ29udGVudHMub24oXCJkaWQtbmF2aWdhdGVcIiwgKGV2ZW50LCB1cmwpID0+IHtcclxuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYuam9pbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy5sb2FkVVJMKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNTArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgTGlnaHRjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vYXZhdGFyczMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjU2OTAwNTg/cz0yMDAmdj00XCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlciwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0RW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclZpZXcsIHtyZWY6IFwic2J2XCJ9LCB0aGlzLmNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWRlYmFyOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuc2lkZWJhclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJcIiwga2V5OiBcInBzXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyIFNJREVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7aWQ6IGluZGV4LCBvbkNsaWNrOiB0aGlzLmNoYW5nZUNhdGVnb3J5LCBrZXk6IGluZGV4LCB0ZXh0OiB2YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gaW5kZXh9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7cmVmOiBcInNlYXJjaGlucHV0XCIsIG9uS2V5RG93bjogdGhpcy5zZWFyY2hLZXlEb3duLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgbWF4TGVuZ3RoOiBcIjUwXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nIHx8IGUud2hpY2ggIT09IDEzKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgcXVlcnkgPSBgP3Rlcm09JHtlLnRhcmdldC52YWx1ZX1gO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcclxuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBzZWxmLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gc2VsZi5ub3RDb25uZWN0ZWQ7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7cmVmOiBcImNvbnRlbnRcIiwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHNlbGYuYmRTZXJ2ZXIsXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5sZW5ndGggPiAwICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdENvbm5lY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJuY2NcIiwgcmVmOiBcImNvbnRlbnRcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiMThweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJhXCIsXHJcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJEaXNjb3Jkc2VydmVycy5jb21cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnN0YXRlICE9PSAyKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3Njcm9sbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2lkZWJhclZpZXcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NpZGViYXIsIGNvbnRlbnQsIHRvb2xzfSA9IHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aSB1aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJSZWdpb24tVkZUVWtOIHNpZGViYXItcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7a2V5OiBcInNpZGViYXJTY3JvbGxlclwiLCByZWY6IFwic2lkZWJhclNjcm9sbGVyXCIsIHNpZGViYXI6IHRydWUsIGZhZGU6IHNpZGViYXIuZmFkZSB8fCB0cnVlLCBkYXJrOiBzaWRlYmFyLmRhcmsgfHwgdHJ1ZX0sIHNpZGViYXIuY29tcG9uZW50KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50UmVnaW9uLTNuRHVZeSBjb250ZW50LXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRUcmFuc2l0aW9uV3JhcC0zaHFPRVcgY29udGVudC10cmFuc2l0aW9uLXdyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcC0zWVpYZG0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdC0yOE1TbjAgc2Nyb2xsZXJUcmFjay0xWklwc3ZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyLTI2bmMxZSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlciBzY3JvbGxlclwiLCByZWY6IFwiY29udGVudFNjcm9sbGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudENvbHVtbi0yaHJJWUggY29udGVudENvbHVtbkRlZmF1bHQtMVZRa0dNIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sIGNvbnRlbnQuY29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLmNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2Nyb2xsZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9zY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXlcclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJIb3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyUmVnaW9uU2Nyb2xsZXIpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9JHt0aGlzLnByb3BzLmZhZGUgPyBcIiBcIitzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlIDogXCJcIn1gO1xyXG4gICAgICAgIGxldCBzY3JvbGxlckNsYXNzID0gc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyK1wiIHNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNpZGViYXIpIHNjcm9sbGVyQ2xhc3MgKz0gYCAke3Njcm9sbGVyTW9kdWxlMi5zaWRlYmFyUmVnaW9uU2Nyb2xsZXJ9IHNpZGViYXItcmVnaW9uLXNjcm9sbGVyYFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbnRlbnRDb2x1bW4pIHtcclxuICAgICAgICAgICAgc2Nyb2xsZXJDbGFzcyArPSBcIiBcIitzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyK1wiIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXB9IGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRyYWNrfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJ3cmFwXCIsIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJcIiwgcmVmOiBcInNjcm9sbGVyXCIsIGNsYXNzTmFtZTogc2Nyb2xsZXJDbGFzc30sXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfU2Nyb2xsZXIucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19TY3JvbGxlci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICBpICE9PSAwID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCwge30pIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmxldCBjbGFzc25hbWVzID0gW11cclxuZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKG5hbWUpe1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChuYW1lK1wiLVwiKSlcclxuICAgIGlmKGNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5uYW1lKVswXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaW5mbyA9IFtcclxuICAgICAgICAgICAgICAgIGluZm8sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICB0aGlzLm5vZGUgPSBCRFYyLnJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy50b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHt4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLCBzdHlsZToge3dpZHRoOiBcIjE4cHhcIiwgaGVpZ2h0OiBcIjE4cHhcIn19LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImdcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiLCBmaWxsOiBcIm5vbmVcIiwgZmlsbFJ1bGU6IFwiZXZlbm9kZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2NsYXNzTmFtZTogXCJmaWxsXCIsIGZpbGw6IFwiI2RjZGRkZVwiLCBkOiBcIk05LjUgMy4yMDVMOC43OTUgMi41IDYgNS4yOTUgMy4yMDUgMi41bC0uNzA1LjcwNUw1LjI5NSA2IDIuNSA4Ljc5NWwuNzA1LjcwNUw2IDYuNzA1IDguNzk1IDkuNWwuNzA1LS43MDVMNi43MDUgNlwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1rZGlycFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb2R1bGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZS1mZXRjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3B1YmxpY1NlcnZlcnMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3NldHRpbmdzUGFuZWxTaWRlYmFyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy90aGVtZU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3YyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy92b2ljZU1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL0xpZ2h0Y29yZFVzZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2J1Z19odW50ZXIuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvc3ZnL2NpcmN1cy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvbGlnaHRjb3JkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FjY291bnRJbmZvcy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9BcGlQcmV2aWV3LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9uY2FyZC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9hZGRvbmxpc3QuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYmRMb2dvLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jb21wb25lbnRzL2Ryb3Bkb3duLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc2VhcmNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvc3dpdGNoLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbnRlbnRDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jc3NFZGl0b3JEZXRhY2hlZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Vycm9yQm91bmRhcnkuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kZWxldGUuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZG93bmFycm93LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2VkaXQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvaGlzdG9yeS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvbWFyZ2ludG9wLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3ByZXNlbmNlU2V0dGluZ3MuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9sYXllci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2VydmVyQ2FyZC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3B1YmxpY3NlcnZlcnMvc2lkZWJhclZpZXcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9yZWxvYWRJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2Nyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NHcm91cC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NldHRpbmdzVGl0bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJIZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJJdGVtLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGFiQmFyU2VwYXJhdG9yLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdGltZXN0YW1wUmVuZGVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvdG9vbHRpcFdyYXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS94U3ZnLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZWxlY3Ryb25cIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm1rZGlycFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJtb2R1bGVcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibm9kZS1mZXRjaFwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJwYXRoXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcInJpbXJhZlwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJ5YXV6bFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImlwY1JlbmRlcmVyIiwiY29uZmlnIiwiaGFzU3RhcnRlZCIsImZsYXQiLCJ2ZXJzaW9uIiwiRUQiLCJXZWJTb2NrZXQiLCJwYXRjaEF0dHJpYnV0ZXMiLCJpbml0U2V0dGluZ3MiLCJjaGVja0Zvckd1aWxkcyIsImluaXRpYWxpemUiLCJpbml0aWFsaXplU2V0dGluZ3MiLCJjb250ZW50TWFuYWdlciIsImF0b2IiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwicGF0Y2hQb3BvdXRXaW5kb3ciLCJoYXZlSW5zdGFsbGVkRGVmYXVsdCIsIm9uQ2xvc2UiLCJsb2dvIiwidG9wIiwiaW5uZXJIVE1MIiwiY2FuY2VsZWQiLCJjYW5jZWxQYXRjaFBvcG91dFdpbmRvdyIsIkFwaSIsImVuc3VyZUV4cG9ydGVkIiwiZ2V0V2luZG93IiwidGhlbiIsInBvcG91dE1vZHVsZSIsImludGVyY2VwdG9yIiwiX2ludGVyY2VwdG9yIiwic2V0SW50ZXJjZXB0b3IiLCJhY3Rpb24iLCJyZW5kZXIiLCJyZW5kZXIxIiwiY2FsbCIsInR5cGUxIiwicmVuZGVyMiIsInNldEltbWVkaWF0ZSIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJzZWN0aW9uIiwicG9wZWQiLCJwb3AiLCJyZW5kZXJTaWRlYmFyIiwiY2xhc3NOYW1lTGF5ZXIiLCJjbGFzc05hbWVTb2NpYWxMaW5rcyIsImNsYXNzTmFtZU1vZGFsIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsIm1sZW4iLCJtdXRhdGlvbiIsInJhd09ic2VydmVyIiwiYWRkZWROb2RlcyIsImxheWVyIiwiYW5pbWF0aW5nIiwic29jaWFsTGlua3MiLCJtb2RhbCIsImlubmVyIiwicmVzcG9uc2l2ZVdpZHRoTW9iaWxlIiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwicGFyZW50RWxlbWVudCIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJ0b1N0cmluZyIsInNvY2lhbE1vZHVsZTEiLCJvcmlnaW5hbCIsIm5ld09uZSIsInJldHVyblZhbCIsImxpbmsiLCJjbGFzc05hbWVDb2xvck11dGVkIiwic2l6ZXMiLCJjbGFzc05hbWVWZXJzaW9uSGFzaCIsImNvbG9yTXV0ZWQiLCJzaXplMzIiLCJ2ZXJzaW9uSGFzaCIsImJyYW5jaCIsImFkZGl0aW9uYWwiLCJyZWFjdCIsInNpemUxMiIsImVsZWN0cm9uIiwiZ2V0R2xvYmFsIiwiY29tbWl0Iiwib3JpZ2luYWxWZXJzaW9ucyIsInNwbGljZSIsImdldEd1aWxkQ2xhc3NlcyIsImd1aWxkc1dyYXBwZXIiLCJmaW5kQnlQcm9wcyIsImd1aWxkcyIsInBpbGwiLCJndWlsZExpc3RJdGVtc1BhdGNoIiwiR3VpbGRDbGFzc2VzIiwibGlzdEl0ZW1DbGFzcyIsImJsb2JDbGFzcyIsInJlYWN0SW5zdGFuY2UiLCJHdWlsZENvbXBvbmVudCIsInJldHVybiIsInRoaXNPYmplY3QiLCJndWlsZERhdGEiLCJ1bnJlYWQiLCJzZWxlY3RlZCIsImF1ZGlvIiwidmlkZW8iLCJiYWRnZSIsImFuaW1hdGFibGUiLCJndWlsZFBpbGxQYXRjaCIsImd1aWxkUGlsbCIsImhvdmVyZWQiLCJndWlsZFNlcGFyYXRvclBhdGNoIiwiR3VpbGRzIiwiZ3VpbGRDb21wb25lbnRzIiwiR3VpbGRTZXBhcmF0b3IiLCJTZXBhcmF0b3IiLCJBdHRhY2htZW50UGF0Y2giLCJBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImdldE5lc3RlZFByb3AiLCJwYXRjaCIsIm1lc3NhZ2VIZWFkZXJQYXRjaCIsIk1lc3NhZ2VIZWFkZXIiLCJjaGF0IiwibmV4dFRpY2siLCJnZXRFbGVtZW50QnlJZCIsImNoaWxkTm9kZXMiLCJibG9ja0RpdiIsImRpc3RhbnQiLCJnZXRCYWRnZXMiLCJiYWRnZXMiLCJzdmciLCJ3aWR0aCIsInNjb3BlcyIsInNjb3BlIiwiY29tcG9uZW50IiwiZGl2MiIsInJlYWN0RG9tIiwibWVtYmVyTGlzdFBhdGNoIiwiTWVtYmVyTGlzdEl0ZW0iLCJyZW5kZXJEZWNvcmF0b3JzIiwidXBkYXRlSW5qZWN0b3IiLCJpbmplY3Rpb25QYXRoIiwicm1yZiIsInlhdXpsIiwibWtkaXJwIiwicmVxdWVzdCIsInBhcmVudFBhdGgiLCJmb2xkZXJOYW1lIiwiemlwTGluayIsInNhdmVkWmlwIiwiZXh0cmFjdGVkRm9sZGVyIiwic3VjY2VzcyIsImVuY29kaW5nIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwiYWxyZWFkeUV4aXN0cyIsInJlcyIsImV4aXN0cyIsInJlbmFtZSIsInJvdW5kIiwicGVyZm9ybWFuY2UiLCJ3cml0ZUZpbGUiLCJ6aXBmaWxlIiwibGF6eUVudHJpZXMiLCJ6aXAiLCJvbiIsImVudHJ5IiwiZmlsZU5hbWUiLCJyZWFkRW50cnkiLCJmdWxsUGF0aCIsInN5bmMiLCJkaXJuYW1lIiwib3BlblJlYWRTdHJlYW0iLCJyZWFkU3RyZWFtIiwicGlwZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwib25jZSIsImJhY2t1cEZvbGRlciIsInVubGluayIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwicmVsZWFzZUNoYW5uZWwiLCJnbG9iYWxzIiwiZ2V0UmVsZWFzZUNoYW5uZWwiLCJzdGFibGUiLCJjYW5hcnkiLCJwdGIiLCJwbHVnaW5EYXRhIiwiQkRGaWxlIiwid3JpdGVGaWxlU3luYyIsInNldHRpbmdzRmlsZSIsInVubGlua1N5bmMiLCJfaW5qZWN0aW9uUGF0aCIsImJhc2UiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZWFsTG9jYXRpb24iLCJjb25maWdGaWxlIiwiX2NvbmZpZ0ZpbGUiLCJfQkRGaWxlIiwiX3NldHRpbmdzRmlsZSIsImdldFBsdWdpbkZpbGUiLCJEZXZNb2RlIiwiZGVidWdMaXN0ZW5lciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwic3RhcnREZWJ1Z0xpc3RlbmVyIiwic3RhcnRDb3B5U2VsZWN0b3IiLCJzdG9wRGVidWdMaXN0ZW5lciIsInN0b3BDb3B5U2VsZWN0b3IiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwid2hpY2giLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJlbCIsIm5hbWVzIiwicGFyZW50Tm9kZSIsInVuc2hpZnQiLCJvd25lckRvY3VtZW50IiwidGFnTmFtZSIsImZyb20iLCJlbnRyaWVzIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImdldFJ1bGVzIiwic3R5bGVTaGVldHMiLCJzaGVldHMiLCJydWxlcyIsImNzc1J1bGVzIiwiZWxlbWVudFJ1bGVzIiwic2VsZWN0b3JUZXh0IiwibWF0Y2hlcyIsIkRpc2FibGVUeXBpbmciLCJzdGFydFR5cGluZyIsInR5cGluZ01vZHVsZSIsImRpc2FibGVkIiwic3RvcFR5cGluZyIsInJhbmRvbSIsInYiLCJhd2FpdGluZ0JhZGdlc1Byb21pc2VzIiwiYmFkZ2VzVG9GZXRjaCIsIkRpc3RhbnRTZXJ2ZXIiLCJfY2FjaGUiLCJuZXdQcm9taXNlIiwiQ29uc3RhbnRzIiwiZGVmYXVsdFVzZXJzIiwiZmV0Y2hlZEJhZGdlcyIsInVzZXJzIiwiaGFuZGxlUmVxdWVzdCIsIlJvdXRlcyIsInN0YXR1cyIsInJlc3BvbnNlQm9keSIsImpzb24iLCJwcm9taXNlIiwidXNlcl9pZCIsImNhdGNoIiwiTGlnaHRjb3JkRXJyb3IiLCJyb3V0ZSIsInJlamVjdCIsIm5vZGVGZXRjaCIsIlNFUlZFUl9VUkwiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkJ1Z0h1bnRlckJhZGdlIiwiQ2lyY3VzIiwiaGVhZCIsInNjcmlwdCIsInNyYyIsIm9ubG9hZCIsImFuaW1hdGUiLCJ0aW1pbmciLCJfIiwidXBkYXRlIiwiZHVyYXRpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJwcmV2aW91cyIsInByZXZpb3VzQWxsIiwicHJldmlvdXNVbnRpbCIsImluZGV4SW5QYXJlbnQiLCJudW0iLCJpbmRleCIsInBhcmVudCIsImZpbmRDaGlsZCIsImZpbmRDaGlsZHJlbiIsInBhcmVudHMiLCJjbG9zZXN0IiwicGFyZW50c1VudGlsIiwic2libGluZ3MiLCJhdHRyaWJ1dGUiLCJnbG9iYWwiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0IiwidGV4dENvbnRlbnQiLCJvdXRlcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJvdXRlckhlaWdodCIsIm9mZnNldEhlaWdodCIsIm9mZnNldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImxpc3RlbmVycyIsIl9saXN0ZW5lcnMiLCJldmVudCIsImRlbGVnYXRlIiwibmFtZXNwYWNlIiwiaGFzRGVsZWdhdGUiLCJldmVudEZ1bmMiLCJjYW5jZWwiLCJuZXdDYW5jZWwiLCJmaW5kSW5kZXgiLCJfX29mZkFsbCIsIm1hdGNoRmlsdGVyIiwibGlzdGVuZXIiLCJkZWZhdWx0RmlsdGVyIiwib25Nb3VudENoYW5nZSIsIm9uTW91bnQiLCJ3cmFwcGVkQ2FsbGJhY2siLCJvYnNlcnZlciIsIm5vZGVzIiwicmVtb3ZlZE5vZGVzIiwiZGlyZWN0TWF0Y2giLCJwYXJlbnRNYXRjaCIsIm9uVW5tb3VudCIsIm9uQWRkZWQiLCJ3cmFwIiwiZG9tV3JhcHBlciIsInJlc29sdmVFbGVtZW50IiwiRW1vamlSZWdleCIsIkN1c3RvbUVtb2ppTW9kdWxlIiwiQ3VzdG9tRW1vamkiLCJFbW9qaU1vZHVsZUFwaSIsImdldEN1c3RvbUVtb2ppQnlJZCIsIkF1dG9jb21wbGV0ZU1vZHVsZSIsIkF1dG9Db21wbGV0aW9uVGVtcGxhdGVzIiwiZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyIsIkVtb2ppTW9kdWxlUXVlcnkiLCJxdWVyeUVtb2ppUmVzdWx0cyIsIk1lc3NhZ2VzIiwiRU1PSklfTUFUQ0hJTkciLCJndWlsZE1vZHVsZSIsImdldEd1aWxkIiwiZ2V0R3VpbGRzIiwiaXNGZXRjaGluZyIsImVtb2ppU2VhcmNoIiwiZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dCIsIkxJR0hUQ09SRF9FTU9KSVMiLCJhcmcxIiwiYXJnMiIsImNvbmRpdGlvbiIsInNldEVtb2ppVXNhYmxlIiwicXVlcnlSZXN1bHRzIiwicmVzdWx0cyIsInJlbmRlclJlc3VsdHMiLCJEIiwiZW1vamlzIiwiRU1PSkkiLCJFbW9qaSIsImVtb2ppIiwidW5pcXVlTmFtZSIsInNlbnRpbmVsIiwiZ3VpbGRJZCIsImdldFBsYWluVGV4dCIsImlzQW5pbWF0ZWQiLCJhbmltYXRlZCIsIm1hbmFnZWQiLCJvcmlnaW5hbE5hbWUiLCJnZXRSYXdUZXh0IiwiY2FuY2VsRW1vamlSZW5kZXIiLCJjYW5jZWxFbW90ZVJlbmRlciIsIm5ld0NvbnRlbnQiLCJoYXNQYXJzZWQiLCJleGVjIiwicmF3Iiwid29yZHMiLCJ3b3JkIiwiYXJyIiwiZW1vamlJZCIsImp1bWJvYWJsZSIsInJlZHVjZSIsImN1cnJlbnQiLCJzaGlmdCIsIm8iLCJ1IiwiZCIsIm9uQ2xpY2siLCJvbkhvdmVyIiwiUiIsInByZWZpeCIsIlRpdGxlIiwiRW1vamlGaWx0ZXJNb2R1bGUiLCJpc0Vtb2ppRGlzYWJsZWQiLCJpc1VzYWJsZSIsInVzYWJsZSIsInN1cnJvZ2F0ZXMiLCJkaXZlcnNpdHkiLCJjYWNoZTIiLCJwcm9jZXNzQXR0YWNobWVudCIsImlzVHJ1c3RlZCIsImNoZWNrVmlydXNlcyIsInJlc3VsdENhbGxiYWNrIiwicmVtb3ZlQ2FsbGJhY2siLCJpc0hhcm1mdWwiLCJrZXl3b3JkIiwib29mIiwibm9fY29tbWVudHMiLCJyZWdleHBzIiwicmVnZXgiLCJoYXNoVG9VcmwiLCJjaGVja0hhc2giLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJ1c2VyQWdlbnQiLCJfX3BhdGgiLCJpc0Zyb21Mb2FkZXIiLCJjcnlwdG8iLCJCdWZmZXIiLCJhbGxvYyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJjaHVuayIsImNvbmNhdCIsImhhc2hSZXN1bHQiLCJkaWdlc3QiLCJyZW5kZXJUb0VsZW1lbnRzIiwiZmxvd2VyU3Rhck1vZHVsZSIsImZsb3dlclN0YXJDb250YWluZXIiLCJjaGlsZE1vZHVsZSIsImNoaWxkQ29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJuZXh0Tm9kZSIsImNvbmZpcm1UZXh0IiwiZGFuZ2VyIiwib25DYW5jZWwiLCJvbkNvbmZpcm0iLCJzaGVsbCIsIm9wZW5FeHRlcm5hbCIsInRvb2x0aXBXcmFwIiwidmlld0JveCIsIngiLCJ5IiwibWFzayIsImZpbGwiLCJwb2ludGVyRXZlbnRzIiwib2ZmaWNpYWwiLCJzcGFuIiwiZmxvYXQiLCJmbG93ZXJTdGFyIiwiZ2V0S2V5ZWRBcnJheSIsImJ1ZmZlciIsImluc3RhbGxQYXRoIiwiY3Vyc29yIiwic3Ryb2tlIiwic2F2ZSIsIk9iamVjdFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2VNb2R1bGUiLCJsb2NhbFN0b3JhZ2UiLCJpbXBsIiwiYnRvYSIsInNldEludGVydmFsIiwic2FmZUpTT05QYXJzZSIsImdlbmVyYXRlS2V5IiwiZGVjaXBoZXIiLCJkZWNyeXB0ZWQiLCJmaW5hbCIsImNpcGhlciIsImVuY3J5cHRlZCIsIlBsdWdpbk1vZHVsZSIsImxvYWRQbHVnaW5EYXRhIiwibG9hZCIsInNhdmVQbHVnaW5EYXRhIiwiY2hhbm5lbFN3aXRjaCIsInN0YXJ0UGx1Z2luIiwic3RvcFBsdWdpbiIsImVuYWJsZVBsdWdpbiIsImRpc2FibGVQbHVnaW4iLCJ0b2dnbGVQbHVnaW4iLCJwIiwiZmlsZW5hbWVPck5hbWUiLCJiZHBsdWdpbiIsImRlbGV0ZSIsImVkaXQiLCJvcGVuSXRlbSIsInVwZGF0ZVBsdWdpbkxpc3QiLCJzYXZlZCIsIm5ld01lc3NhZ2UiLCJvbk1lc3NhZ2UiLCJvblN3aXRjaCIsIlYyX1B1YmxpY1NlcnZlcnMiLCJfYXBwZW5kQnV0dG9uIiwiTGF5ZXIiLCJyb290SWQiLCJWMkNfUHVibGljU2VydmVycyIsInJvb3QiLCJfcm9vdCIsImluamVjdFJvb3QiLCJjbGFzc05hbWVMYXllcnMiLCJsYXllcnMiLCJidXR0b24iLCJidG4iLCJjaXJjbGVCdXR0b25NYXNrIiwiY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXIiLCJkb3dubG9hZFByb2dyZXNzIiwidHV0b3JpYWxDb250YWluZXIiLCJhZGRCdXR0b24iLCJndWlsZFBhdGNoIiwiR3VpbGRMaXN0Iiwid2VicGFja01vZHVsZXMiLCJHdWlsZExpc3RPbGQiLCJyZW1vdmVCdXR0b24iLCJCRFNpZGViYXJIZWFkZXIiLCJQdXJlQ29tcG9uZW50Iiwic2lkZWJhckNvbXBvbmVudHMiLCJIZWFkZXIiLCJJdGVtIiwiY2hhbmdlbG9nQnV0dG9uIiwiSGlzdG9yeSIsInJlbmRlcmVkIiwiaXNDbGVhcmluZ0NhY2hlIiwiVjJfU2V0dGluZ3NQYW5lbCIsInVwZGF0ZVNldHRpbmdzIiwic2lkZWJhciIsIlYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciIsInJlZ2lzdGVyQ29tcG9uZW50cyIsInJlZ2lzdGVyIiwibWFrZUNvbXBvbmVudCIsImxpZ2h0Y29yZENvbXBvbmVudCIsIlByZXNlbmNlQ29tcG9uZW50IiwiQWNjb3VudEluZm9zQ29tcG9uZW50IiwiQXBpUHJldmlld0NvbXBvbmVudCIsImNvcmVDb21wb25lbnQiLCJjdXN0b21Dc3NDb21wb25lbnQiLCJyZW5kZXJBZGRvblBhbmUiLCJjbGFzc1NpZGViYXIiLCJjb250ZW50UmVnaW9uIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImNvcmVTZXR0aW5ncyIsImdldFNldHRpbmdzIiwiY2F0ZWdvcmllcyIsIlNldCIsInNlY3Rpb25zIiwibGlnaHRjb3JkU2V0dGluZ3MiLCJQcmVzZW5jZVNldHRpbmdzIiwiTXNnTG9nU2V0dGluZ3MiLCJjaGVja2VkIiwicHVibGljU2VydmVyc01vZHVsZSIsInZvaWNlTW9kZSIsInRmSG91ciIsImNvbG9yZWRUZXh0IiwiZE1vZGUiLCJTZXR0aW5ncyIsImRldk1vZGUiLCJmb3JjZVVwZGF0ZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwiYXBwU2V0dGluZ3MiLCJyZWxhdW5jaCIsImV4aXQiLCJjb3JlIiwiTm90aWZpY2F0aW9uc1VzZVNoaW0iLCJTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiTWFyZ2luVG9wIiwiaXNDaGVja2VkIiwiU3dpdGNoIiwiQ29tcG9uZW50cyIsImlucHV0cyIsIkJ1dHRvbiIsImxvb2siLCJob3ZlckNvbG9yIiwiaXBjIiwic2VuZCIsImFyZ3YiLCJxdWl0Iiwic2Vzc2lvbiIsImNsZWFyQ2FjaGUiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIlYyQ19BY2NvdW50SW5mb3MiLCJBcGlQcmV2aWV3IiwiQ3NzRWRpdG9yIiwiQ29udGVudExpc3QiLCJDb21wb25lbnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIlNldHRpbmdDb21wb25lbnQiLCJwYW5lbHMiLCJwYW5lbCIsImdldENvbXBvbmVudCIsIkxDaXRlbXMiLCJMQ0Rldkl0ZW1zIiwiVGhlbWVNb2R1bGUiLCJsb2FkVGhlbWVEYXRhIiwidGhlbWUiLCJ1bmVzY2FwZSIsInNhdmVUaGVtZURhdGEiLCJlbmFibGVUaGVtZSIsImRpc2FibGVUaGVtZSIsInRvZ2dsZVRoZW1lIiwiYmR0aGVtZSIsInVwZGF0ZVRoZW1lTGlzdCIsIl93aW5kb3dDb25maWdGaWxlIiwidHJhbnNwYXJlbnQiLCJmcmFtZSIsImNoYXJDb2RlQXQiLCJnZXRUZXh0QXJlYSIsImNoYW5uZWxUZXh0QXJlYSIsInRpdGxlV3JhcHBlciIsImluc2VydFRleHQiLCJ0ZXh0YXJlYSIsImZvY3VzIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJleGVjQ29tbWFuZCIsIm1vZHVsZU5hbWUiLCJncm91cENvbGxhcHNlZCIsImdyb3VwRW5kIiwiZm9ybWF0U3RyaW5nIiwic3RyaW5nIiwicmVwbGFjZW1lbnQiLCJlc2NhcGUiLCJwYXJhbXMiLCJpbnN0ZWFkIiwic2lsZW50IiwiZm9yY2UiLCJvcmlnTWV0aG9kIiwiY2FuY2VsUGF0Y2giLCJvcmlnaW5hbE1ldGhvZCIsImNhbGxPcmlnaW5hbE1ldGhvZCIsInRlbXBSZXQiLCJfX21vbmtleVBhdGNoZWQiLCJkaXNjb25uZWN0IiwiaGFzTm90aWNlIiwibWVtYmVybGlzdCIsIm1lbWJlcnNXcmFwIiwiZm9ybSIsInJpZ2h0IiwiYm90dG9tIiwidG9hc3RXcmFwcGVyIiwiaWNvbiIsInRpbWVvdXQiLCJ0b2FzdEVsZW0iLCJpbm5lclRleHQiLCJtb2RhbE1vZHVsZSIsImhpZGVPbkZ1bGxzY3JlZW4iLCJoZWFkZXJNb2R1bGUiLCJoZWFkZXIiLCJmb290ZXIyTW9kdWxlIiwiZm9jdXNMb2NrIiwiYmFja2Ryb3AiLCJiYWNrZHJvcFdpdGhMYXllciIsImNsb3NpbmdMaXN0ZW5lcnMiLCJwbHVnaW5FcnJvcnMiLCJ0aGVtZUVycm9ycyIsImdlbmVyYXRlVGFiIiwidGFicyIsIk1vZGFsU3RhY2siLCJDaGFuZ2Vsb2dDbGFzc2VzIiwiVGV4dEVsZW1lbnQiLCJGbGV4Q2hpbGQiLCJUaXRsZXMiLCJDaGFuZ2Vsb2ciLCJkZWZhdWx0UHJvcHMiLCJzZWxlY3RhYmxlIiwiTWFya2Rvd25QYXJzZXIiLCJpbWFnZSIsInN1YnRpdGxlIiwiY2UiLCJjaGFuZ2Vsb2dJdGVtcyIsIm1hcmdpbiIsInJlbmRlckhlYWRlciIsIkNoaWxkIiwiZ3JvdyIsInNocmluayIsInRhZyIsIlRhZ3MiLCJINCIsIlNpemVzIiwiU01BTEwiLCJDb2xvcnMiLCJTVEFOREFSRCIsImRhdGUiLCJyZW5kZXJGb290ZXIiLCJBbmNob3JDbGFzc2VzIiwiYW5jaG9yIiwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlciIsImpvaW5TdXBwb3J0U2VydmVyIiwiam9pbkJEMiIsInN1cHBvcnRMaW5rIiwiZGVmYXVsdEZvb3RlciIsIm9uU2Nyb2xsIiwiTW9kYWxBY3Rpb25zIiwiTWFya2Rvd24iLCJDb25maXJtYXRpb25Nb2RhbCIsImVtcHR5RnVuY3Rpb24iLCJvcGVuTW9kYWwiLCJyZWQiLCJtb2RhbEtleSIsIlYyIiwiZWRpdG9yRGV0YWNoZWQiLCJyZXEiLCJ3ZWJwYWNrSnNvbnAiLCJfX2V4dHJhX2lkX18iLCJzaG91bGRQcm90ZWN0IiwidGhlTW9kdWxlIiwiY2xlYXIiLCJzb3J0IiwiZ2V0VG9rZW4iLCJnZXRFbWFpbCIsInNob3dUb2tlbiIsInByb3RlY3QiLCJpc0RlZmF1bHQiLCJtb2QiLCJwcm94eSIsImZ1bmMiLCJfX3Byb3RvX18iLCJwcm9wTmFtZXMiLCJwcm90b05hbWVzIiwicHJvdG9Qcm9wIiwiaW50ZXJuYWwiLCJqb2luQkQxIiwiSW52aXRlQWN0aW9ucyIsImFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwiLCJsZWF2ZUJEMSIsIkd1aWxkQWN0aW9ucyIsImxlYXZlR3VpbGQiLCJsZWF2ZUJEMiIsImpvaW5MQyIsImxlYXZlTEMiLCJyZWFjdENvbXBvbmVudCIsImFuY2hvckNsYXNzZXMiLCJzbGF0ZUVkaXRvckNsYXNzZXMiLCJtZXNzYWdlQ2xhc3NlcyIsInVucmVhZE1lbnRpb25zQmFyIiwiZ3VpbGRzRXJyb3IiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIlRvb2x0aXBXcmFwcGVyIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwiTGF5ZXJTdGFjayIsIlVzZXJTdG9yZSIsIkNoYW5uZWxTdG9yZSIsIkNoYW5uZWxBY3Rpb25zIiwiUHJpdmF0ZUNoYW5uZWxBY3Rpb25zIiwib3BlbkRNIiwidXNlcklkIiwic2VsZklkIiwicHJpdmF0ZUNoYW5uZWxJZCIsImdldERNRnJvbVVzZXJJZCIsInNlbGVjdFByaXZhdGVDaGFubmVsIiwib3BlblByaXZhdGVDaGFubmVsIiwicGFyc2VTZXR0aW5ncyIsIlZvaWNlTW9kZSIsInByb2ZpbE1vZHVsZSIsImZldGNoTXV0dWFsRnJpZW5kcyIsIkxpZ2h0Y29yZFVzZXJCYWRnZSIsIm1hcmdpbk1vZHVsZTIiLCJkZWZhdWx0TWFyZ2luaDUiLCJjb2xvck1vZHVsZSIsImNvbG9yU3RhbmRhcmQiLCJzaXplTW9kdWxlIiwic2Nyb2xsYmFyTW9kdWxlMSIsInNjcm9sbGJhckdob3N0SGFpcmxpbmUiLCJHdWlsZE1vZHVsZSIsImdldFJlbGF0aW9uc2hpcHMiLCJzZXNzaW9uTW9kdWxlIiwiZ2V0U2Vzc2lvbnMiLCJzaXplMTQiLCJoNSIsImdldFByb2ZpbGVWYWx1ZSIsImdldFN0YXRpc3RpY3MiLCJnZXRTZXNzaW9uVmFsdWUiLCJtYXJnaW5Cb3R0b20yMCIsInNlc3Npb25zUmF3Iiwic2Vzc2lvbnMiLCJzZXNzaW9uSWQiLCJjbGllbnRJbmZvIiwib3MiLCJjbGllbnQiLCJhY3Rpdml0aWVzIiwicmVwZWF0IiwiY3JlYXRlZEF0IiwiYXZhdGFyVVJMIiwiYXZhdGFyIiwiZ2V0QXZhdGFyVVJMIiwiZ2V0RGF0ZSIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwiZmxhZ3MiLCJoYXNQcmVtaXVtU3Vic2NyaXB0aW9uIiwiZW1haWwiLCJtZmFFbmFibGVkIiwibW9iaWxlIiwicGhvbmUiLCJ2ZXJpZmllZCIsInJlbGF0aW9ucyIsImZyaWVuZHMiLCJpc0ZyaWVuZCIsImlzQmxvY2tlZCIsImhpZ2h0bGlnaHRKUyIsImhpZ2hsaWdodCIsIm1lc3NhZ2VNb2R1bGUxIiwibWVzc2FnZU1vZHVsZTIiLCJDb2RlQ29udGVudCIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsInNldHRpbmdUaXRsZSIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJjb21wIiwiQWxsUHJldmlld3MiLCJ0YWIiLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwiZ2V0UHJvcHMiLCJyZW5kZXJQcmV2aWV3IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImJvcmRlclJhZGl1cyIsInJlbmRlckNvZGUiLCJnZW5lcmF0ZUNvZGUiLCJnZXRTdHJGb3JQcm9wIiwiY29tcFBhdGgiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wTmFtZSIsImNvbXBDYXRlZ29yeSIsInByb3BTdHJpbmdzIiwiY2hpbGRyZW5Qcm9wIiwic3RyIiwib3BlblRhZyIsImNsb3NlVGFnIiwidmlzaWJsZUtleSIsInByb3BPYmplY3QiLCJpc0xhc3QiLCJpc0ZpcnN0IiwiY2hpbGRyZW5EYXRhIiwiaGVscCIsIm1hcmdpbkJvdHRvbSIsInJlbmRlcnMiLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVubW91bnRlZCIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImF1dGhvcklkIiwiYXV0aG9yTGluayIsImlzU2Nhbm5pbmciLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9uQWRkb25DaGFuZ2VzIiwiY29tcG9uZW50RGlkTW91bnQiLCJiZEV2ZW50cyIsIm9wZW5Gb2xkZXIiLCJvcGVuUGF0aCIsInNob3VsZERlbGV0ZSIsImNvbmZpcm1EZWxldGUiLCJzb3J0T3B0aW9ucyIsImRpcmVjdGlvbnMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsImdldEFkZG9ucyIsInNvcnRlZEFkZG9ucyIsImIiLCJjYXAiLCJmaXJzdCIsInNlY29uZCIsImxvY2FsZUNvbXBhcmUiLCJyZW5kZXJDaGVja1VwZGF0ZXMiLCJaZXJlc1BsdWdpbkxpYnJhcnkiLCJQbHVnaW5VcGRhdGVzIiwiY2hlY2tBbGwiLCJtYXJnaW5MZWZ0IiwicmVmcmVzaEljb24iLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZ2V0VmFsdWUiLCJkcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsIkJERXJyb3JCb3VuZGFyeSIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJEZWxldGUiLCJEb3duQXJyb3ciLCJFZGl0IiwibWFyZ2luTW9kdWxlIiwibWFyZ2luVG9wNjAiLCJWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMiLCJwcmV2aWV3IiwiaXNmZXRjaGluZyIsImFzc2V0Q29tcG9uZW50cyIsInVwZGF0ZVdoZW5GZXRjaGVkIiwiZGVmYXVsdFNldHRpbmciLCJSUENQcm9wcyIsImFzc2V0IiwidXBkYXRlUHJldmlldyIsIm9wdGlvbnNDb21wb25lbnRzIiwib2hnb2RvaGZ1Y2siLCJfb3B0aW9uc0NvbXBvbmVudHMiLCJhcnJheSIsImlucHV0VGV4dE1vZHVsZXMiLCJJbnB1dFRleHQiLCJyZW1vdmVLZXliaW5kIiwiX2hvcml6b250YWwiLCJpbnB1dE1pbmkiLCJzaXplMTYiLCJzaXplMjAiLCJpbnB1dCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsImZsZXgiLCJycGMiLCJpc0FjdGl2ZSIsIlByb2ZpbGUiLCJQb3BvdXQiLCJUYWIiLCJlbXB0eUNsYXNzZXMiLCJQcmVzZW5jZUVycm9yQ2F0Y2hlciIsImVyckluZm8iLCJlbXB0eVN0YXRlSW1hZ2UiLCJlbXB0eVN0YXRlIiwiZW1wdHlTdGF0ZUhlYWRlciIsImVtcHR5U3RhdGVTdWJ0ZXh0IiwicG9wb3V0TW9kdWxlcyIsIlVzZXJQb3BvdXRDb21wb25lbnQiLCJQb3BvdXRQcm9wcyIsIlVzZXJQb3BvdXQiLCJjaGFubmVsSWQiLCJkaXNhYmxlVXNlclByb2ZpbGVMaW5rIiwicmVuZGVyMyIsInBvcG91dCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicHJvZmlsZU1vZHVsZXMiLCJVc2VyUHJvZmlsZUNvbXBvbmVudCIsIlByb2ZpbGVQcm9wcyIsImNvbm5lY3RlZFByb2ZpbGVTdG9yZSIsIlVzZXJQcm9maWxlIiwicmVuZGVyNCIsInByb2ZpbGUiLCJWMkNfTGF5ZXIiLCJrZXl1cExpc3RlbmVyIiwidHJhbnNmb3JtIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY2hhbmdlQ2F0ZWdvcnkiLCJzZWFyY2hLZXlEb3duIiwiY2hlY2tDb25uZWN0aW9uIiwiY29ubmVjdCIsIkd1aWxkU3RvcmUiLCJBdmF0YXJEZWZhdWx0cyIsIlNvcnRlZEd1aWxkU3RvcmUiLCJzZWxlY3RlZENhdGVnb3J5IiwibG9hZGluZyIsInNlcnZlcnMiLCJjb25uZWN0aW9uIiwiZmV0Y2giLCJzZXJ2ZXIiLCJqb2luZWQiLCJlbmQiLCJ0ZXJtIiwiY2F0ZWdvcnlCdXR0b25zIiwidG90YWwiLCJzYnYiLCJjb250ZW50U2Nyb2xsZXIiLCJzZXJ2ZXJDYXJkIiwicGlubmVkIiwiYWNjZXB0SW52aXRlIiwiaW52aXRlX2NvZGUiLCJqb2luRW5kUG9pbnQiLCJpZGVudGlmaWVyIiwiY3JlZGVudGlhbHMiLCJ3aW5kb3dPcHRpb25zIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJub1dyYXAiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiaG9yaXpvbnRhbCIsIlYyQ19TaWRlYmFyVmlldyIsIlNjcm9sbGVyIiwiZmFkZSIsImRhcmsiLCJWMkNfUmVsb2FkSWNvbiIsInhtbG5zIiwiVjJDX1Njcm9sbGVyIiwic2Nyb2xsZXJNb2R1bGUxIiwic2Nyb2xsZXJIb3Jpem9udGFsIiwic2Nyb2xsZXJNb2R1bGUyIiwic2lkZWJhclJlZ2lvblNjcm9sbGVyIiwid3JhcHBlckNsYXNzIiwic2Nyb2xsZXJGYWRlIiwic2Nyb2xsZXJDbGFzcyIsImNvbnRlbnRSZWdpb25TY3JvbGxlciIsImNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAiLCJ0aGVtZUdob3N0Iiwic2Nyb2xsZXJUcmFjayIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsIlYyQ19TZXR0aW5nc0dyb3VwIiwiYnV0dG9uQ29tcG9uZW50IiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsImJldGEiLCJ1c2VyU2V0dGluZ3NWb2ljZSIsIlYyQ19UYWJCYXJIZWFkZXIiLCJWMkNfVGFiQmFySXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJpbnRlcnZhbE1vZHVsZTEiLCJJbnRlcnZhbCIsIlRpbWVSZW5kZXIiLCJfaW50ZXJ2YWwiLCJnZXRVcGRhdGVkVGltZSIsImdldERpZmYiLCJjaGVja1VuaXgiLCJob3VycyIsIm1pbnV0ZXMiLCJzZWNvbmRzIiwicmVuZGVyVGltZSIsIm51bWJlciIsInJlbW92ZVplcm8iLCJ1c2VkUHJvcHMiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9FTkQiLCJVU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVCIsIlYyQ19Ub29scyIsInRvb2xzTW9kdWxlIiwidG9vbHNDb250YWluZXIiLCJjb250YWluZXJNb2R1bGUiLCJjbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uQm9sZCIsImtleWJpbmQiLCJrZXliaW5kQm9sZCIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJFbXVsYXRlZFRvb2x0aXAiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwidG9vbHRpcCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFD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RSw0QkFBUjtBQUFzQ3p0QixhQUFPLEVBQUUsV0FBL0M7QUFBNERsc0IsV0FBSyxFQUFFO0FBQUNtVSxhQUFLLEVBQUUsTUFBUjtBQUFnQmdQLGNBQU0sRUFBRTtBQUF4QjtBQUFuRSxLQUZHLEVBR0h0M0IsbURBQUksQ0FBQ21sQixLQUFMLENBQVdqa0IsYUFBWCxDQUNJLEdBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsWUFBWjtBQUEwQnMvQixVQUFJLEVBQUUsTUFBaEM7QUFBd0M2ZSxjQUFRLEVBQUU7QUFBbEQsS0FGSixFQUdJdC9DLG1EQUFJLENBQUNtbEIsS0FBTCxDQUFXamtCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQys3QixPQUFDLEVBQUU7QUFBSixLQUFqQyxDQUhKLEVBSUlqOUIsbURBQUksQ0FBQ21sQixLQUFMLENBQVdqa0IsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDQyxlQUFTLEVBQUUsTUFBWjtBQUFvQnMvQixVQUFJLEVBQUUsU0FBMUI7QUFBcUN4RCxPQUFDLEVBQUU7QUFBeEMsS0FBakMsQ0FKSixDQUhHLENBQVA7QUFVSDs7QUFoQnFELEM7Ozs7Ozs7Ozs7O0FDRjFELG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGlDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLGtDIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9pbmRleC5qc1wiKTtcbiIsImltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBtaW5pbXVtRGlzY29yZFZlcnNpb24gPSBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IGN1cnJlbnREaXNjb3JkVmVyc2lvbiA9ICh3aW5kb3cuRGlzY29yZE5hdGl2ZSAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24gJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwLmdldFZlcnNpb24oKSkgfHwgXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBtaW5TdXBwb3J0ZWRWZXJzaW9uID0gXCIwLjMuMFwiO1xyXG5leHBvcnQgY29uc3QgYmJkVmVyc2lvbiA9IFwiMC4zLjVcIjtcclxuLypcclxuZXhwb3J0IGNvbnN0IExDQ2hhbmVsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJMaWdodGNvcmQncyBjaGFuZ2Vsb2dcIixcclxuICAgIGNoYW5nZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIldoYXQncyBOZXc/XCIsXHJcbiAgICAgICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCBpcyBub3cgYXZhaWxhYmxlICFcIixcclxuICAgICAgICAgICAgICAgIFwiV2UgcmVtb3ZlZCBlbW90ZXMuIFRoYXQncyBzYWQgZm9yIHBlb3BsZSB3aG8gd2VyZSBhY3R1YWxseSB1c2luZyBpdCwgYnV0IGl0IHdhcyBsZWFkaW5nIHRvIG1vcmUgbG9hZGluZyB0aW1lIGFuZCBzb21lIGJhc2ljIHdvcmRzIHdlcmUgZW1vdGUuXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBpbWFnZTogXCJodHRwczovL2kuaW1ndXIuY29tL3NmTmhxd1AucG5nXCIsXHJcbiAgICB0aXRsZTogXCJMaWdodGNvcmRcIixcclxuICAgIHN1YnRpdGxlOiBcInZcIityZW1vdGUuZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb24sXHJcbiAgICBmb290ZXI6IChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xyXG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xyXG4gICAgICAgIGlmKCFUZXh0RWxlbWVudCB8fCAhTW9kYWxTdGFjaylyZXR1cm4gbnVsbFxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xyXG4gICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaWNrLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICBCRFYyLmpvaW5MQygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogYCR7QW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWAsIG9uQ2xpY2s6IGpvaW5TdXBwb3J0U2VydmVyfSwgXCJKb2luIG91ciBEaXNjb3JkIFNlcnZlci5cIik7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0RWxlbWVudCwge3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJEfSwgXCJOZWVkIHN1cHBvcnQ/IFwiLCBzdXBwb3J0TGluayk7XHJcbiAgICB9KSgpXHJcbn0qL1xyXG5leHBvcnQgY29uc3QgYmJkQ2hhbmdlbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiQkJEJ3MgY2hhbmdlbG9nLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgIFwiQ3VzdG9tIGNzcyBsaXZlIHVwZGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMFwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXHJcblxyXG4gICAgLyogQ29yZSAqL1xyXG4gICAgLyogPT09PT09ICovXHJcbiAgICBcIlB1YmxpYyBTZXJ2ZXJzXCI6ICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMVwiLCAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkhpZGUgQ2hhbm5lbHNcIjogICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtM1wiLCAgaW5mbzogXCJIaWRlIGNoYW5uZWxzIGluIG1pbmltYWwgbW9kZVwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtNlwiLCAgaW5mbzogXCJSZXBsYWNlIDEyaHIgdGltZXN0YW1wcyB3aXRoIHByb3BlciBvbmVzXCIsICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG5cclxuICAgIC8qIENvbnRlbnQgKi9cclxuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlRoZW1lcyBpbiBQb3BvdXQgV2luZG93XCI6ICAgIHtpZDogXCJsaWdodGNvcmQtOVwiLCBpbmZvOiBcIkVuYWJsZSB0aGVtZXMgaW4gUG9wb3V0IFdpbmRvdy4gKEZvciBleGFtcGxlLCB3aGVuIGRldGFjaGluZyBzY3JlZW5zaGFyZS4pXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcclxuXHJcbiAgICAvKiBEZXZlbG9wZXIgKi9cclxuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcbiAgICBcIkNvcHkgU2VsZWN0b3JcIjpcdFx0XHQgIHtpZDogXCJmb3JrLWRtLTFcIiwgaW5mbzogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcbiAgICBcIlJlYWN0IERldlRvb2xzXCI6XHRcdFx0ICB7aWQ6IFwicmVhY3REZXZUb29sc1wiLCBpbmZvOiBcIkFkZHMgcmVhY3QgZGV2ZWxvcGVyIHRvb2xzIHRvIHRoZSBkZXZ0b29scy4gTXVzdCBiZSBpbnN0YWxsZWQgaW4gR29vZ2xlIENocm9tZSBvbiB5b3VyIHBjLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiZGV2ZWxvcGVyIHNldHRpbmdzXCJ9LFxyXG5cclxuICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgIFwiRGlzYWJsZSBCZXR0ZXJEaXNjb3JkXCI6ICAgICAge2lkOiBcImJkLWRpc2FibGVcIiwgIGluZm86IFwiRGlzYWJsZSBCZXR0ZXJkaXNjb3JkIChwbHVnaW5zLCB0aGVtZXMsIGV0YykgKE5vdCBpbXBsZW1lbnRlZCkuXCIsIGltcGxlbWVudGVkOiBmYWxzZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkJsdXIgUGVyc29uYWwgSW5mb3JtYXRpb25cIjogIHtpZDogXCJsaWdodGNvcmQtNlwiLCBpbmZvOiBcIkJsdXIgc2Vuc2l0aXZlIGluZm9ybWF0aW9ucyBsaWtlIGVtYWlsLCBwYXltZW50IGluZm9zIGFuZCBtb3JlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkNhbGxpbmcgUmluZyBCZWF0XCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMlwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3Mgc3BlY2lhbCBjYWxsaW5nIGJlYXQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRGV2ZWxvcGVyIE9wdGlvbnNcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0xXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyAmIExpZ2h0Y29yZCdzIEludGVybmFsIERldmVsb3BlciBPcHRpb25zLiBUaGlzIGFsbG93IHRoZSBcXFwiRXhwZXJpbWVudHNcXFwiIHRhYiwgdGhlIFxcXCJEZXZlbG9wZXIgT3B0aW9uc1xcXCIgdGFiIGFuZCB0aGUgXFxcIkxpZ2h0Y29yZCBBcGlcXFwiIHNlY3Rpb24uXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQWQgQmxvY2tcIjogICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC00XCIsIGluZm86IFwiQmxvY2sgYW55IEJPVCB0aGF0IGRtcyB5b3Ugd2l0aCBhbiBpbnZpdGUgbGluay4gRXZlbiBpbiBhbiBlbWJlZC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJFbmFibGUgTGlnaHRjb3JkIFNlcnZlcnNcIjogICB7aWQ6IFwibGlnaHRjb3JkLTVcIiwgaW5mbzogXCJFbmFibGUgTGlnaHRjb3JkJ3Mgc2VydmVycy4gRGlzYWJsaW5nIHRoaXMgd2lsbCBkaXNhYmxlIGN1c3RvbSBiYWRnZXMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRGlzYWJsZSB0eXBpbmdcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC03XCIsIGluZm86IFwiRG9uJ3QgbGV0IG90aGVyIHNlZSB5b3UncmUgdHlwaW5nLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkxpZ2h0Y29yZCBUYWJzXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtOFwiLCBpbmZvOiBcIkFsbG93cyB5b3UgdG8gbGF1bmNoIG11bHRpcGxlIGluc3RhbmNlcyBvZiBMaWdodGNvcmQgaW4gdGhlIHNhbWUgd2luZG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcclxuICAgIFwiVXNlIE5vdGlmaWNhdGlvbiBTaGltXCI6ICAgICAge2lkOiBcImxpZ2h0Y29yZC0xMFwiLCBpbmZvOiBcIkJhc2ljYWxseSBkb24ndCB1c2UgV2luZG93cydzIE5vdGlmaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IHByb2Nlc3MucGxhdGZvcm0gIT09IFwid2luMzJcIiwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIiwgZXhwZXJpbWVudGFsOiBmYWxzZX0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCBXaW5kb3cgKi9cclxuICAgIFwiQWx3YXlzLW9uLVRvcFwiOiAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0zXCIsIGluZm86IFwiRW5hYmxlIHRoZSB3aW5kb3cncyBBbHdheXMtb24tVG9wIG1vZGUsIHdoZXJlIExpZ2h0Y29yZCBzdGF5cyBvbiB0b3Agb2Ygb3RoZXIgYXBwbGljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIk5vIFdpbmRvdyBCb3VuZHNcIjogICAgICAgICAgIHtpZDogXCJub193aW5kb3dfYm91bmRcIiwgaW5mbzogXCJEaXNhYmxlIFdpbmRvdyBCb3VuZHMuIENhbiBiZSB1c2VmdWwgaWYgeW91IHVzZSBhIHdpbmRvdyBtYW5hZ2VyLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcImxpbnV4XCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJFbmFibGUgR2xhc3N0cm9uXCI6ICAgICAgICAgICB7aWQ6IFwiZW5hYmxlX2dsYXNzdHJvblwiLCBpbmZvOiBcIkVuYWJsZSBHbGFzc3Ryb24uIElmIHlvdSdyZSBub3QgdXNpbmcgdHJhbnNwYXJlbnQgdGhlbWVzLCB0aGlzIGNhbiByZWR1Y2UgbGFnLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcclxuICAgIC8qKiBSaWNoUHJlc2VuY2UgKi9cclxuICAgIFwiRW5hYmxlXCI6ICAgICAgICAgICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIsIGluZm86IFwiRW5hYmxlIFJpY2hQcmVzZW5jZSBiZWxvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJzdGF0dXNcIn1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29va2llID0ge1xyXG4gICAgXCJiZGEtZ3MtMVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtMlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTNcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNVwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtNlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTdcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy04XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJyZWFjdERldlRvb2xzXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtOVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTEwXCI6IGZhbHNlLFxyXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIC8vIHZhbHVlID0gdHlwZW9mKHZhbHVlKSAhPT0gXCJvYmplY3RcIiA/IHZhbHVlIDogbmV3IFByb3h5KHZhbHVlLCB7XHJcbiAgICAvLyAgICAgZ2V0OiBmdW5jdGlvbihvYmosIG1vZCkge1xyXG4gICAgLy8gICAgICAgICBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShtb2QpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqW21vZF07XHJcbiAgICAvLyAgICAgfSxcclxuICAgIC8vICAgICBzZXQ6IGZ1bmN0aW9uKG9iaiwgbW9kKSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkobW9kKSkgcmV0dXJuIFV0aWxzLmVycihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIFwiVHJ5aW5nIHRvIG92ZXJ3cml0ZSBkZXByZWNhdGVkIEJEIGdsb2JhbHNcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCBrZXksIHtcclxuICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLndhcm4oXCJEZXByZWNhdGVkIEdsb2JhbFwiLCBgXCIke2tleX1cIiB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiBQbGVhc2Ugb25seSB1c2UgQmRBcGkuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgIFxyXG59O1xyXG5cclxuXHJcbmltcG9ydCAqIGFzIEdsb2JhbHMgZnJvbSBcIi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGdsb2JhbEtleXMgPSBPYmplY3Qua2V5cyhHbG9iYWxzKTtcclxuZm9yIChjb25zdCBrZXkgb2YgZ2xvYmFsS2V5cykgZGVwcmVjYXRlR2xvYmFsKGtleSwgR2xvYmFsc1trZXldKTtcclxuXHJcblxyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IEJERXZlbnRzIGZyb20gXCIuL21vZHVsZXMvYmRFdmVudHNcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9tb2R1bGVzL2NsYXNzTm9ybWFsaXplclwiO1xyXG5cclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRWMlwiLCBCRFYyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwicGx1Z2luTW9kdWxlXCIsIHBsdWdpbk1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInRoZW1lTW9kdWxlXCIsIHRoZW1lTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiVXRpbHNcIiwgVXRpbHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJCREV2ZW50c1wiLCBCREV2ZW50cyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInNldHRpbmdzUGFuZWxcIiwgc2V0dGluZ3NQYW5lbCk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkRhdGFTdG9yZVwiLCBEYXRhU3RvcmUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDb250ZW50TWFuYWdlclwiLCBDb250ZW50TWFuYWdlcik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNsYXNzTm9ybWFsaXplclwiLCBDbGFzc05vcm1hbGl6ZXIpO1xyXG5cclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcblxyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgQ29yZSk7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBmdW5jdGlvbiBwYXRjaE1vZHVsZUxvYWQoKSB7XHJcbi8vICAgICBjb25zdCBuYW1lc3BhY2UgPSBcImJldHRlcmRpc2NvcmRcIjtcclxuLy8gICAgIGNvbnN0IHByZWZpeCA9IGAke25hbWVzcGFjZX0vYDtcclxuLy8gICAgIGNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIik7XHJcbi8vICAgICBjb25zdCBsb2FkID0gTW9kdWxlLl9sb2FkO1xyXG4vLyAgICAgLy8gY29uc3QgcmVzb2x2ZUZpbGVuYW1lID0gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWU7XHJcblxyXG4vLyAgICAgTW9kdWxlLl9sb2FkID0gZnVuY3Rpb24ocmVxdWVzdCkge1xyXG4vLyAgICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuLy8gICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbi8vICAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuLy8gICAgIH07XHJcblxyXG4vLyAgICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuLy8gICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuLy8gICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4vLyAgICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4vLyAgICAgLy8gICAgIH1cclxuXHJcbi8vICAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4vLyAgICAgLy8gfTtcclxuXHJcbi8vICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuLy8gICAgIH07XHJcbi8vIH1cclxuXHJcbi8vIHBhdGNoTW9kdWxlTG9hZCgpO1xyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGNvbnN0IHYyTG9hZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHYyTG9hZGVyLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxuICAgIHYyTG9hZGVyLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodjJMb2FkZXIpO1xyXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgY29udGVudFdpbmRvd0dldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIikuZ2V0O1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIsIHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IFJlZmxlY3QuYXBwbHkoY29udGVudFdpbmRvd0dldHRlciwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb250ZW50V2luZG93LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB2YWwuYmluZChvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgaW50ZXJjZXB0aW9uIGJ5IHBhdGNoaW5nIFJlZmxlY3QuYXBwbHkgYW5kIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVmbGVjdCwgXCJhcHBseVwiLCB7dmFsdWU6IFJlZmxlY3QuYXBwbHksIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwgXCJiaW5kXCIsIHt2YWx1ZTogRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZX0pO1xyXG5cclxuICAgIGNvbnN0IG9PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47XHJcbiAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICBpZiAodXJsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJhcGkvd2ViaG9va3NcIikpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG9PcGVuLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBURkhvdXIge1xyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCB0d2VsdmVIb3VyID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pOihbMC05XXsxLDJ9KVxcXFxzKEFNfFBNKWApO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvbXBhY3QgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiZGF0ZUZvcm1hdFwiLCB7YWZ0ZXI6IGNvbnZlcnR9KTsgLy8gQ2FsbGVkIGluIENvbXBhY3QgbW9kZVxyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyID0gKCkgPT4ge2NhbmNlbENvenkoKTsgY2FuY2VsQ29tcGFjdCgpO307IC8vIENhbmNlbCBib3RoXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlMjRIb3VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbDI0SG91cikgdGhpcy5jYW5jZWwyNEhvdXIoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlclxyXG5jb25zdCBDaGFubmVsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q2hhbm5lbCAmJiBlLmRlZmF1bHQuaGFzQ2hhbm5lbClbMF0uZGVmYXVsdFxyXG5sZXQgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG5sZXQgRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG5cclxuY29uc3QgYmxvY2tlZCA9IHt9XHJcblxyXG5sZXQgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG5mdW5jdGlvbiBnZXRDdXJyZW50VXNlcigpe1xyXG4gICAgaWYodXNlck1vZHVsZSlyZXR1cm4gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgIHJldHVybiBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBBbnRpQm90RE0ge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmFudGlETSA9IHRoaXMuYW50aURNLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci51bnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGFudGlETShldil7XHJcbiAgICAgICAgaWYoIWV2Lm1lc3NhZ2UuYXV0aG9yLmJvdClyZXR1cm5cclxuICAgICAgICBpZihldi5tZXNzYWdlLmF1dGhvci5pZCA9PT0gZ2V0Q3VycmVudFVzZXIoKS5pZClcclxuICAgICAgICBpZihldi5tZXNzYWdlLmd1aWxkX2lkKXJldHVyblxyXG5cclxuICAgICAgICBjb25zdCBjaGFubmVsID0gQ2hhbm5lbE1vZHVsZS5nZXRDaGFubmVsKGV2Lm1lc3NhZ2UuY2hhbm5lbF9pZClcclxuICAgICAgICBpZighY2hhbm5lbClyZXR1cm4gLy8gbWlnaHQgYmUgYnJva2VuXHJcblxyXG4gICAgICAgIGlmKGNoYW5uZWwudHlwZSAhPT0gMSlyZXR1cm5cclxuXHJcbiAgICAgICAgaWYoYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0pcmV0dXJuIC8vIElmIHRoZSB1c2VyIHVuYmxvY2sgdGhlIGJvdCwgRG9uJ3QgYmxvY2sgaXQgYWdhaW4uXHJcblxyXG4gICAgICAgIGlmKHNjYW5NZXNzYWdlKGV2Lm1lc3NhZ2UpKXtcclxuICAgICAgICAgICAgYmxvY2tlZFtldi5tZXNzYWdlLmF1dGhvci5pZF0gPSB0cnVlXHJcbiAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChgW0FkQmxvY2tdOiBCbG9ja2VkICR7ZXYubWVzc2FnZS5hdXRob3IudXNlcm5hbWV9IyR7ZXYubWVzc2FnZS5hdXRob3IuZGlzY3JpbWluYXRvcn1gLCB7XHJcbiAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJ3YXJuaW5nXCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXJlbGF0aW9uU2hpcE1vZHVsZSlyZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbiAgICAgICAgICAgIHJlbGF0aW9uU2hpcE1vZHVsZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcChldi5tZXNzYWdlLmF1dGhvci5pZCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IFwiQ29udGV4dE1lbnVcIlxyXG4gICAgICAgICAgICB9LCAyKVxyXG4gICAgICAgICAgICBpZighRE1Nb2R1bGUpRE1Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKVswXVxyXG4gICAgICAgICAgICBETU1vZHVsZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwoY2hhbm5lbC5pZCwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzY2FuTWVzc2FnZShtZXNzYWdlKXtcclxuICAgIGlmKC8oZGlzY29yZFxcLmdnfGRpc2NvcmRcXC5jb21cXC9pbnZpdGVcXC98ZGlzY29yZGFwcFxcLmNvbVxcL2ludml0ZVxcLykvZy50ZXN0KG1lc3NhZ2UuY29udGVudCkpcmV0dXJuIHRydWVcclxuICAgIGlmKEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5nZy9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmNvbS9pbnZpdGUvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZGFwcC5jb20vaW52aXRlL1wiKSlyZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG59XHJcbmZ1bmN0aW9uIEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIHNlYXJjaCl7XHJcbiAgICBsZXQgZW1iZWRzID0gbWVzc2FnZS5lbWJlZHMgfHwgW11cclxuICAgIGlmKGVtYmVkcy5sZW5ndGggPT09IDApcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gZW1iZWRzLm1hcChlbWJlZCA9PiB7XHJcbiAgICAgICAgaWYoZW1iZWQudHlwZSAhPT0gXCJyaWNoXCIpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgaWYoKGVtYmVkLnRpdGxlIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZGVzY3JpcHRpb24gfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKCgoZW1iZWQuZm9vdGVyIHx8IFwiXCIpICYmIGVtYmVkLmZvb3Rlci50ZXh0IHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoZW1iZWQuZmllbGRzIHx8IFtdKS5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlLmluY2x1ZGVzKHNlYXJjaCkgfHwgZS5uYW1lLmluY2x1ZGVzKHNlYXJjaClcclxuICAgICAgICB9KS5pbmNsdWRlcyh0cnVlKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG5cclxuICAgIH0pLmluY2x1ZGVzKHRydWUpXHJcbn0iLCJpbXBvcnQge3NldHRpbmdzUlBDLCBkZWZhdWx0UlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uRGlzcGF0Y2hlciYmbS5kZWZhdWx0JiZtLmRlZmF1bHQuZGlzcGF0Y2gpWzBdLmRlZmF1bHRcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBCRE1vZHVsZXMuZ2V0KG09Pm0uQWN0aW9uVHlwZXMpWzBdLkFjdGlvblR5cGVzXHJcblxyXG5jb25zdCBzb2NrZXRJZCA9IFwibGlnaHRjb3JkLXNwb29mLXNvY2tldFwiXHJcbmNvbnN0IHBpZCA9IHByb2Nlc3MucGlkXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tUmljaFByZXNlbmNlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lID0gc2V0dGluZ3NSUENcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGZvcm1hdGVkR2FtZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQgPT09IGZhbHNlKXJldHVybiBudWxsXHJcbiAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgYXBwbGljYXRpb25faWQ6IHRoaXMuZ2FtZS5hcHBsaWNhdGlvbl9pZCB8fCBkZWZhdWx0UlBDLmFwcGxpY2F0aW9uX2lkLFxyXG4gICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBzOiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdID8ge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgYXNzZXRzOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZ2FtZVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRHYW1lKCl7XHJcbiAgICAgICAgZGlzcGF0Y2hlci5kaXNwYXRjaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IEFjdGlvblR5cGVzLkxPQ0FMX0FDVElWSVRZX1VQREFURSxcclxuICAgICAgICAgICAgc29ja2V0SWQsXHJcbiAgICAgICAgICAgIHBpZCxcclxuICAgICAgICAgICAgYWN0aXZpdHk6IHRoaXMuZm9ybWF0ZWRHYW1lXHJcbiAgICAgICAgfSkgICBcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKSB7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkVuYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZXQoc2V0dGluZ3NSUEMgfHwgT2JqZWN0LmNyZWF0ZShkZWZhdWx0UlBDKSlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpIHtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNhYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmZXRjaEFzc2V0cyhhcHBsaWNhdGlvbklkKXtcclxuICAgICAgICBsZXQgYXNzZXRzID0gYXdhaXQgQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXNzZXRzKVswXS5nZXRBc3NldHMoYXBwbGljYXRpb25JZClcclxuICAgICAgICBpZihhc3NldHMudW5kZWZpbmVkICYmIHR5cGVvZiBhc3NldHMudW5kZWZpbmVkID09PSBcIm51bWJlclwiKXtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBBcHBsaWNhdGlvblwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXNzZXRzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGFjdGl2aXR5KXtcclxuICAgICAgICB0aGlzLmdhbWUgPSBhY3Rpdml0eVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxufSIsImltcG9ydCB7cGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lcywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IG1haW5Db3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IEJkQXBpID0ge1xyXG4gICAgZ2V0IFJlYWN0KCkgeyByZXR1cm4gQkRWMi5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIEJEVjIuUmVhY3REb207IH0sXHJcbiAgICBnZXQgUmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIEJEVjIuUmVhY3RDb21wb25lbnQ7fSxcclxuICAgIGdldCBXaW5kb3dDb25maWdGaWxlKCkge3JldHVybiBVdGlscy5XaW5kb3dDb25maWdGaWxlO30sXHJcbiAgICBnZXQgc2V0dGluZ3MoKSB7cmV0dXJuIHNldHRpbmdzO30sXHJcbiAgICBnZXQgZW1vdGVzKCkge3JldHVybiB7fX0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XHJcbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxyXG59OyIsIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cclxuXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5sZXQgc2VsZWN0b3JzXHJcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcclxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XHJcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXHJcbiAgICBsZXQgc2VsZWN0cyA9IFtdXHJcbiAgICBsZXQgdXNlclNldHRpbmdzQWNjb3VudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IEJETW9kdWxlcy5nZXQoZSA9PiB0eXBlb2YgZS5jaGlsZHJlbiA9PT0gXCJzdHJpbmdcIilbMF1cclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXHJcbiAgICBpZih1c2VyU2V0dGluZ3NBY2NvdW50KXtcclxuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgICAgICBzZWxlY3RzLnB1c2goYC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzU2VjdXJpdHkpfSAuJHtyZW1vdmVEYShjaGlsZHJlbi5jaGlsZHJlbil9ID4gZGl2Om50aC1jaGlsZCgyKWApXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxyXG4gICAgcmV0dXJuIHNlbGVjdHNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxyXG5cclxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcclxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcclxuJHtzZWxlY3RvcnMuam9pbihcIiwgXCIpfSB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBibHVyKDRweCk7XHJcbiAgICBvcGFjaXR5OiAuODtcclxufVxyXG5cclxuJHtzZWxlY3RvcnMubWFwKGUgPT4gZStcIjpob3ZlclwiKS5qb2luKFwiLCBcIil9ICB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IG5vbmU7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59YClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkNsYXNzTm9ybWFsaXplciA9IHRoaXNcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luQ2VydGlmaWVyLCB7IGVuY3J5cHRTZXR0aW5nc0NhY2hlLCBkZWNyeXB0U2V0dGluZ3NDYWNoZSwgcHJvY2Vzc0ZpbGUgfSBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IHsgY2FwdHVyZVJlamVjdGlvblN5bWJvbCB9IGZyb20gXCJldmVudHNcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcbmNsYXNzIE1ldGFFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIk1ldGFFcnJvclwiO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG9yaWdpbmFsSlNSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdO1xyXG5jb25zdCBvcmlnaW5hbENTU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID8gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA6ICgpID0+IHtyZXR1cm4gbnVsbDt9O1xyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/KD86XFxyXFxufFxcbilbXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuZXhwb3J0IGxldCBhZGRvbkNhY2hlID0ge31cclxuXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEV4dGVuc2lvbnMoKXtcclxuICAgICAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmpzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInBsdWdpblwiKTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZShcInRoZW1lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwbHVnaW5zRm9sZGVyKCkge3JldHVybiB0aGlzLl9wbHVnaW5zRm9sZGVyIHx8ICh0aGlzLl9wbHVnaW5zRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwicGx1Z2lucy9cIikpKTt9XHJcbiAgICBnZXQgdGhlbWVzRm9sZGVyKCkge3JldHVybiB0aGlzLl90aGVtZXNGb2xkZXIgfHwgKHRoaXMuX3RoZW1lc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInRoZW1lcy9cIikpKTt9XHJcblxyXG4gICAgbG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKXtcclxuICAgICAgICBpZih0eXBlb2YgZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSAhPT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IEpTT04ucGFyc2UoZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiKSkpXHJcbiAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoXCJ7fVwiKSlcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSB7fVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5rZXlzKGFkZG9uQ2FjaGUpXHJcbiAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgIGlmKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpcmV0dXJuIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuXHJcbiAgICAgICAgICAgIGxldCBwcm9wcyA9IFt7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwidGltZXN0YW1wXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcImhhc2hcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCJcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIG9mIHByb3BzKXtcclxuICAgICAgICAgICAgICAgIGlmKCEocHJvcC5rZXkgaW4gdmFsdWUpIHx8IHR5cGVvZiB2YWx1ZVtwcm9wLmtleV0gIT09IHByb3AudHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLmhhc2ggIT09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5yZXN1bHQuc3VzcGVjdCl7IC8vIHJlZmV0Y2ggZnJvbSByZW1vdGUgdG8gYmUgc3VyZSB5b3UncmUgdXAgdG8gZGF0ZS5cclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQWRkb25DYWNoZSgpe1xyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIiwgZW5jcnlwdFNldHRpbmdzQ2FjaGUoSlNPTi5zdHJpbmdpZnkoYWRkb25DYWNoZSkpKVxyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gY29udGVudFR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSA9IGZzLndhdGNoKGJhc2VGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgoZmlsZUVuZGluZykpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHJldHVybiBwbHVnaW5Nb2R1bGUudW5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZU1vZHVsZS51bmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5yZWxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5yZWxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudChjb250ZW50VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXS5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xyXG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgcmF3TWV0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBpZiAobWV0YS5pbmRleE9mKFwiTUVUQVwiKSA8IDApIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxzLnRlc3RKU09OKHJhd01ldGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcGFyc2VkLmZvcm1hdCA9IFwianNvblwiO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgb3V0LmZvcm1hdCA9IFwianNkb2NcIjtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gaXNQbHVnaW4gPyBvcmlnaW5hbEpTUmVxdWlyZSA6IG9yaWdpbmFsQ1NTUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyBzZWxmLnBsdWdpbnNGb2xkZXIgOiBzZWxmLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlscy5zdHJpcEJPTShjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBtZXRhLmFkZGVkID0gc3RhdHMuYXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5tb2RpZmllZCA9IHN0YXRzLm10aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEuc2l6ZSA9IHN0YXRzLnNpemU7XHJcbiAgICAgICAgICAgIGlmICghaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1ldGEuY3NzID0gY29udGVudDtcclxuICAgICAgICAgICAgICAgIGlmIChtZXRhLmZvcm1hdCA9PSBcImpzb25cIikgbWV0YS5jc3MgPSBtZXRhLmNzcy5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlscy5pc0VtcHR5KG1vZHVsZS5leHBvcnRzKTtcclxuICAgICAgICAgICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1ldGE7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy53YXJuKFwiTW9kdWxlIE5vdCBFeHBvcnRlZFwiLCBgJHttZXRhLm5hbWV9LCBwbGVhc2Ugc3RhcnQgc2V0dGluZyBtb2R1bGUuZXhwb3J0c2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZVBsYWNlaG9sZGVyUGx1Z2luKGRhdGEpIHtcclxuICAgICAgICByZXR1cm4ge3BsdWdpbjoge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQ6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0TmFtZTogKCkgPT4ge3JldHVybiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZTt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0QXV0aG9yOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fSxcclxuICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiAoKSA9PiB7cmV0dXJuIGRhdGEubWVzc2FnZSA/IGRhdGEubWVzc2FnZSA6IFwiVGhpcyBwbHVnaW4gd2FzIHVuYWJsZSB0byBiZSBsb2FkZWQuIENoZWNrIHRoZSBhdXRob3IncyBwYWdlIGZvciB1cGRhdGVzLlwiO30sXHJcbiAgICAgICAgICAgICAgICBnZXRWZXJzaW9uOiAoKSA9PiB7cmV0dXJuIFwiPz8/XCI7fVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUgfHwgZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgZmlsZW5hbWU6IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YS5zb3VyY2UgPyBkYXRhLnNvdXJjZSA6IFwiXCIsXHJcbiAgICAgICAgICAgIHdlYnNpdGU6IGRhdGEud2Vic2l0ZSA/IGRhdGEud2Vic2l0ZSA6IFwiXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG5cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NGaWxlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSksIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB9LCAoaGFzaCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCB0cnVlKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZVtyZXN1bHQuaGFzaF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc2g6IHJlc3VsdC5oYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVBZGRvbkNhY2hlKClcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7d2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9fTt9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHdpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmKCFjb250ZW50Lm5hbWUpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ2Fubm90IGVzY2FwZSB0aGUgSUQuXCIsIGVycm9yOiB7bWVzc2FnZTogXCJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncmVwbGFjZScgb2YgdW5kZWZpbmVkXCIsIHN0YWNrOiBcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIn19XHJcbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XHJcbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XHJcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hFeHRlbnNpb25zKClcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cclxuICAgIGxvYWRUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJ0aGVtZVwiKTt9XHJcbn07XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvbnRlbnRNYW5hZ2VyIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgTGlnaHRjb3JkTG9nbyBmcm9tIFwiLi4vc3ZnL2xpZ2h0Y29yZFwiO1xyXG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XHJcbmltcG9ydCBFbW9qaU1vZHVsZSBmcm9tIFwiLi9lbW9qaU1vZHVsZVwiXHJcbmltcG9ydCB7cmVtb3RlIGFzIGVsZWN0cm9ufSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5jb25zdCB7aXBjUmVuZGVyZXJ9ID0gcmVxdWlyZShcImVsZWN0cm9uXCIpO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxuICAgIC8vIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKERhdGFTdG9yZS5jb25maWdGaWxlKSk7XHJcbiAgICAvLyB0aGlzLmluaXQoKTtcclxufVxyXG5cclxubGV0IG1ldGhvZHNcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgT2JqZWN0LmFzc2lnbihiZENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3JlLnByb3RvdHlwZSwgXCJtZXRob2RzXCIsIHtcclxuICAgIGdldCgpe1xyXG4gICAgICAgIHJldHVybiBtZXRob2RzXHJcbiAgICB9XHJcbn0pXHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRNZXRob2RzID0gZnVuY3Rpb24obSkge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgbWV0aG9kcyA9IG1cclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcclxuICAgIHRoaXMuaGFzU3RhcnRlZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFBcnJheS5wcm90b3R5cGUuZmxhdCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmJkVmVyc2lvbiArIFwiIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBvbGQgdmVyc2lvbiAoXCIgKyBjdXJyZW50RGlzY29yZFZlcnNpb24gKyBcIikgb2YgRGlzY29yZC4gUGxlYXNlIHVwZGF0ZSB5b3VyIERpc2NvcmQgaW5zdGFsbGF0aW9uIGJlZm9yZSBwcm9jZWVkaW5nLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJkQ29uZmlnLnZlcnNpb24gPCBtaW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiZENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBiYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuRUQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBFbmhhbmNlZERpc2NvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LldlYlNvY2tldCAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUgJiYgd2luZG93LldlYlNvY2tldC5uYW1lLmluY2x1ZGVzKFwiUGF0Y2hlZFwiKSkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIFBvd2VyY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRyaWJ1dGVzLmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIC8qXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBiZENvbmZpZy51cGRhdGVyID8gYmRDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogYmRDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBiZENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBbYFRoZXJlIGlzIGFuIHVwZGF0ZSBhdmFpbGFibGUgZm9yIEJhbmRhZ2VkQkQncyBJbmplY3RvciAoJHtsYXRlc3RMb2NhbFZlcnNpb259KS5gLCBcIllvdSBjYW4gZWl0aGVyIHVwZGF0ZSBhbmQgcmVzdGFydCBub3csIG9yIGxhdGVyLlwiXSwge1xyXG4gICAgICAgICAgICBjb25maXJtVGV4dDogXCJVcGRhdGUgTm93XCIsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiTWF5YmUgTGF0ZXJcIixcclxuICAgICAgICAgICAgb25Db25maXJtOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvblVwZGF0ZUZhaWxlZCA9ICgpID0+IHtVdGlscy5hbGVydChcIkNvdWxkIE5vdCBVcGRhdGVcIiwgYFVuYWJsZSB0byB1cGRhdGUgYXV0b21hdGljYWxseSwgcGxlYXNlIGRvd25sb2FkIHRoZSBpbnN0YWxsZXIgYW5kIHJlaW5zdGFsbCBub3JtYWxseS48YnIgLz48YnIgLz48YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5gKTt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWRVcGRhdGUgPSBhd2FpdCB0aGlzLnVwZGF0ZUluamVjdG9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWRVcGRhdGUpIHJldHVybiBvblVwZGF0ZUZhaWxlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5yZWxhdW5jaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcC5leGl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25VcGRhdGVGYWlsZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSovXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIHRoaXMuaW5pdFNldHRpbmdzKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XHJcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIEFkZG9ucyBDYWNoZVwiKVxyXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XHJcblxyXG4gICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIGF0b2IoRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpKSk7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWRjLTBcIl0pIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnRuLmJ0bi1kaXNjb25uZWN0XCIpLmNsaWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBQbHVnaW5DZXJ0aWZpZXIuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpLmxlbmd0aCkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBNYWluIE9ic2VydmVyXCIpO1xyXG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIHtcclxuICAgICAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgICAgICBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogYmRwbHVnaW5FcnJvcnMsIHRoZW1lczogYmR0aGVtZUVycm9yc30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHByZXZpb3VzVmVyc2lvbiA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJ2ZXJzaW9uXCIpO1xyXG4gICAgaWYgKGJiZFZlcnNpb24gPiBwcmV2aW91c1ZlcnNpb24pIHtcclxuICAgICAgICBpZiAoYmJkQ2hhbmdlbG9nKSB0aGlzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJ2ZXJzaW9uXCIsIGJiZFZlcnNpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIEVtb2ppTW9kdWxlLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRQaWxscy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFBpbGxzIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZXNzYWdlSGVhZGVyLmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgQ2hhdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lbWJlckxpc3QuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBNZW1iZXIgTGlzdCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dGFjaG1lbnQuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoUG9wb3V0V2luZG93LmJpbmQodGhpcyksIFwiQkQgUG9wb3V0IFdpbmRvdyBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uc3R5bGUudG9wID0gXCIzcHhcIlxyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaFBvcG91dFdpbmRvdyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IGNhbmNlbGVkID0gZmFsc2VcclxuICAgIHRoaXMuY2FuY2VsUGF0Y2hQb3BvdXRXaW5kb3cgPSAoKSA9PiB7XHJcbiAgICAgICAgY2FuY2VsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFdpbmRvdylcclxuICAgIC50aGVuKHBvcG91dE1vZHVsZSA9PiB7XHJcbiAgICAgICAgaWYoY2FuY2VsZWQpcmV0dXJuXHJcblxyXG4gICAgICAgIC8vIE5vdCBhIGdvb2QgaWRlYSB0byBkbyBpdCBsaWtlIHRoYXQuXHJcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuX2ludGVyY2VwdG9yXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnNldEludGVyY2VwdG9yKGZ1bmN0aW9uKGFjdGlvbil7XHJcbiAgICAgICAgICAgIGlmKGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gXCJQT1BPVVRfV0lORE9XX09QRU5cIil7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBhY3Rpb24ucmVuZGVyXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24ucmVuZGVyID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIxID0gcmVuZGVyLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUxID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyMS50eXBlID0gZnVuY3Rpb24ocHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIyID0gdHlwZTEocHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb3BzLCByZW5kZXIyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyMlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZW5kZXIxKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGludGVyY2VwdG9yLmNhbGwodGhpcywgYWN0aW9uKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfT1BFTlwiLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTlcIl0pcmV0dXJuXHJcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXJldHVyblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJQT1BPVVQgVEhFTUVcIiwgXCJQb3BvdXQgb3BlbmVkLCBBZGRpbmcgdGhlbWVcIilcclxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2KVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gcG9wb3V0TW9kdWxlLmRlZmF1bHQuZ2V0V2luZG93KGV2LmtleSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHdpbmRvdylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0cmlidXRlcyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IGF0dHJpYnNQYXRjaHMgPSBbXVxyXG4gICAgdGhpcy5jYW5jZWxQYXRjaEF0dHJpYnV0ZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBhdHRyaWJzUGF0Y2hzLmZvckVhY2goZSA9PiBlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgd2hpbGUoIXYyLk1lc3NhZ2VDb21wb25lbnQpYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpXHJcbiAgICBcclxuICAgIC8vIFRPRE86IHRyeSB0byBwYXRjaCBjb3JyZWN0bHkgdGhlIHVzZXIgcG9wb3V0IG9uIGEgbmV4dCB1cGRhdGVcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkRpc2NvcmRUYWdcIilcclxuICAgIC50aGVuKERpc2NvcmRUYWcgPT4ge1xyXG4gICAgICAgIGxldCBEaXNjb3JkVGFnQ29tcCA9IERpc2NvcmRUYWcuZGVmYXVsdFxyXG4gICAgICAgIERpc2NvcmRUYWcuZGVmYXVsdCA9IGZ1bmN0aW9uKHByb3BzKXtcclxuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gRGlzY29yZFRhZ0NvbXAocHJvcHMpXHJcblxyXG4gICAgICAgICAgICBsZXQgaWQgPSB1dWlkdjQoKVxyXG5cclxuICAgICAgICAgICAgbGV0IGJhZGdlRGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiNXB4XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImluaGVyaXRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSlcclxuXHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtyZXR1cm5WYWx1ZV1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMudXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBwcm9wcy51c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGJhZGdlRGl2KVxyXG4gICAgICAgICAgICBsZXQgZGl2ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNoaWxkcmVuKVxyXG4gICAgICAgICAgICBhcHBseUJhZGdlcyhpZCwgcHJvcHMudXNlciwgZmFsc2UpXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGl2XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZihkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UpeyAvLyB0aGlzIGNhbiBiZSBhIGJsb2NrZWQgbWVzc2FnZSAobm90IG9wZW5lZClcclxuICAgICAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcImRhdGEtbWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgICAgIH1cclxuICAgIH19KSlcclxuICAgICAgICAvKlxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wc1tcIm1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgIH19KSkqL1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHRpbWVzQ2hlY2tlZCA9IDA7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn1gKS5sZW5ndGggPiAwKSB0aW1lc0NoZWNrZWQrKztcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGQgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBCRFYyLmd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9IC4ke2d1aWxkfSAuJHtibG9ifWApLmxlbmd0aCA+IDApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVzQ2hlY2tlZCA+PSA1MCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwibG9hZGluZ1wiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IHtzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO30pO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbmplY3RFeHRlcm5hbHMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIC8vIE5vIGV4dGVybmFsc1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdFNldHRpbmdzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcclxuICAgIGlmKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikgJiYgIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpe1xyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIGRlZmF1bHRDb29raWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgZGVmYXVsdFJQQyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldHRpbmdzUGFuZWwubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBzZXR0aW5nIGluIGRlZmF1bHRDb29raWUpIHtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW3NldHRpbmddID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPSBkZWZhdWx0Q29va2llW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5wcm90b3R5cGUgJiYgZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucylcclxuICAgIC50aGVuKHNldHRpbmdNb2R1bGUgPT4ge1xyXG5cclxuICAgICAgICBsZXQgZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zXHJcbiAgICAgICAgc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9ucyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZXRQcmVkaWNhdGVTZWN0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuXHJcbiAgICAgICAgICAgIGlmKCFyZXN1bHRbMV0pcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICBpZihyZXN1bHRbMV0uc2VjdGlvbiA9PT0gXCJNeSBBY2NvdW50XCIpeyAvLyB1c2VyIHNldHRpbmdzLCBub3QgZ3VpbGQgc2V0dGluZ3NcclxuICAgICAgICAgICAgICAgIGxldCBwb3BlZCA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG5cclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnNldHRpbmdzUGFuZWwucmVuZGVyU2lkZWJhcih0aGlzKSlcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZShwb3BlZFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9wZWQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn07XHJcblxyXG5cclxubGV0IGNsYXNzTmFtZUxheWVyXHJcbmxldCBjbGFzc05hbWVTb2NpYWxMaW5rc1xyXG5sZXQgY2xhc3NOYW1lTW9kYWxcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luTW9kdWxlICE9PSBcInVuZGVmaW5lZFwiKSBwbHVnaW5Nb2R1bGUucmF3T2JzZXJ2ZXIobXV0YXRpb24pO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcclxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVMYXllciljbGFzc05hbWVMYXllciA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVTb2NpYWxMaW5rcyljbGFzc05hbWVTb2NpYWxMaW5rcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc29jaWFsTGlua3MgJiYgdHlwZW9mIGUuc29jaWFsTGlua3MgPT09IFwic3RyaW5nXCIpWzBdLnNvY2lhbExpbmtzXHJcbiAgICAgICAgICAgIGlmKCFjbGFzc05hbWVNb2RhbCljbGFzc05hbWVNb2RhbCA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUubW9kYWwgJiYgdHlwZW9mIGUubW9kYWwgPT09IFwic3RyaW5nXCIgJiYgZS5pbm5lciAmJiB0eXBlb2YgZS5pbm5lciA9PT0gXCJzdHJpbmdcIiAmJiAhZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUpWzBdLm1vZGFsXHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpID09PSBcIkdVSUxEX1NFVFRJTkdTXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZVNvY2lhbExpbmtzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50RWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ICYmIG5vZGUucXVlcnlTZWxlY3RvcihcIiNhY2Vfc2V0dGluZ3NtZW51XCIpKSBub2RlLmlkID0gXCJhY2Vfc2V0dGluZ3NtZW51X2NvbnRhaW5lclwiO1xyXG5cclxuICAgICAgICAgICAgLy8gRW1vamkgUGlja2VyXHJcbiAgICAgICAgICAgIC8vbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImFuaW1hdG9yTGVmdC0xRVF4VTBcIilcclxuICAgICAgICAgICAgLy9pZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lTGF5ZXIyKSAmJiBub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lRW1vamlQaWNrZXIpLmxlbmd0aCAgJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5cIitjbGFzc05hbWVFbW9qaVBpY2tlcikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lQW5pbWF0b3JMZWZ0KSkgcXVpY2tFbW90ZU1lbnUub2JzQ2FsbGJhY2sobm9kZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuc2hvd0NoYW5nZWxvZ01vZGFsID0gZnVuY3Rpb24ob3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NoYW5nZWxvZ01vZGFsKG9wdGlvbnMpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuYWxlcnQgPSBmdW5jdGlvbih0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoU29jaWFsID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb2NpYWxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJUYWJCYXJcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghVGFiQmFyKSByZXR1cm47XHJcbiAgICB0aGlzLnNvY2lhbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goVGFiQmFyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW4ubGVuZ3RoIDwgMykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAzXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChBbmNob3IpIHtcclxuICAgICAgICAgICAgbGV0IHNvY2lhbE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zb2NpYWxMaW5rcylbMF1cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVDb2xvck11dGVkLFxyXG4gICAgICAgICAgICBzaXplcyxcclxuICAgICAgICAgICAgY2xhc3NOYW1lVmVyc2lvbkhhc2hcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvck11dGVkKVswXS5jb2xvck11dGVkLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJzaW9uSGFzaClbMF0udmVyc2lvbkhhc2hcclxuICAgICAgICBdXHJcblxyXG4gICAgICAgIGNvbnN0IHZlcnNpb25IYXNoID0gYCgke2JkQ29uZmlnLmhhc2ggPyBiZENvbmZpZy5oYXNoLnN1YnN0cmluZygwLCA3KSA6IGJkQ29uZmlnLmJyYW5jaH0pYDtcclxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBMaWdodGNvcmQgJHtlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikudmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgYCgkeyhlbGVjdHJvbi5nZXRHbG9iYWwoXCJCdWlsZEluZm9cIikuY29tbWl0IHx8IFwiVW5rbm93blwiKS5zbGljZSgwLCA3KX0pYCkpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogYCR7Y2xhc3NOYW1lQ29sb3JNdXRlZH0gJHtzaXplcy5zaXplMTJ9YH0sIGBCQkQgJHtiYmRWZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCB2ZXJzaW9uSGFzaCkpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNpb25zID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZTtcclxuICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsVmVyc2lvbnMoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnNwbGljZSgxLCAwLCBhZGRpdGlvbmFsKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICB9O1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuY29uc3QgZ2V0R3VpbGRDbGFzc2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBndWlsZHNXcmFwcGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICBjb25zdCBndWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICBjb25zdCBwaWxsID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGd1aWxkc1dyYXBwZXIsIGd1aWxkcywgcGlsbCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkTGlzdEl0ZW1zID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZENsYXNzZXMgPSBnZXRHdWlsZENsYXNzZXMoKTtcclxuICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBHdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgYmxvYkNsYXNzID0gR3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJEVjIuZ2V0SW50ZXJuYWxJbnN0YW5jZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtsaXN0SXRlbUNsYXNzfSAuJHtibG9iQ2xhc3N9YCkucGFyZW50RWxlbWVudCk7XHJcbiAgICBjb25zdCBHdWlsZENvbXBvbmVudCA9IHJlYWN0SW5zdGFuY2UucmV0dXJuLnR5cGU7XHJcbiAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5yZXR1cm5WYWx1ZSAmJiBkYXRhLnRoaXNPYmplY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZERhdGEgPSBkYXRhLnRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWVcclxuICAgICAgICAgICAgY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudW5yZWFkKSBjbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuc2VsZWN0ZWQpIGNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmF1ZGlvKSBjbGFzc05hbWUgKz0gXCIgYmQtYXVkaW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS52aWRlbykgY2xhc3NOYW1lICs9IFwiIGJkLXZpZGVvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYmFkZ2UpIGNsYXNzTmFtZSArPSBcIiBiZC1iYWRnZVwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmFuaW1hdGFibGUpIGNsYXNzTmFtZSArPSBcIiBiZC1hbmltYXRhYmxlXCI7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFBpbGxzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFBpbGxQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiAhbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICB0aGlzLmd1aWxkUGlsbFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goZ3VpbGRQaWxsLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgaWYgKHByb3BzLnVucmVhZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLnNlbGVjdGVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1zZWxlY3RlZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgIGNvbnN0IGd1aWxkQ29tcG9uZW50cyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICBpZiAoIWd1aWxkQ29tcG9uZW50cyB8fCAhR3VpbGRzKSByZXR1cm47XHJcbiAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZC1zZXBhcmF0b3JcIjtcclxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRhY2htZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5BdHRhY2htZW50UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEF0dGFjaG1lbnQgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdHRhY2htZW50XCIpWzBdIC8vIHRlbXBvcmFyeVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhQXR0YWNobWVudCB8fCAhQXR0YWNobWVudC5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLkF0dGFjaG1lbnRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEF0dGFjaG1lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXJldHVyblxyXG4gICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSB8fCBudWxsXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcblxyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWF0dGFjaG1lbnQudXJsKXJldHVyblxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7XHJcbiAgICAgICAgICAgIGlkOiBcImNlcnRpZmllZC1cIitpZFxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIFBsdWdpbkNlcnRpZmllci5wYXRjaChhdHRhY2htZW50LCBcImNlcnRpZmllZC1cIitpZClcclxuICAgIH19KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lc3NhZ2VIZWFkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVzc2FnZUhlYWRlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiTWVzc2FnZVRpbWVzdGFtcFwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lc3NhZ2VIZWFkZXIgfHwgIU1lc3NhZ2VIZWFkZXIuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZXNzYWdlSGVhZGVyLCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwibWVzc2FnZS5hdXRob3JcIik7XHJcbiAgICAgICAgLy8gY29uc3QgaGVhZGVyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHNcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWF1dGhvciB8fCAhYXV0aG9yLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAoYXV0aG9yLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7IC8vIFJhdWVuemk6IEJhbmRhZ2VkQkQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGF1dGhvci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCBhdXRob3IuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIGF1dGhvciwgdHJ1ZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBjaGF0KXtcclxuICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmFkZ2VzLVwiK2lkKVxyXG4gICAgICAgIGlmKCFkaXYgfHwgZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMClyZXR1cm5cclxuICAgICAgICBpZihkaXYuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuXHJcbiAgICAgICAgbGV0IGJsb2NrRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgIGJsb2NrRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChibG9ja0RpdilcclxuXHJcbiAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcblxyXG4gICAgICAgIGRpc3RhbnQuZ2V0QmFkZ2VzKHVzZXIuaWQpXHJcbiAgICAgICAgLnRoZW4oYmFkZ2VzID0+IHtcclxuICAgICAgICAgICAgYmFkZ2VzLmZvckVhY2goYmFkZ2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLWxvZ29cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTZweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBiYWRnZS5zY29wZXMuZm9yRWFjaChzY29wZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NvcGUgPT09IFwidXNlclwiKXsvLyByZXF1aXJlIHVzZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMudXNlciA9IHVzZXJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSBcclxuICAgICAgICAgICAgICAgIGlmKCFiYWRnZS5ocmVmKXtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5BbmNob3IgPSBBbmNob3JcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5ocmVmID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBiYWRnZS5uYW1lfSxcclxuICAgICAgICAgICAgICAgICAgICBiYWRnZS5ocmVmID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBiYWRnZS5ocmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGNoYXQgPyBcImJkLWNoYXQtYmFkZ2VcIiA6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYmFkZ2UubmFtZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKSkgOiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdjIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihlbGVtZW50LCBkaXYyKVxyXG4gICAgICAgICAgICAgICAgZGl2Mi5jaGlsZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKG5vZGUpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaE1lbWJlckxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLm1lbWJlckxpc3RQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgTWVtYmVyTGlzdEl0ZW0gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1lbWJlckxpc3RJdGVtXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVtYmVyTGlzdEl0ZW0gfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLnJlbmRlckRlY29yYXRvcnMpIHJldHVybjtcclxuICAgIHRoaXMubWVtYmVyTGlzdFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlLCBcInJlbmRlckRlY29yYXRvcnNcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEudGhpc09iamVjdCwgXCJwcm9wcy51c2VyXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIXVzZXIgfHwgIXVzZXIuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh1c2VyLmlkID09PSBcIjI0OTc0NjIzNjAwODE2OTQ3M1wiKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodXNlci5pZCA9PT0gXCI2OTY0ODExOTQ0NDMwMTQxNzRcIiB8fCB1c2VyLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJhZGdlcy1cIitpZH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCB1c2VyLCBmYWxzZSlcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnVwZGF0ZUluamVjdG9yID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBpbmplY3Rpb25QYXRoID0gRGF0YVN0b3JlLmluamVjdGlvblBhdGg7XHJcbiAgICBpZiAoIWluamVjdGlvblBhdGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xyXG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XHJcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IC8qcmVxdWlyZShcInJlcXVlc3RcIik7Ki8gbnVsbFxyXG5cclxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcclxuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xyXG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xyXG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xyXG5cclxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xyXG5cclxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cclxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XHJcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuICAgIFxyXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcclxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xyXG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XHJcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxyXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xyXG5cclxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcclxuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxyXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cclxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiY29uc3QgX19ub25fd2VicGFja19yZXF1aXJlX18gPSB3aW5kb3cucmVxdWlyZVxyXG5cclxuaW1wb3J0IHtiZENvbmZpZ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IHJlbGVhc2VDaGFubmVsID0gRGlzY29yZE5hdGl2ZS5nbG9iYWxzID8gRGlzY29yZE5hdGl2ZS5nbG9iYWxzLnJlbGVhc2VDaGFubmVsIDogRGlzY29yZE5hdGl2ZS5hcHAgPyBEaXNjb3JkTmF0aXZlLmFwcC5nZXRSZWxlYXNlQ2hhbm5lbCgpIDogXCJzdGFibGVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcImJpbmFyeVwiKSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBsZXQgc2V0dGluZ3MgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGZzLnVubGlua1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJzZXR0aW5nc1wiKSkgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwge1tyZWxlYXNlQ2hhbm5lbF06IHNldHRpbmdzfSk7XHJcbiAgICAgICAgICAgIGVsc2Ugc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtzdGFibGU6IHt9LCBjYW5hcnk6IHt9LCBwdGI6IHt9fSwgc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJERGF0YShcInNldHRpbmdzXCIsIHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIFV0aWxzLmFsZXJ0KFwiQ29ycnVwdCBTdG9yYWdlXCIsIFwiVGhlIGJkIHN0b3JhZ2UgaGFzIHNvbWVob3cgYmVjb21lIGNvcnJ1cHQuIFlvdSBtYXkgZWl0aGVyIHRyeSB0byBzYWx2YWdlIHRoZSBmaWxlIG9yIGRlbGV0ZSBpdCB0aGVuIHJlbG9hZC5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmplY3Rpb25QYXRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5faW5qZWN0aW9uUGF0aCkgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGg7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBiYXNlID0gZWxlY3Ryb24uZ2V0QXBwUGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdCYXNlID0gZWxlY3Ryb24uZ2V0UGF0aChcInVzZXJEYXRhXCIpO1xyXG4gICAgICAgIGNvbnN0IHJvYW1pbmdMb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShyb2FtaW5nQmFzZSwgZWxlY3Ryb24uZ2V0VmVyc2lvbigpLCBcIm1vZHVsZXNcIiwgXCJkaXNjb3JkX2Rlc2t0b3BfY29yZVwiLCBcImluamVjdG9yXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29uZmlnRmlsZSgpIHtyZXR1cm4gdGhpcy5fY29uZmlnRmlsZSB8fCAodGhpcy5fY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmluamVjdGlvblBhdGgsIFwiYmV0dGVyZGlzY29yZFwiLCBcImNvbmZpZy5qc29uXCIpKTt9XHJcbiAgICBnZXQgQkRGaWxlKCkge3JldHVybiB0aGlzLl9CREZpbGUgfHwgKHRoaXMuX0JERmlsZSA9IHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCwgXCJiZHN0b3JhZ2UuanNvblwiKSk7fVxyXG4gICAgZ2V0IHNldHRpbmdzRmlsZSgpIHtyZXR1cm4gdGhpcy5fc2V0dGluZ3NGaWxlIHx8ICh0aGlzLl9zZXR0aW5nc0ZpbGUgPSBwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGgsIFwiYmRzZXR0aW5ncy5qc29uXCIpKTt9XHJcbiAgICBnZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIHBsdWdpbk5hbWUgKyBcIi5jb25maWcuanNvblwiKTt9XHJcblxyXG4gICAgZ2V0U2V0dGluZ0dyb3VwKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZXR0aW5nR3JvdXAoa2V5LCBkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldID0gZGF0YTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwiYmluYXJ5XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPT09IHVuZGVmaW5lZCkgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0ge307XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcImJpbmFyeVwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcclxuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xyXG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xyXG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcclxuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXHJcbiAgICAgICAgLypcclxuICAgICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0UnVsZSA9IHJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXRlc3RSdWxlKSByZXR1cm4gbGF0ZXN0UnVsZS5zZWxlY3RvclRleHQ7XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoKSByZXR1cm4gYC4ke0FycmF5LmZyb20oZWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7XHJcbiAgICAgICAgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QpLmpvaW4oXCIuXCIpfWA7Ki9cclxuICAgIH1cclxuXHJcbiAgICBnZXRSdWxlcyhlbGVtZW50LCBjc3MgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuc3R5bGVTaGVldHMpIHtcclxuICAgICAgICAvL2lmICh3aW5kb3cuZ2V0TWF0Y2hlZENTU1J1bGVzKSByZXR1cm4gd2luZG93LmdldE1hdGNoZWRDU1NSdWxlcyhlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcclxuaW1wb3J0IExpZ2h0Y29yZFVzZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL0xpZ2h0Y29yZFVzZXJcIjtcclxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59ICBcclxuXHJcbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxyXG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhY2hlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcclxuICAgIH0vKlxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZSgpe1xyXG4gICAgICAgIEJkQXBpLnNob3dUb2FzdChcIkRlbGV0aW5nIGFsbCBpbmZvcyBhYm91dCB5b3Ugb24gTGlnaHRjb3JkIFNlcnZlcnMuLi5cIiwge3R5cGU6IFwid2FyblwifSlcclxuICAgICAgICByZXR1cm4gaGFuZGxlUmVxdWVzdChSb3V0ZXMuZGVsZXRlLCBcImRlbGV0ZVwiKVxyXG4gICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZGVsZXRlIGFsbCBpbmZvcm1hdGlvbnM6ICR7KHJlcy5zdGF0dXMrXCIgXCIrcmVzLnN0YXR1c1RleHQrXCIgXCIrYXdhaXQgcmVzLnRleHQoKSl9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zLmApXHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dUb2FzdChcIlN1Y2Nlc2Z1bGx5IGRlbGV0ZWQgaW5mb3JtYXRpb25zXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gPSBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLCBjb3VsZG4ndCBkZWxldGUgaW5mb3JtYXRpb25zLiBTZWUgY29uc29sZSBmb3IgbW9yZSBpbmZvc1wiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBkZWxldGUgYWxsIGluZm9ybWF0aW9uczogJHtlcnIuc3RhY2t9YClcclxuICAgICAgICB9KVxyXG4gICAgfSovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgY3VzdG9tIGJhZGdlcyBmcm9tIHRoZSB1c2VyIElELlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXIgVGhlIHVzZXIgSUQgXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDb25zdGFudHNbXCJiYWRnZXNcIl0+fVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRCYWRnZXModXNlcil7XHJcbiAgICAgICAgaWYodGhpcy5jYWNoZS5iYWRnZXNbdXNlcl0pcmV0dXJuIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgaWYoYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSlyZXR1cm4gYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG5cclxuICAgICAgICBsZXQgcmVzb2x2ZVxyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzKSA9PiAocmVzb2x2ZSA9IHJlcykpXHJcbiAgICAgICAgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXSA9IG5ld1Byb21pc2VcclxuXHJcbiAgICAgICAgY29uc3QgYmFkZ2VzID0gW11cclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIENvbnN0YW50cy5iYWRnZXMpe1xyXG4gICAgICAgICAgICBpZihiYWRnZS5kZWZhdWx0VXNlcnMuaW5jbHVkZXModXNlcikpYmFkZ2VzLnB1c2goYmFkZ2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZldGNoZWRCYWRnZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSlyZXR1cm4gcmVzb2x2ZShbXSlcclxuICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaC5wdXNoKFt1c2VyLCByZXNvbHZlXSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlcnMgPSBiYWRnZXNUb0ZldGNoXHJcbiAgICAgICAgICAgICAgICBpZih1c2Vycy5sZW5ndGggPT09IDApcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBiYWRnZXNUb0ZldGNoID0gW11cclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3QoUm91dGVzLmJhZGdlcywgXCJQT1NUXCIsIEpTT04uc3RyaW5naWZ5KHVzZXJzLm1hcChlID0+IGVbMF0pKSlcclxuICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IHNlcnZlciBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgdXNlciBvZiByZXNwb25zZUJvZHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHVzZXJzLmZpbmQocHJvbWlzZSA9PiBwcm9taXNlWzBdID09PSB1c2VyLnVzZXJfaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VbMV0odXNlci5iYWRnZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZighKGVyciBpbnN0YW5jZW9mIExpZ2h0Y29yZEVycm9yKSljb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICB1c2Vycy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9LCAwKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBmZXRjaGVkQmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoIUNvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBXZSBkbyBub3QgaGF2ZSB0aGUgQ29tcG9uZW50LCBza2lwIGl0LlxyXG4gICAgICAgICAgICBpZihiYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSljb250aW51ZSAvLyBBbHJlYWR5IGluc2VydGVkLlxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaChDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczogT2JqZWN0LmFzc2lnbih0aGlzLmNhY2hlLmJhZGdlcywge1t1c2VyXTogYmFkZ2VzfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIH0sIDYwMDAwMCk7XHJcblxyXG4gICAgICAgIHJlc29sdmUoYmFkZ2VzKVxyXG4gICAgICAgIGRlbGV0ZSBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcbiAgICAgICAgcmV0dXJuIGJhZGdlc1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVSZXF1ZXN0ID0gZnVuY3Rpb24ocm91dGUsIG1ldGhvZCwgZGF0YSl7XHJcbiAgICBpZighc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNVwiXSl7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBMaWdodGNvcmRFcnJvcihcIlRoZSBjdXJyZW50IHNldHRpbmdzIGJsb2NrZWQgdGhlIHJlcXVlc3QuXCIpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVGZXRjaChgJHtDb25zdGFudHMuU0VSVkVSX1VSTH0vYXBpL3YxJHtyb3V0ZX1gLCB7XHJcbiAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJDTElFTlRcIjogXCJMaWdodGNvcmRcIixcclxuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHdpbmRvdy5MaWdodGNvcmQuQXBpLkF1dGhvcml6YXRpb24gfHwgXCJOb25lOjpBbm9ueW1vdXNcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uKGRhdGEgPyB7XHJcbiAgICAgICAgICAgIGJvZHk6IGRhdGFcclxuICAgICAgICB9IDoge30pXHJcbiAgICB9KVxyXG59XHJcblxyXG5jbGFzcyBMaWdodGNvcmRFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTGlnaHRjb3JkRXJyb3JcIlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgU0VSVkVSX1VSTDogXCJodHRwczovL2xpZ2h0Y29yZC5kZXJva3UueHl6XCIsXHJcbiAgICBiYWRnZXM6IFsgLy8gVE9ETzogQWRkIG1vcmUgYmFkZ2VzICsgc2VydmVyIHNpZGUgc3ZnXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZCBCdWcgSHVudGVyXCIsXHJcbiAgICAgICAgICAgIGlkOiBcImYwNDY5OGY1LTgxNmItNDFlMy1iZDAxLTkyMjkxMTkzZDdhNVwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIsXHJcbiAgICAgICAgICAgICAgICBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQnVnSHVudGVyQmFkZ2UsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL2xpZ2h0Y29yZC9saWdodGNvcmQvd2lraS9iYWRnZXMjYnVnX2h1bnRlclwiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJ1ZmZvb25cIixcclxuICAgICAgICAgICAgaWQ6IFwiMDY5MDRkMzEtNjViNC00MWVjLWE1MGMtODY1OGJiZDFhZjk2XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCIzODkwMTY4OTU1NDM3MDU2MDJcIixcclxuICAgICAgICAgICAgICAgIFwiNjY0NjAwMTM0NTI4NjYzNTY1XCIsXHJcbiAgICAgICAgICAgICAgICBcIjYyNTM1MDY1NzgyOTg5NjIyNFwiXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHNjb3BlczogW10sXHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogQ2lyY3VzLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8veW91dHUuYmUvRUp0YjZ6LWRsVDg/dD0xNDVcIlxyXG4gICAgICAgIH1cclxuICAgIF1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFJvdXRlcyA9IHtcclxuICAgIGJhZGdlczogYC91c2Vycy9iYWRnZXNgXHJcbn0iLCIvKipcclxuICogQ29weXJpZ2h0IDIwMTggWmFjaGFyeSBSYXVlblxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmdcclxuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksXHJcbiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXHJcbiAqIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWRcclxuICogdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELFxyXG4gKiBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQVxyXG4gKiBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUXHJcbiAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxyXG4gKiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkVcclxuICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXHJcbiAqIFxyXG4gKiBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CRFBsdWdpbkxpYnJhcnlcclxuICovXHJcblxyXG4vKipcclxuICogQGludGVyZmFjZVxyXG4gKiBAbmFtZSBPZmZzZXRcclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvcCAtIFRvcCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmlnaHQgLSBSaWdodCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm90dG9tIC0gQm90dG9tIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZWZ0IC0gTGVmdCBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGVpZ2h0IC0gT3V0ZXIgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdpZHRoIC0gT3V0ZXIgd2lkdGggb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKi9cclxuXHJcbiAvKipcclxuICogRnVuY3Rpb24gdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgYWRkZWQgbGlzdGVuZXIuXHJcbiAqIEBjYWxsYmFjayBtb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJcclxuICovXHJcbiBcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRE9NVG9vbHMge1xyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG5cdCAqIEFkZHMgYSBzdHlsZSB0byB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgYXMgdGhlIGVsZW1lbnQgaWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY3NzIC0gY3NzIHRvIGFkZCB0byB0aGUgZG9jdW1lbnRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU3R5bGUoaWQsIGNzcykge1xyXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoRE9NVG9vbHMuY3JlYXRlRWxlbWVudChgPHN0eWxlIGlkPVwiJHtpZH1cIj4ke2Nzc308L3N0eWxlPmApKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSBzdHlsZSBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMvcmVxdWlyZXMgYSByZW1vdGUgc2NyaXB0IHRvIGJlIGxvYWRlZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGZvciB0aGlzIHNjcmlwdFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgLSB1cmwgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBzY3JpcHRcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNjcmlwdCBpcyBsb2FkZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgYWRkU2NyaXB0KGlkLCB1cmwpIHtcclxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuXHRcdFx0Y29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcclxuXHRcdFx0c2NyaXB0LmlkID0gaWQ7XHJcblx0XHRcdHNjcmlwdC5zcmMgPSB1cmw7XHJcblx0XHRcdHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuXHRcdFx0c2NyaXB0Lm9ubG9hZCA9IHJlc29sdmU7XHJcblx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHNjcmlwdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZXMgYSByZW1vdGUgc2NyaXB0IGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTY3JpcHQoaWQpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBodHRwczovL2phdmFzY3JpcHQuaW5mby9qcy1hbmltYXRpb25cclxuICAgIHN0YXRpYyBhbmltYXRlKHt0aW1pbmcgPSBfID0+IF8sIHVwZGF0ZSwgZHVyYXRpb259KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGFuaW1hdGUodGltZSkge1xyXG4gICAgICAgICAgLy8gdGltZUZyYWN0aW9uIGdvZXMgZnJvbSAwIHRvIDFcclxuICAgICAgICAgIGxldCB0aW1lRnJhY3Rpb24gPSAodGltZSAtIHN0YXJ0KSAvIGR1cmF0aW9uO1xyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA+IDEpIHRpbWVGcmFjdGlvbiA9IDE7XHJcbiAgICAgIFxyXG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1pbmcodGltZUZyYWN0aW9uKTtcclxuICAgICAgXHJcbiAgICAgICAgICB1cGRhdGUocHJvZ3Jlc3MpOyAvLyBkcmF3IGl0XHJcbiAgICAgIFxyXG4gICAgICAgICAgaWYgKHRpbWVGcmFjdGlvbiA8IDEpIHtcclxuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBteSBzaGl0IHZlcnNpb24gb2Ygbm90IGhhdmluZyB0byB1c2UgYCRgIGZyb20galF1ZXJ5LiBNZWFuaW5nXHJcbiAgICAgKiB0aGF0IHlvdSBjYW4gcGFzcyBhIHNlbGVjdG9yIGFuZCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgcnVuIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucXVlcnl9LlxyXG4gICAgICogSXQgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gcGFzcyBhIHN0cmluZyBvZiBodG1sIGFuZCBpdCB3aWxsIHBlcmZvcm0gYW5kIHJldHVybiBgcGFyc2VIVE1MYC5cclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTFxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucXVlcnlcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5IG9yIEhUTUwgdG8gcGFyc2VcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gRWl0aGVyIHRoZSByZXN1bHQgb2YgYHBhcnNlSFRNTGAgb3IgYHF1ZXJ5YFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgUShzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBhcnNlSFRNTChzZWxlY3Rvcik7XHJcbiAgICAgICAgY29uc3QgaXNIVE1MID0gZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0ID8gQXJyYXkuZnJvbShlbGVtZW50KS5zb21lKG4gPT4gbi5ub2RlVHlwZSA9PT0gMSkgOiBlbGVtZW50Lm5vZGVUeXBlID09PSAxO1xyXG4gICAgICAgIGlmIChpc0hUTUwpIHJldHVybiBlbGVtZW50O1xyXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIGZvdW5kIGVsZW1lbnQgb3IgbnVsbCBpZiBub3QgZm91bmRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5KHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBBcnJheSBvZiBhbGwgZm91bmQgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHF1ZXJ5QWxsKHNlbGVjdG9yLCBiYXNlRWxlbWVudCkge1xyXG4gICAgICAgIGlmICghYmFzZUVsZW1lbnQpIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgc3RyaW5nIG9mIEhUTUwgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMuIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsXHJcbiAgICAgKiB0aGUgcGFyc2VkIEhUTUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGRvY3VtZW50IGZyYWdtZW50IHtAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50fS5cclxuICAgICAqIFRoaXMgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIGxpc3Qgb2YgZWxlbWVudHMgYXQgdGhlIHRvcCBsZXZlbCwgdGhleSBjYW4gdGhlbiBiZSBhcHBlbmRlZCBhbGwgYXQgb25jZSB0byBhbm90aGVyIG5vZGUuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGZhbHNlLCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbGlzdCBvZiBwYXJzZWRcclxuICAgICAqIG5vZGVzIGFuZCB0aGVyZSB3ZXJlIG11bHRpcGxlIHRvcCBsZXZlbCBub2Rlcywgb3RoZXJ3aXNlIHRoZSBzaW5nbGUgbm9kZSBpcyByZXR1cm5lZC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gSFRNTCB0byBiZSBwYXJzZWRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZyYWdtZW50PWZhbHNlXSAtIFdoZXRoZXIgb3Igbm90IHRoZSByZXR1cm4gc2hvdWxkIGJlIHRoZSByYXcgYERvY3VtZW50RnJhZ21lbnRgXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIFRoZSByZXN1bHQgb2YgSFRNTCBwYXJzaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xyXG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRlbXBsYXRlLmNvbnRlbnQuY2xvbmVOb2RlKHRydWUpO1xyXG4gICAgICAgIGlmIChmcmFnbWVudCkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPiAxID8gbm9kZS5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBBbHRlcm5hdGUgbmFtZSBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUx9ICovXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7cmV0dXJuIHRoaXMucGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50KTt9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGFrZXMgYSBzdHJpbmcgb2YgaHRtbCBhbmQgZXNjYXBlcyBpdCB1c2luZyB0aGUgYnJvd2VyJ3Mgb3duIGVzY2FwaW5nIG1lY2hhbmlzbS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBodG1sIC0gaHRtbCB0byBiZSBlc2NhcGVkXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlc2NhcGVIVE1MKGh0bWwpIHtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgc3BhbkVsZW1lbnQuYXBwZW5kKHRleHROb2RlKTtcclxuICAgICAgICB0ZXh0Tm9kZS5ub2RlVmFsdWUgPSBodG1sO1xyXG4gICAgICAgIHJldHVybiBzcGFuRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byBhZGRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFkZENsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gcmVtb3ZlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSBjbGFzc2VzW2NdID0gY2xhc3Nlc1tjXS50b1N0cmluZygpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBjbGFzc2VzID0gY2xhc3Nlcy5mbGF0KCkuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLmNsYXNzZXMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcmVzZW50OiBUb2dnbGUgY2xhc3MgdmFsdWU7XHJcbiAgICAgKiBpLmUuLCBpZiBjbGFzcyBleGlzdHMgdGhlbiByZW1vdmUgaXQgYW5kIHJldHVybiBmYWxzZSwgaWYgbm90LCB0aGVuIGFkZCBpdCBhbmQgcmV0dXJuIHRydWUuXHJcbiAgICAgKiBXaGVuIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQ6XHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGV2YWx1YXRlcyB0byB0cnVlLCBhZGQgc3BlY2lmaWVkIGNsYXNzIHZhbHVlLCBhbmQgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCByZW1vdmUgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gdG9nZ2xlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmRpY2F0b3JdIC0gT3B0aW9uYWwgaW5kaWNhdG9yIGZvciBpZiB0aGUgY2xhc3Mgc2hvdWxkIGJlIHRvZ2dsZWRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRvZ2dsZUNsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSwgaW5kaWNhdG9yKSB7XHJcbiAgICAgICAgY2xhc3NuYW1lID0gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGlmICh0eXBlb2YoaW5kaWNhdG9yKSAhPT0gXCJ1bmRlZmluZWRcIikgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYywgaW5kaWNhdG9yKSk7XHJcbiAgICAgICAgZWxzZSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjKSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYSBzcGVjaWZpYyBjbGFzc1xyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBjbGFzcywgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUpIHtcclxuICAgICAgICByZXR1cm4gY2xhc3NuYW1lLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihjID0+IGMpLmV2ZXJ5KGMgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoYykpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZXMgb25lIGNsYXNzIHdpdGggYW5vdGhlclxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROYW1lIC0gTmFtZSBvZiBjbGFzcyB0byByZXBsYWNlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TmFtZSAtIE5ldyBuYW1lIGZvciB0aGUgY2xhc3NcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlcGxhY2VDbGFzcyhlbGVtZW50LCBvbGROYW1lLCBuZXdOYW1lKSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVwbGFjZShvbGROYW1lLCBuZXdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBhcHBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIGFwcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5hcHBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgcHJlcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgcHJlcGVuZGVkIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJlcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUucHJlcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuaW5zZXJ0QWZ0ZXIob3RoZXJFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldE5vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc2VydEFmdGVyKHRoaXNOb2RlLCB0YXJnZXROb2RlKSB7XHJcbiAgICAgICAgdGFyZ2V0Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzTm9kZSwgdGFyZ2V0Tm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0IGFmdGVyIGEgc3BlY2lmaWMgZWxlbWVudCwgc2ltaWxhciB0byBqUXVlcnkncyBgdGhpc0VsZW1lbnQuYWZ0ZXIobmV3RWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSBuZXdOb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcih0aGlzTm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgICAgIHRoaXNOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHRoaXNOb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIG5leHQgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIisgXCIgKyBzZWxlY3RvcikgOiBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHN1YnNlcXVlbnQgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBuZXh0IHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ+ICpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdWJzZXF1ZW50IHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHRVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgbmV4dC5wdXNoKGVsZW1lbnQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xyXG4gICAgICAgIGlmIChzZWxlY3RvcikgcmV0dXJuIHByZXZpb3VzICYmIHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpID8gcHJldmlvdXMgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHByZWNlZWRpbmcgc2libGluZ3MuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZUxpc3R9IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzQWxsKGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZy5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kIHdoaWNoIGluZGV4IGluIGNoaWxkcmVuIGEgY2VydGFpbiBub2RlIGlzLiBTaW1pbGFyIHRvIGpRdWVyeSdzIGAkLmluZGV4KClgXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gVGhlIG5vZGUgdG8gZmluZCBpdHMgaW5kZXggaW4gcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBvZiB0aGUgbm9kZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5kZXhJblBhcmVudChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBub2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBsZXQgbnVtID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSA9PSBub2RlKSByZXR1cm4gbnVtO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgPT0gMSkgbnVtKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLmluZGV4SW5QYXJlbnR9ICovXHJcbiAgICBzdGF0aWMgaW5kZXgobm9kZSkge3JldHVybiB0aGlzLmluZGV4SW5QYXJlbnQobm9kZSk7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcGFyZW50IG9mIHRoZSBlbGVtZW50IGlmIGl0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgbnVsbC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHBhcmVudCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHBhcmVudFxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBzaWJsaW5nIGVsZW1lbnQgb3IgbnVsbFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50KGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiAhc2VsZWN0b3IgfHwgZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpID8gZWxlbWVudC5wYXJlbnRFbGVtZW50IDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGQoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgYW5jZXN0b3JzIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgcGFyZW50cyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBwYXJlbnRzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpO1xyXG4gICAgICAgIGVsc2Ugd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgYW5jZXN0b3JzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgYW5jZXN0b3JzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgcGFyZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyZW50c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc2libGluZ3Mgb2YgdGhlIGVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCIqXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHNpYmxpbmdzIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNpYmxpbmdzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCIqXCIpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihlID0+IGUgIT0gZWxlbWVudCAmJiBlLm1hdGNoZXMoc2VsZWN0b3IpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyBjc3Mgc3R5bGVzIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgc3R5bGUgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHN0eWxlLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlIC0gQXR0cmlidXRlIHRvIGdldCBvciBzZXRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gVmFsdWUgdG8gc2V0IGZvciBhdHRyaWJ1dGVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBjc3MoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWwuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVthdHRyaWJ1dGVdO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbYXR0cmlidXRlXSA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSB3aWR0aCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHdpZHRoIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSB3aWR0aC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBXaWR0aCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3aWR0aChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLndpZHRoKTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGhlaWdodCBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIGhlaWdodCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGVpZ2h0LiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIEhlaWdodCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fHN0cmluZ30gLSBXaGVuIHNldHRpbmcgYSB2YWx1ZSwgZWxlbWVudCBpcyByZXR1cm5lZCBmb3IgY2hhaW5pbmcsIG90aGVyd2lzZSB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBoZWlnaHQoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQgaWYgZ2l2ZW4gYSB2YWx1ZSwgb3RoZXJ3aXNlIHJldHVybnMgaXQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgdGV4dCBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0ZXh0XSAtIENvbnRlbnQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVpdGhlciB0aGUgc3RyaW5nIHNldCBieSB0aGlzIGNhbGwgb3IgdGhlIGN1cnJlbnQgdGV4dCBjb250ZW50IG9mIHRoZSBub2RlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdGV4dChlbGVtZW50LCB0ZXh0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0ZXh0KSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudDtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBpbm5lciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgb3V0ZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG9mZnNldCBvZlxyXG4gICAgICogQHJldHVybiB7T2Zmc2V0fSAtIFRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZnNldChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsaXN0ZW5lcnMoKSB7IHJldHVybiB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvbmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIG9uY2UuXHJcbiAgICAgKiBgY29uc3QgY2FuY2VsID0gRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJmaXJlZCFcIik7IGNhbmNlbCgpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb24oZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgbWV0aG9kIG1hdGNoZXMge0BsaW5rIG1vZHVsZTpET01Ub29scy5vbn0gYnV0IGF1dG9tYXRpY2FsbHkgY2FuY2VscyBpdHNlbGZcclxuICAgICAqIGFuZCByZW1vdmVzIHRoZSBsaXN0ZW5lciB1cG9uIHRoZSBmaXJzdCBmaXJpbmcgb2YgdGhlIGRlc2lyZWQgZXZlbnQuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uY2UoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH0gOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSkgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uc3BsaWNlKHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0uZmluZEluZGV4KGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50KSwgMSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBldmVudDogdHlwZSxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IG5ld0NhbmNlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ld0NhbmNlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNhbmNlbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBsZXQgbWF0Y2hGaWx0ZXIgPSBsaXN0ZW5lciA9PiBsaXN0ZW5lci5ldmVudCA9PSB0eXBlLCBkZWZhdWx0RmlsdGVyID0gXyA9PiBfO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBtYXRjaEZpbHRlciA9IGwgPT4gbC5ldmVudCA9PSB0eXBlICYmIGwuZWxlbWVudCA9PSBlbGVtZW50LCBkZWZhdWx0RmlsdGVyID0gbCA9PiBsLmVsZW1lbnQgPT0gZWxlbWVudDtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSB0eXBlID8gbGlzdGVuZXJzLmZpbHRlcihtYXRjaEZpbHRlcikgOiBsaXN0ZW5lcnMuZmlsdGVyKGRlZmF1bHRGaWx0ZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbGlzdC5sZW5ndGg7IGMrKykgbGlzdFtjXS5jYW5jZWwoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9mZmAgZnVuY3Rpb24gYW5kIGNhbiAqaG9wZWZ1bGx5KiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheS5cclxuICAgICAqIFxyXG4gICAgICogUmF0aGVyIHRoYW4gYXR0ZW1wdCB0byBleHBsYWluLCBJJ2xsIHNob3cgc29tZSBleGFtcGxlIHVzYWdlcy5cclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZWQgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgYC5ibG9ja2AgZWxlbWVudC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGNsaWNrIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcImNsaWNrLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsoRWxlbWVudHxzdHJpbmcpfSBlbGVtZW50IC0gRWxlbWVudCB0byByZW1vdmUgbGlzdGVuZXIgZnJvbVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtldmVudF0gLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBbZGVsZWdhdGVdIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIG9yaWdpbmFsIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmYoZWxlbWVudCwgZXZlbnQsIGRlbGVnYXRlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZWxlbWVudCkgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHRoaXMuX19vZmZBbGwoZWxlbWVudCk7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkgcmV0dXJuIHRoaXMuX19vZmZBbGwoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3Igd2hlbiB0aGUgbm9kZSBpcyBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGJvZHkuXHJcbiAgICAgKiBUaGUgbGlzdGVuZXIgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHVwb24gZmlyaW5nLlxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIG5vZGUgdG8gd2FpdCBmb3JcclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IGNhbGxiYWNrIC0gZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIG9uIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uTW91bnQgLSBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBmaXJlIG9uIE1vdW50IG9yIG9uIFVubW91bnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIG9uTW91bnQgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLnVuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2ssIG11dGF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG9uTW91bnQgPyBtdXRhdGlvbi5hZGRlZE5vZGVzIDogbXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRpcmVjdE1hdGNoIHx8IHBhcmVudE1hdGNoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYHRydWVgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudENoYW5nZX0gd2l0aCB0aGlyZCBwYXJhbWV0ZXIgYGZhbHNlYCAqL1xyXG4gICAgc3RhdGljIG9uVW5tb3VudChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Nb3VudH0gKi9cclxuICAgIHN0YXRpYyBvbkFkZGVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnQobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uVW5tb3VudH0gKi9cclxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrLCBmYWxzZSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb21iaW5lcyBtdWx0aXBsZSBlbGVtZW50cyBpbnRvIG9uZSBwYXJlbnQgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHtBcnJheTxIVE1MRWxlbWVudD59IGVsZW1lbnRzIC0gYXJyYXkgb2YgZWxlbWVudHMgdG8gcHV0IGludG8gYSBzaW5nbGUgcGFyZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB3cmFwKGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZG9tV3JhcHBlciA9IHRoaXMucGFyc2VIVE1MKGA8ZGl2IGNsYXNzPVwiZG9tLXdyYXBwZXJcIj48L2Rpdj5gKTtcclxuICAgICAgICBmb3IgKGxldCBlID0gMDsgZSA8IGVsZW1lbnRzLmxlbmd0aDsgZSsrKSBkb21XcmFwcGVyLmFwcGVuZENoaWxkKGVsZW1lbnRzW2VdKTtcclxuICAgICAgICByZXR1cm4gZG9tV3JhcHBlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc29sdmVzIHRoZSBub2RlIHRvIGFuIEhUTUxFbGVtZW50LiBUaGlzIGlzIG1haW5seSB1c2VkIGJ5IGxpYnJhcnkgbW9kdWxlcy5cclxuICAgICAqIEBwYXJhbSB7KGpRdWVyeXxFbGVtZW50KX0gbm9kZSAtIG5vZGUgdG8gcmVzb2x2ZVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVzb2x2ZUVsZW1lbnQobm9kZSkge1xyXG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5ET00gPSBET01Ub29scyIsImltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuY29uc3QgQ29uc3RhbnRzID0ge1xyXG4gICAgRW1vamlSZWdleDogLzxhP1xcLihcXHcrKVxcLihcXGQrKT4vZ1xyXG59XHJcblxyXG5sZXQgQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxubGV0IEVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG5sZXQgQXV0b2NvbXBsZXRlTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpWzBdXHJcbmxldCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpWzBdXHJcbmxldCBFbW9qaU1vZHVsZVF1ZXJ5ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpWzBdXHJcbmxldCBNZXNzYWdlcyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylbMF1cclxubGV0IGd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpWzBdXHJcbmxldCBlbW9qaVNlYXJjaCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vamlNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmluaXQoKS5jYXRjaChlcnIgPT4gVXRpbHMuZXJyKFwiRW1vamlNb2R1bGVcIiwgXCJBbiBlcnJvciBvY2N1cmVkXCIsIGVycikpIC8vIGJldHRlciBsb2dnaW5nXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIC8qKiBFbW9qaSBBdXRvQ29tcGxldGUgKi9cclxuICAgICAgICBpZighQXV0b2NvbXBsZXRlTW9kdWxlKUF1dG9jb21wbGV0ZU1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilcclxuICAgICAgICBpZighQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylcclxuICAgICAgICBpZighRW1vamlNb2R1bGVRdWVyeSlFbW9qaU1vZHVsZVF1ZXJ5ID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVxyXG4gICAgICAgIGlmKCFNZXNzYWdlcylNZXNzYWdlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpXHJcbiAgICAgICAgaWYoIWd1aWxkTW9kdWxlKWd1aWxkTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVxyXG4gICAgICAgIGlmKCFlbW9qaVNlYXJjaCllbW9qaVNlYXJjaCA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuICAgICAgICBpZihBdXRvY29tcGxldGVNb2R1bGUgJiYgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgJiYgRW1vamlNb2R1bGVRdWVyeSAmJiBNZXNzYWdlcyAmJiBndWlsZE1vZHVsZSAmJiBlbW9qaVNlYXJjaCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBQYXRjaGluZyBnZXRBdXRvY29tcGxldGVPcHRpb25zIG9mIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzYCwgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMpXHJcbiAgICAgICAgICAgIGNvbnN0IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICAgICAgICAgIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMgPSBmdW5jdGlvbihlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHZhbHVlLkxJR0hUQ09SRF9FTU9KSVMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyhhcmcxLCBhcmcyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmRpdGlvbiA9IGFyZzIubGVuZ3RoID4gMSAmJiBcIi5cIiA9PT0gYXJnMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFbW9qaVVzYWJsZShjb25kaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0cyh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBFbW9qaU1vZHVsZVF1ZXJ5LmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHModCwgZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclJlc3VsdHMoZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEKGUsIHQsIGEuZW1vamlzLCBuLCByLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HLCBNZXNzYWdlcy5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJLCBBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5FbW9qaSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBlLmlkIHx8IGUudW5pcXVlTmFtZSB8fCBlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudGluZWw6IFwiLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWxkOiBudWxsICE9IGUuZ3VpbGRJZCA/IGd1aWxkTW9kdWxlLmRlZmF1bHQuZ2V0R3VpbGQoZS5ndWlsZElkKSA6IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIgKyBlICsgXCIuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRQbGFpblRleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmF3VGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBzdGFydCBhdXRvY29tcGxldGlvbiBvZiBMaWdodGNvcmQncyBlbW9qaXMuXCIpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqIEVtb2ppIGRpc3BsYXkgKi9cclxuICAgICAgICB3aGlsZSAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vamlSZW5kZXIpeyAvLyBUT0RPOiBQcm9wZXIgZW1vamkgZm9ybWF0dGluZyAvIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZVwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIW1lc3NhZ2UpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRcIilcclxuICAgICAgICAgICAgICAgIGlmKCFjb250ZW50IHx8ICFjb250ZW50Lmxlbmd0aClyZXR1cm5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7e1xyXG4gICAgICAgICAgICAgICAgICogIHJhdzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBpZDogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGFuaW1hdGVkOiBib29sZWFuXHJcbiAgICAgICAgICAgICAgICAgKiB9W119XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGxldCBlbW9qaXMgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gW11cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgbm9kZSBvZiBjb250ZW50KXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzUGFyc2VkID0gZmFsc2VcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IENvbnN0YW50cy5FbW9qaVJlZ2V4LmV4ZWMobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BhcnNlZCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFFbW9qaU1vZHVsZUFwaSlFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gRW1vamlNb2R1bGVBcGkuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQocGFyc2VkWzJdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZW1vamkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbW9qaS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHBhcnNlZFswXS5zdGFydHNXaXRoKFwiPGFcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZFsxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZFsyXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyc2VkKTtcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGhhc1BhcnNlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdChcIiBcIikubWFwKCh3b3JkLCBpbmRleCwgYXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighd29yZClyZXR1cm4gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBlbW9qaXMuZmluZChlID0+IGUucmF3ID09IHdvcmQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZW1vamkpcmV0dXJuIHdvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFDdXN0b21FbW9qaU1vZHVsZSlDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VzdG9tRW1vamlNb2R1bGUuQ3VzdG9tRW1vamksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgLiR7ZW1vamkubmFtZX0uYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlJZDogZW1vamkuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtYm9hYmxlOiBhcnIubGVuZ3RoID09PSAxICYmIGNvbnRlbnQubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJldmlvdXMubGVuZ3RoID09PSAwKXJldHVybiBbY3VycmVudF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBjdXJyZW50ID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSArPSBgICR7Y3VycmVudH1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiK2N1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cy5wdXNoKFwiIFwiLCBjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2goLi4ud29yZHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaChub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnNoaWZ0KClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHdoaWxlKG5ld0NvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5wdXNoKG5ld0NvbnRlbnQuc2hpZnQoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0vKlxyXG4gICAgICAgIGxldCB1c2VyTW9kdWxlXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiKVxyXG4gICAgICAgIC50aGVuKEVtb2ppUGlja2VyTGlzdFJvdyA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc3MgPSBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdFxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdCA9IGNsYXNzIEVtb2ppUGlja2VyTGlzdFJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbilyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW9qaURlc2NyaXB0b3JzOiB0aGlzLnByb3BzLmVtb2ppRGVzY3JpcHRvcnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc0Rpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9KSkgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0LmRpc3BsYXlOYW1lID0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIlxyXG4gICAgICAgIH0pKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEQoZSwgdCwgbiwgciwgbywgaSwgcywgdSwgbCwgYykge1xyXG4gICAgaWYgKG51bGwgPT0gbiB8fCAwID09PSBuLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcbiAgICB2YXIgZCA9IG4ubWFwKChmdW5jdGlvbihlLCBuKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodSwgT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6IG8sXHJcbiAgICAgICAgICAgIG9uSG92ZXI6IHIsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0ID09PSBuLFxyXG4gICAgICAgICAgICBpbmRleDogblxyXG4gICAgICAgIH0sIGwoZSwgbikpKVxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIFtSKGksIHMsIGUsIGMpLCBkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBSKGUsIHQsIG4sIHIpIHtcclxuICAgIHZhciBhID0gKG4ubGVuZ3RoID4gMCA/IGUuZm9ybWF0KHtcclxuICAgICAgICBwcmVmaXg6IHIobilcclxuICAgIH0pIDogdClcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xyXG4gICAgICAgIGEudW5zaGlmdChSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIHt9LCBcIltMaWdodGNvcmRdIFwiKSlcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGEgPSBcIltMSUdIVENPUkRdIFwiK2FcclxuICAgIH1cclxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LlRpdGxlLCB7XHJcbiAgICAgICAgdGl0bGU6IGFcclxuICAgIH0sIGEpXHJcbn1cclxuUi5kaXNwbGF5TmFtZSA9IFwicmVuZGVySGVhZGVyXCI7XHJcblxyXG5sZXQgRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbmxldCBpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZSAmJiBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5sZXQgaXNVc2FibGUgPSBmYWxzZVxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcblxyXG5mdW5jdGlvbiBzZXRFbW9qaVVzYWJsZSh1c2FibGUpe1xyXG4gICAgaXNVc2FibGUgPSB1c2FibGVcclxuICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpRW1vamlGaWx0ZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQpWzBdXHJcbiAgICBpZighRW1vamlGaWx0ZXJNb2R1bGUpcmV0dXJuXHJcbiAgICBpZighaXNFbW9qaURpc2FibGVkKWlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcblxyXG4gICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkID0gZnVuY3Rpb24oZW1vamkpe1xyXG4gICAgICAgIGlmKGlzVXNhYmxlKXtcclxuICAgICAgICAgICAgaWYoZW1vamkuc3Vycm9nYXRlcyB8fCBlbW9qaS5kaXZlcnNpdHkpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0Vtb2ppRGlzYWJsZWQuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0ICogYXMgZWxlY3Ryb24gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiXHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIlxyXG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgYmFzZW5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiXHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcbmltcG9ydCB7IGFkZG9uQ2FjaGUgfSBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiXHJcblxyXG5jb25zdCBjYWNoZSA9IHt9XHJcbmNvbnN0IGNhY2hlMiA9IHt9XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luQ2VydGlmaWVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbkNlcnRpZmllciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaChhdHRhY2htZW50LCBpZCl7XHJcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaXNUcnVzdGVkKGhhc2gpe1xyXG4gICAgICAgIHJldHVybiBjYWNoZVtoYXNoXSAmJiAhY2FjaGVbaGFzaF0uc3VzcGVjdFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpe1xyXG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICBsZXQgaXNIYXJtZnVsID0gZmFsc2VcclxuICAgIGZvcihsZXQga2V5d29yZCBvZiBkYXRhLnNwbGl0KC9bXlxcd1xcZF0rL2cpKXtcclxuICAgICAgICBmb3IobGV0IG9vZiBvZiBbXHJcbiAgICAgICAgICAgIFwidG9rZW5cIixcclxuICAgICAgICAgICAgXCJlbWFpbFwiLFxyXG4gICAgICAgICAgICBcInBob25lXCIsXHJcbiAgICAgICAgICAgIFwiTUZBXCIsXHJcbiAgICAgICAgICAgIFwiMmZhXCIsXHJcbiAgICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxyXG4gICAgICAgICAgICBcImxvY2FsU3RvcmFnZVwiLFxyXG4gICAgICAgICAgICBcImV2YWxcIixcclxuICAgICAgICAgICAgXCJnZXRHbG9iYWxcIixcclxuICAgICAgICAgICAgXCJCcm93c2VyV2luZG93XCJcclxuICAgICAgICBdKXtcclxuICAgICAgICAgICAgaWYoa2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG9vZi50b0xvd2VyQ2FzZSgpKSAmJiAha2V5d29yZC50b0xvd2VyQ2FzZSgpID09PSBcImRvbXRva2VubGlzdFwiKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG9vZiwga2V5d29yZClcclxuICAgICAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwidG9rZW4gc3RlYWxlci92aXJ1c1wiXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IG5vX2NvbW1lbnRzID0gZGF0YS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfChbXlxcXFw6XXxeKVxcL1xcLy4qJC9nbSwgXCJcIikudHJpbSgpLy8gcmVtb3ZpbmcgdGhlIE1FVEEgY29tbWVudCBmcm9tIHBsdWdpbnNcclxuICAgICAgICBpZigoL3ZhciBbXFx3XFxkXyRdKz1cXFtcIi9naSkudGVzdChub19jb21tZW50cykpe1xyXG4gICAgICAgICAgICBpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgICAgICBjb25zdCByZWdleHBzID0gW1xyXG4gICAgICAgICAgICAgICAgLyoqIGhleGFkZWNpbWFsICovXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLFxyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBfMHg4ZGI3KCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgICAgICAvKiogbWFuZ2xlZCAqL1xyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csIC8vIGIoJzB4MCcpXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydbLCBdKydbXiddezR9J1xcKS9nLCAvLyBiKCcweDAnLCAneDFdZicpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgZm9yKGxldCByZWdleCBvZiByZWdleHBzKXtcclxuICAgICAgICAgICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgICAgICAgICAgICAgaWYocmVnZXgudGVzdChub19jb21tZW50cykpaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bClyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgIGNhY2hlW2hhc2hdID0ge1xyXG4gICAgICAgIHN1c3BlY3Q6IHRydWUsXHJcbiAgICAgICAgbmFtZTogaGFzaFRvVXJsW2hhc2hdLnNwbGl0KFwiL1wiKS5wb3AoKSxcclxuICAgICAgICB0eXBlOiBoYXNoVG9VcmxbaGFzaF0uZW5kc1dpdGgoXCIuanNcIikgPyBcIlBsdWdpblwiIDogXCJUaGVtZVwiLFxyXG4gICAgICAgIGhhcm06IGlzSGFybWZ1bCxcclxuICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgIGZpbGVuYW1lXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKGBGb3VuZCBwb3RlbnRpYWxseSBkYW5nZXJvdXMgJHtjYWNoZVtoYXNoXS50eXBlLnRvTG93ZXJDYXNlKCl9OiAke2NhY2hlW2hhc2hdLm5hbWV9YClcclxuXHJcbiAgICByZXN1bHRDYWxsYmFjayhjYWNoZVtoYXNoXSlcclxufVxyXG5cclxuY29uc3QgaGFzaFRvVXJsID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0hhc2goaGFzaCwgZGF0YSwgZmlsZW5hbWUsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayl7XHJcbiAgICBjb25zb2xlLmxvZyhgRmlsZTogJHtmaWxlbmFtZX0gaGFzaDogJHtoYXNofWApXHJcbiAgICBpZighY2FjaGVbaGFzaF0pe1xyXG4gICAgICAgIG5vZGVGZXRjaChcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9naC9MaWdodGNvcmQvZmlsZWhhc2hlc0BtYXN0ZXIvaGFzaGVzL1wiK2hhc2gsIHsgLy8gVXNpbmcgbm9kZS1mZXRjaCB0byBieXBhc3MgY29yc1xyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIlVzZXItQWdlbnRcIjogZWxlY3Ryb24ucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLnVzZXJBZ2VudCAvLyBoYXZlIHRvIHNldCB1c2VyLWFnZW50XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7XHJcbiAgICAgICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICAgICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgcmVzdWx0Lmhhc2ggPSBoYXNoXHJcbiAgICAgICAgICAgIHJlc3VsdC5maWxlbmFtZSA9IGZpbGVuYW1lXHJcblxyXG4gICAgICAgICAgICBjYWNoZVtoYXNoXSA9IHJlc3VsdFxyXG5cclxuICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcclxuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKF9fcGF0aCkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgfSkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBfX3BhdGhcclxuXHJcbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgICAgICBjb250ZW50TWFuYWdlci5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgaWYoZWxlbSllbGVtLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pLmNhdGNoKCgpPT57fSlcclxufVxyXG5cclxubGV0IGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcclxuICogQHBhcmFtIHt7dHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgb2ZmaWNpYWw/OiBib29sZWFufXx7c3VzcGVjdDp0cnVlLCB0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBoYXJtOiBzdHJpbmd9fSByZXN1bHRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxyXG5cclxuICAgIGlmKCFmbG93ZXJTdGFyTW9kdWxlKWZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcbiAgICBcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIGFuZCBsYXVuY2ggdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEtleWVkQXJyYXkob2JqKXtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKFtrLCBvYmpba11dKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhcnJcclxufVxyXG5cclxubGV0IGtleSA9IG51bGxcclxubGV0IHNhdmUgPSBudWxsXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXHJcbi50aGVuKGxvY2FsU3RvcmFnZU1vZHVsZSA9PiB7XHJcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcclxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIiwgYnRvYShKU09OLnN0cmluZ2lmeShrZXkpKSlcclxuICAgIH1cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBzYXZlKClcclxuICAgIH0sIDEwMDAwMCk7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IHZhbCA9IHNhZmVKU09OUGFyc2UoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIpKSlcclxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICAgICAgc2F2ZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXkgPSB2YWxcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9XHJcbn0pXHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xyXG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gbmV3IEVycm9yKGUpIDogZVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWNiY1wiLCBCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpKVxyXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIFwie31cIlxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIGxldCBhcmdzID0gW0J1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIildXHJcbiAgICBcclxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XHJcbiAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xyXG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmNsYXNzIFBsdWdpbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbk1vZHVsZSA9IHRoaXNcbiAgICB9XG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcjt9XG59XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sb2FkUGx1Z2luRGF0YSgpO1xuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgbG9hZGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW25hbWVdKSBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxuICAgIH1cbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG5cbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RvcFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdG9wcGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0b3BwZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gKGNvbnNvbGUubG9nKHAuZmlsZW5hbWUsIGZpbGVuYW1lKSkgfHwgcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XG4gICAgY2F0Y2ggKGVycikge2lmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJdfSk7fVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1sb2FkZWRcIiwgcGx1Z2luLmdldE5hbWUoKSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVubG9hZFBsdWdpbiA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGRlbGV0ZSBiZHBsdWdpbnNbcGx1Z2luXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm4gdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51cGRhdGVQbHVnaW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW5Db29raWUsIHNhdmVkKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25NZXNzYWdlIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycy5zcGxpdChcIiBcIilbMF1cclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKS5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5pbXBvcnQgZGlzYWJsZVR5cGluZyBmcm9tIFwiLi9kaXNhYmxlVHlwaW5nXCI7XHJcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuLi91aS9tYXJnaW50b3BcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuaW1wb3J0IGNvcmUgZnJvbSBcIi4vY29yZVwiO1xyXG5cclxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2lkZWJhckNvbXBvbmVudHMgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5TZXBhcmF0b3IgJiYgZS5IZWFkZXIgJiYgZS5JdGVtKVxyXG5cclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b24gPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJDaGFuZ2Vsb2dcIn0sIFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwifSwgY2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIiwgb25DbGljazogKCkgPT4ge1V0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO319LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcclxuICAgICAgICAgICAgY2hpbGRyZW46IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiQmFuZGFnZWQgQkRcIiwgY2hhbmdlbG9nQnV0dG9uKSxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZFxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MgPSB0aGlzLnVwZGF0ZVNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50cygpXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDb21wb25lbnRzKCl7XHJcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxpZ2h0Y29yZFwiLCBtYWtlQ29tcG9uZW50KHRoaXMubGlnaHRjb3JkQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInN0YXR1c1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuUHJlc2VuY2VDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsY2FwaXByZXZpZXdcIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFwaVByZXZpZXdDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcblxyXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiQkRDaGFuZ2Vsb2dUaXRsZVwiLCBtYWtlQ29tcG9uZW50KCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCRFNpZGViYXJIZWFkZXIoKS5yZW5kZXIoKVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImNvcmVcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmNvcmVDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY3VzdG9tY3NzXCIsIG1ha2VDb21wb25lbnQodGhpcy5jdXN0b21Dc3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwidGhlbWVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJ0aGVtZXNcIikpKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByb290KCkge1xyXG4gICAgICAgIGNvbnN0IF9yb290ID0gRE9NLnF1ZXJ5KFwiI2JkLXNldHRpbmdzcGFuZS1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXIsXHJcbiAgICAgICAgICAgIGNsYXNzU2lkZWJhclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmxheWVyICYmIGUuYW5pbWF0aW5nKVswXS5sYXllci5zcGxpdChcIiBcIilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGNvbnN0IHNpZGViYXIgPSBET00ucXVlcnkoXCIuXCIrY2xhc3NOYW1lTGF5ZXIrXCIgLlwiK2NsYXNzU2lkZWJhci5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXStcIiwgLlwiK2NsYXNzTmFtZUxheWVyK1wiIC51aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIik7XHJcbiAgICAgICAgaWYgKCFzaWRlYmFyKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGlkPVwiYmQtc2V0dGluZ3NwYW5lLWNvbnRhaW5lclwiIGNsYXNzPVwiJHtjbGFzc1NpZGViYXIuY29udGVudFJlZ2lvbn0gY29udGVudC1yZWdpb25cIj5gKTtcclxuICAgICAgICBzaWRlYmFyLmFwcGVuZChyb290KTtcclxuXHJcbiAgICAgICAgVXRpbHMub25SZW1vdmVkKHJvb3QsICgpID0+IHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHJvb3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb3JlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwiY29yZVwiKTtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQoc2V0dGluZ3MubWFwKHMgPT4gcy5jYXRlZ29yeSkpXTtcclxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpZ2h0Y29yZFNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImxpZ2h0Y29yZFwiKTtcclxuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQoc2V0dGluZ3MubWFwKHMgPT4gcy5jYXRlZ29yeSkpXTtcclxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGNhdGVnb3JpZXMubWFwKGMgPT4ge3JldHVybiB7dGl0bGU6IGMsIHNldHRpbmdzOiBzZXR0aW5ncy5maWx0ZXIocyA9PiBzLmNhdGVnb3J5ID09IGMpfTt9KTtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IFByZXNlbmNlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJzdGF0dXNcIilcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTXNnTG9nU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZ3MoXCJtc2dsb2dcIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXR0aW5ncyhjYXRlZ29yeSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXR0aW5ncykucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nba2V5XTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmcuY2F0ID09PSBjYXRlZ29yeSAmJiBzZXR0aW5nLmltcGxlbWVudGVkICYmICFzZXR0aW5nLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHt9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIGlmKCFbXCJsaWdodGNvcmQtOFwiLCBcIm5vX3dpbmRvd19ib3VuZFwiLCBcImVuYWJsZV9nbGFzc3Ryb25cIiwgXCJsaWdodGNvcmQtMTBcIl0uaW5jbHVkZXMoaWQpKXNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgICAgICBlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTdcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIENsYXNzTm9ybWFsaXplci5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCBlbmFibGVkKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMyZjMxMzZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLThcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstZG0tMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qaWYgKGlkID09PSBcInJlYWN0RGV2VG9vbHNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgcmVhY3REZXZUb29scy5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHJlYWN0RGV2VG9vbHMuc3RvcCgpO1xyXG4gICAgICAgIH0qL1xyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gZmFsc2VcclxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXHJcbiAgICAgICAgICAgICAgICBpZihzZXR0aW5nc1N0b3JlICYmICFzZXR0aW5nc1N0b3JlLmRlZmF1bHQuc2hvd0N1cnJlbnRHYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgICAgIGVsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtOFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcImlzVGFic1wiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMTBcIil7XHJcbiAgICAgICAgICAgIGNvcmUubWV0aG9kcy5Ob3RpZmljYXRpb25zVXNlU2hpbShlbmFibGVkKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICAvL2lmIChzZXR0aW5nc0Nvb2tpZS5yZWFjdERldlRvb2xzKSByZWFjdERldlRvb2xzLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIHtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2lkZWJhcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhci5yZW5kZXIoc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29yZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcclxuICAgIH1cclxuXHJcbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAoaSA9PT0gMCA/IG51bGwgOiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCBzZWN0aW9uLnRpdGxlKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLThcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJpc1RhYnNcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC0xMFwiKWlzQ2hlY2tlZCA9ICFhcHBTZXR0aW5ncy5nZXQoXCJERUZBVUxUX05PVElGSUNBVElPTlNcIiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09IFwibGlnaHRjb3JkLThcIiAmJiBpc0NoZWNrZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2s6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcImJyYW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuaXBjLnNlbmQoXCJORVdfVEFCXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIk9wZW4gYSBuZXcgVGFiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2hvdWxkIHJlbGF1bmNoXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5xdWl0KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIFwiUmVsYXVuY2ggd2l0aG91dCBCZXR0ZXJEaXNjb3JkXCIpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ2xlYXJpbmdDYWNoZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2xlYXJpbmcgY2FjaGUuLi5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5zZXNzaW9uLmNsZWFyQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2FjaGUgaXMgY2xlYXJlZCAhXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gQ2hlY2sgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGlzQ2xlYXJpbmdDYWNoZVxyXG4gICAgICAgICAgICB9LCBcIkNsZWFyIGNhY2hlXCIpXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1ByZXNlbmNlU2V0dGluZ3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcclxuICAgICAgICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGlwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xyXG4gICAgICAgIC8vIEkga25vdyB0aGlzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgd2hlbiBpdCBpc24ndCxcclxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcclxuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xyXG4gICAgICAgIC8vIHRvIGRlYnVnIGxhdGVyLlxyXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge3R5cGV9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHt0eXBlfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWwgb24gd2luZG93XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWFrZUNvbXBvbmVudChjaGlsZHJlbil7XHJcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKHNpZGViYXIsICgpID0+IHRoaXMuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgc2lkZWJhclxyXG4gICAgcmV0dXJuIChzKSA9PiB7XHJcbiAgICAgICAgc2lkZWJhciA9IHNcclxuICAgICAgICByZXR1cm4gU2V0dGluZ0NvbXBvbmVudFxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XHJcbiAgICAgICAgdGhpcy5wYW5lbHNbcGFuZWxdID0gY29tcG9uZW50XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KHBhbmVsLCBzaWRlYmFyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdKHNpZGViYXIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkJldHRlckRpc2NvcmQgU2V0dGluZ3NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJQbHVnaW5zXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlbWVzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJDdXN0b20gQ1NTXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ2l0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzdGF0dXNcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ0Rldkl0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW11cclxuICAgICAgICBpZighd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlKXJldHVybiBpdGVtc1xyXG4gICAgICAgIGl0ZW1zLnB1c2goLi4uW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkIEFwaVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ29tcG9uZW50cyBQcmV2aWV3XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSlcclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoc2lkZWJhcikge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENEZXZJdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihlLnNlY3Rpb24pcmV0dXJuIGVcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoXCJCRENoYW5nZWxvZ1RpdGxlXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsU2lkZWJhciBvbiB3aW5kb3dcclxuICovIiwiaW1wb3J0IHtiZHRoZW1lRXJyb3JzLCB0aGVtZUNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkdGhlbWVzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY2xhc3MgVGhlbWVNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVGhlbWVNb2R1bGUgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBnZXQgZm9sZGVyKCkge3JldHVybiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXI7fVxyXG59XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lcyA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMubG9hZFRoZW1lRGF0YSgpO1xyXG4gICAgYmR0aGVtZUVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRUaGVtZXMoKSkpO1xyXG4gICAgY29uc3QgdGhlbWVzID0gT2JqZWN0LmtleXMoYmR0aGVtZXMpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhlbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZXNbaV1dO1xyXG4gICAgICAgIGlmICghdGhlbWVDb29raWVbdGhlbWUubmFtZV0pIHRoZW1lQ29va2llW3RoZW1lLm5hbWVdID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgdGhlbWUgaW4gdGhlbWVDb29raWUpIHtcclxuICAgICAgICBpZiAoIWJkdGhlbWVzW3RoZW1lXSkgZGVsZXRlIHRoZW1lQ29va2llW3RoZW1lXTtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgLy8gaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lbmFibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IHRydWU7XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbbmFtZV07XHJcbiAgICBET00uYWRkU3R5bGUoRE9NLmVzY2FwZUlEKHRoZW1lLmlkKSwgdW5lc2NhcGUodGhlbWUuY3NzKSk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCkpO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGVUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XHJcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtdW5sb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRUaGVtZShiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkdGhlbWUuZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXJlbG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInRoZW1lXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInRoZW1lc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5zYXZlVGhlbWVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb24sIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhLnNwbGl0KFwiIFwiKVswXStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyLnNwbGl0KFwiIFwiKVs5XStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgbWVtYmVybGlzdCA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLm1lbWJlcnNXcmFwKVswXS5tZW1iZXJzV3JhcCkgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gY29udGFpbmVyID8gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAzMTA7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IG1lbWJlcmxpc3QgPyBtZW1iZXJsaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiAwO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCA/IHJpZ2h0IC0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgOiBVdGlscy5zY3JlZW5XaWR0aCAtIGxlZnQgLSAyNDA7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgbGVmdCArIFwicHhcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJib3R0b21cIiwgYm90dG9tICsgXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikuYXBwZW5kQ2hpbGQodG9hc3RFbGVtKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b2FzdEVsZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsb3NlOiAobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycy5sZW5ndGggJiYgIXRoZW1lRXJyb3JzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj48ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250ZW50IEVycm9yczwvZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5QbHVnaW5zPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5UaGVtZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj5OYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPk1lc3NhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPkVycm9yPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgIFxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhYihlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke2Vyci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGNvbnN0IHRhYnMgPSBbZ2VuZXJhdGVUYWIocGx1Z2luRXJyb3JzKSwgZ2VuZXJhdGVUYWIodGhlbWVFcnJvcnMpXTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW0uc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIERPTS5yZW1vdmVDbGFzcyhzZWxlY3RlZCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi5zY3JvbGxlclwiKTtcbiAgICAgICAgICAgIHNjcm9sbGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XG4gICAgICAgIH0pKTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtcbiAgICAgICAgZWxzZSBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKVsxXS5jbGljaygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2dDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcbiAgICAgICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJUYWdzXCIsIFwiZGVmYXVsdFwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xuICAgICAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XG4gICAgXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLCBcbiAgICAgICAgICAgIGNoYW5nZXMgPSBbXSwgXG4gICAgICAgICAgICB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBcbiAgICAgICAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCwgXG4gICAgICAgICAgICBmb290ZXJcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjaGFuZ2VzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gYyA9PSAwID8gQ2hhbmdlbG9nQ2xhc3Nlcy5tYXJnaW5Ub3AgOiBcIlwiO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIEJEVjIuam9pbkJEMigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXG4gICAgICovXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsQWN0aW9ucyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwib3Blbk1vZGFsXCIsIFwidXBkYXRlTW9kYWxcIik7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcbiAgICAgICAgY29uc3QgQ29uZmlybWF0aW9uTW9kYWwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkNvbmZpcm1Nb2RhbFwiKTtcbiAgICAgICAgaWYgKCFNb2RhbEFjdGlvbnMgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcblxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gXCJPa2F5XCIsIGNhbmNlbFRleHQgPSBcIkNhbmNlbFwiLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XG4gICAgICAgIHJldHVybiBNb2RhbEFjdGlvbnMub3Blbk1vZGFsKHByb3BzID0+IHtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29uZmlybWF0aW9uTW9kYWwsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGhlYWRlcjogdGl0bGUsXG4gICAgICAgICAgICAgICAgcmVkOiBkYW5nZXIsXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiBvbkNvbmZpcm0sXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsXG4gICAgICAgICAgICB9LCBwcm9wcyksIGNvbnRlbnQpO1xuICAgICAgICB9LCB7bW9kYWxLZXk6IGtleX0pO1xuICAgIH1cblxuICAgIHN0YXRpYyByZW1vdmVEYShjbGFzc05hbWUpe1xuICAgICAgICBpZighY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcbiAgICB9XG59XG5cblV0aWxzLnNob3dUb2FzdCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKFV0aWxzLnNob3dUb2FzdCwgXCJDb3VsZCBub3Qgc2hvdyB0b2FzdC5cIik7XG5cbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzIiwiaW1wb3J0IHtzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaG91bGRQcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUuZ2V0VG9rZW4gfHwgdGhlTW9kdWxlLmdldEVtYWlsIHx8IHRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvdGVjdCA9ICh0aGVNb2R1bGUsIGlzRGVmYXVsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9ICFpc0RlZmF1bHQgPyB0aGVNb2R1bGUuZGVmYXVsdCA6IHRoZU1vZHVsZVxyXG4gICAgICAgICAgICAgICAgaWYoIW1vZClyZXR1cm4gdGhlTW9kdWxlXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kLnJlbW92ZSAmJiBtb2Quc2V0ICYmIG1vZC5jbGVhciAmJiBtb2QuZ2V0ICYmICFtb2Quc29ydCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiB0aGVNb2R1bGVcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShtb2QsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRUb2tlblwiICYmIG9iai5nZXRUb2tlbikgcmV0dXJuICgpID0+IFwibWZhLlhDbmJLem8wQ0xJcWRKekJuTDBEOFBmRHJ1cWtKTkhqd0hYdHIzOVVVM0Y4aEh4NDNqb2pJU3lpNWpkak81MmU5X2U5TWptYWZaRkZwYy1zZU9NYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIgJiYgb2JqLmdldEVtYWlsKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJzaG93VG9rZW5cIiAmJiBvYmouc2hvd1Rva2VuKSByZXR1cm4gKCkgPT4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJfX3Byb3RvX19cIiAmJiBvYmouX19wcm90b19fKSByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2Z1bmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCFpc0RlZmF1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGVNb2R1bGUsIHtkZWZhdWx0OiBwcm94eX0pXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIHByb3RlY3QobSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSwgZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKHByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbCA9IHtcclxuICAgICAgICAgICAgcmVhY3Q6IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJDb21wb25lbnRcIiwgXCJQdXJlQ29tcG9uZW50XCIsIFwiQ2hpbGRyZW5cIiwgXCJjcmVhdGVFbGVtZW50XCIsIFwiY2xvbmVFbGVtZW50XCJdKSxcclxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGUgPT4gZVtPYmplY3Qua2V5cyhlKS5maW5kKGsgPT4gay5zdGFydHNXaXRoKFwiX19yZWFjdEludGVybmFsSW5zdGFuY2VcIikpXTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgam9pbkJEMSgpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjBUbWZvNVpiT1JDUnFiQWRcIik7fVxyXG4gICAgbGVhdmVCRDEoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIpO31cclxuXHJcbiAgICBqb2luQkQyKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMkhTY204alwiKTt9XHJcbiAgICBsZWF2ZUJEMigpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiMjgwODA2NDcyOTI4MTk4NjU2XCIpO31cclxuXHJcbiAgICBqb2luTEMoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCI3ZUZmZjJBXCIpO31cclxuICAgIGxlYXZlTEMoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjcwNTkwODM1MDIxODY2NjExN1wiKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG5cclxuICAgIGdldCBhbmNob3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiXSkgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07fVxyXG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cclxuICAgIGdldCBtZXNzYWdlQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm1lc3NhZ2VcIiwgXCJjb250YWluZXJDb3p5XCJdKTt9XHJcbiAgICBnZXQgZ3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ3VpbGRzRXJyb3IgJiYgZS5zZWxlY3RlZClbMF1cclxuICAgICAgICBjb25zdCBwaWxsID0gQkRNb2R1bGVzLmdldChlID0+IGUuYmxvYkNvbnRhaW5lcilbMF1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxuXHR9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcbiAgICBnZXQgTWVzc2FnZUNvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJNZXNzYWdlXCIpO31cclxuICAgIGdldCBUaW1lRm9ybWF0dGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZGF0ZUZvcm1hdFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XHJcbiAgICBnZXQgTmF0aXZlTW9kdWxlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2V0QmFkZ2VcIl0pO31cclxuICAgIGdldCBJbnZpdGVBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTt9XHJcbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmhpZGUgJiYgbS5zaG93ICYmICFtLnNlYXJjaCAmJiAhbS5zdWJtaXQgJiYgIW0uc2VhcmNoICYmICFtLmFjdGl2YXRlUmFnaW5nRGVtb24gJiYgIW0uZGlzbWlzcyk7fVxyXG4gICAgZ2V0IEtleUdlbmVyYXRvcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS50b1N0cmluZyAmJiAvXCJiaW5hcnlcIi8udGVzdChtLnRvU3RyaW5nKCkpKTt9XHJcbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q3VycmVudFVzZXJcIl0pO31cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuICAgIGdldCBQcml2YXRlQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZWxlY3RQcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG5cclxuICAgIG9wZW5ETSh1c2VySWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmSWQgPSB0aGlzLlVzZXJTdG9yZS5nZXRDdXJyZW50VXNlcigpLmlkO1xyXG4gICAgICAgIGlmIChzZWxmSWQgPT0gdXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xyXG4gICAgICAgIGlmIChwcml2YXRlQ2hhbm5lbElkKSByZXR1cm4gdGhpcy5Qcml2YXRlQ2hhbm5lbEFjdGlvbnMuc2VsZWN0UHJpdmF0ZUNoYW5uZWwocHJpdmF0ZUNoYW5uZWxJZCk7XHJcbiAgICAgICAgdGhpcy5DaGFubmVsQWN0aW9ucy5vcGVuUHJpdmF0ZUNoYW5uZWwoc2VsZklkLCB1c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlU2V0dGluZ3MoY2F0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdCAmJiBzZXR0aW5nLmltcGxlbWVudGVkICYmICFzZXR0aW5nLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XHJcbiAgICAgICAgICAgIH0gcmV0dXJuIGFycjtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IHN0eWxlID0gYFxyXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGF0LTNiUnh4dSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNpZGViYXItMks4cEZoIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSB7XHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiVm9pY2VNb2RlXCIpO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbmRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbmRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBtLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVzO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKC4uLnByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxubGV0IG1vZCA9ICB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuZXhwb3J0IGRlZmF1bHQgbW9kXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuV2VicGFja01vZHVsZXMgPSBtb2QiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiXHJcblxyXG5sZXQgcHJvZmlsTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQub3BlbiAmJiBlLmRlZmF1bHQuZmV0Y2hNdXR1YWxGcmllbmRzKVswXVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlnaHRjb3JkVXNlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBkZWxldGUgcHJvcHMuaHJlZi50YXJnZXRcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocHJvcHMpXHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxwcm9wcy5BbmNob3IgaHJlZj17XCIvdXNlcnMvXCIrcHJvcHMudXNlci5pZH0gey4uLnByb3BzLmhyZWZ9IG9uQ2xpY2s9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgaWYoIXByb2ZpbE1vZHVsZSlwcm9maWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5vcGVuICYmIGUuZGVmYXVsdC5mZXRjaE11dHVhbEZyaWVuZHMpWzBdXHJcbiAgICAgICAgICAgICAgICBwcm9maWxNb2R1bGUuZGVmYXVsdC5vcGVuKHByb3BzLnVzZXIuaWQpXHJcbiAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjggMXMxMiA4LjIgNy40IDE5LjdTMTYuNiAyOSAyMCAyNS42cy00LTUuNi04LjctMTBMMjIuOCAxXCIgZmlsbD1cInJnYmEoMjI3LDYsMTksLjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9wcm9wcy5BbmNob3I+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1Z0h1bnRlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBDaXJjdXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgIHsuLi50aGlzLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0REMkU0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zMyAzM2EyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJsMS0xMmgyOGwxIDEyelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0VBNTk2RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMyAzNWMtLjc5Mi0xLjg3NS0xLjc1LTMuMjkxLTMuNDE3LTQuNjY2IDEuNzUtMS40NTkgNC41NDItNS41IDUuMjUtOC4yOTJzMi43NSA4LjEyNSAyLjA0MiAxMC42MjVTMTMgMzUgMTMgMzV6bTEwLjMwMyAwYy43OTEtMS44NzUgMS43NS0zLjI5MSAzLjQxNi00LjY2Ni0xLjc1LTEuNDU5LTQuNTQxLTUuNS01LjI1LTguMjkyLS43MDctMi43OTItMi43NSA4LjEyNS0yLjA0IDEwLjYyNS43MDggMi41IDMuODc0IDIuMzMzIDMuODc0IDIuMzMzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0JFMTkzMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjcyOCAyNC4yNjNBMi41IDIuNSAwIDAwOCAyMi41YzAtLjU2NS0uMTk1LTEuMDgxLS41MTEtMS41SDRsLS4yNzIgMy4yNjN6bTI4LjU0NCAwTDMyIDIxaC0zLjQ4OUEyLjQ4MiAyLjQ4MiAwIDAwMjggMjIuNWEyLjUgMi41IDAgMDA0LjI3MiAxLjc2M3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjJcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzIDM1SDEzczItNiAyLTEzaDZjMCA3IDIgMTMgMiAxM3pNMTcgMmgydjdoLTJ6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzU1QUNFRVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOC44MzguMjA2QzE3LjY2Ny4wNDIgMTcgLjMxOCAxNyAxLjQxOHYxYzAgMS4xLjg2NSAxLjc1MyAxLjkyMyAxLjQ1MWw1LjE1NC0uOTAxYzEuNzE1LS4zNDMgMS41NDgtMS41OTMuMDg1LTEuODg0TDE4LjgzOC4yMDZ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQ0NENkREXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDZsLS4wODEuMTIzQzEwLjkzOCAxNi45ODEgMyAxNS4wMTUgMyAxOXYyLjVhMi41IDIuNSAwIDAwNC45NS41SDEyYTIgMiAwIDAwNCAwaDRhMiAyIDAgMDA0IDBoNC4wNWEyLjUgMi41IDAgMDA0Ljk1LS41VjE5YzAtNC04LTItMTUtMTN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8ZyBmaWxsPVwiI0Y1RjhGQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTQ4IDYuMDc4bC0uMDMuMDQ1QzE3LjEzMiAxMS42MTkgMTAuODExIDE2LjEyNiA4IDE4djRhMiAyIDAgMDA0IDB2LTRjLjk4Mi0uOTgyIDUuODEzLTYuNzg3IDUuOTg0LTExLjczMi0uMDEtLjA2NC0uMDI3LS4xMjYtLjAzNi0uMTl6bS4wOC4zOThDMTguMzI0IDExLjM3NCAyMy4wMzEgMTcuMDMxIDI0IDE4djRhMiAyIDAgMDA0IDB2LTRjLTIuNzUtMS44MzMtOC45NTMtNi4xOS05Ljk3Mi0xMS41MjR6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTg0IDYuMjdDMTcuOTIyIDguMzQ2IDE3LjYwNiAxNi4zOTQgMTYgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMS41NjQtMS41NjQtMS45MDUtOS4yNDEtMS45NzktMTEuNTU5LS4wMTEtLjA1Ny0uMDI3LS4xMTMtLjAzNy0uMTcxelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZExvZ28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2FcIiB4MT17NjYuN30geTE9ey00ODcuN30geDI9ezY2Ljd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTIwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fY1wiIHgxPXs4NH0geTE9ey00MDh9IHgyPXs4NH0geTI9ey01NzYuNjl9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ni43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2EpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAxLjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XHJcbiAqL1xyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxubGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxubGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbmxldCBzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuY29uc3QgR3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMpWzBdLmRlZmF1bHRcclxuY29uc3QgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UmVsYXRpb25zaGlwcylbMF0uZGVmYXVsdFxyXG5jb25zdCBzZXNzaW9uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0U2Vzc2lvbnMpWzBdLmRlZmF1bHRcclxuY29uc3QgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQWNjb3VudEluZm9zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlMiltYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG4gICAgICAgIGlmKCFjb2xvck1vZHVsZSljb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbiAgICAgICAgaWYoIXNpemVNb2R1bGUpc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIkFjY291bnQgSW5mb3NcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBQcm9maWxlXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0UHJvZmlsZVZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRpc3RpY3NcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTdGF0aXN0aWNzKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBTZXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFNlc3Npb25WYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0ubWFyZ2luQm90dG9tMjB9PjwvZGl2PlxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXNzaW9uVmFsdWUoKXtcclxuICAgICAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKVxyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zID0gT2JqZWN0LmtleXMoc2Vzc2lvbnNSYXcpLmZpbHRlcihlID0+IGUgIT09IFwiYWxsXCIpLm1hcChlID0+IHNlc3Npb25zUmF3W2VdKVxyXG5cclxuICAgICAgICBpZihzZXNzaW9ucy5sZW5ndGggPT09IDApcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBzZXNzaW9ucy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgKyBpZDogJHtlLnNlc3Npb25JZH1cclxuKyBvczogJHtlLmNsaWVudEluZm8ub3NbMF0udG9VcHBlckNhc2UoKStlLmNsaWVudEluZm8ub3Muc2xpY2UoMSl9XHJcbisgY2xpZW50OiAke2UuY2xpZW50SW5mby5jbGllbnR9XHJcbisgc3RhdHVzOiAke2Uuc3RhdHVzfVxyXG4rIEFjdGl2aXRpZXM6ICR7ZS5hY3Rpdml0aWVzLmxlbmd0aH1gXHJcbiAgICAgICAgfSkuam9pbihcIlxcblwiK1wiLVwiLnJlcGVhdCgzOCkrXCJcXG5cIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlVmFsdWUoKXtcclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0RhdGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gdXNlci5jcmVhdGVkQXRcclxuXHJcbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuYXZhdGFyVVJMXHJcbiAgICAgICAgaWYodXNlci5hdmF0YXIgJiYgdXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwoXCJnaWZcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGF2YXRhclVSTC5zdGFydHNXaXRoKFwiL1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IFwiaHR0cHM6Ly9kaXNjb3JkLmNvbVwiK2F2YXRhclVSTFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihhdmF0YXJVUkwuZW5kc1dpdGgoXCI/c2l6ZT0xMjhcIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBhdmF0YXJVUkwucmVwbGFjZShcIj9zaXplPTEyOFwiLCBcIj9zaXplPTQwOTZcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBgKyBVc2VybmFtZTogJHt1c2VyLnVzZXJuYW1lfVxyXG4rIERpc2NyaW1pbmF0b3I6ICR7dXNlci5kaXNjcmltaW5hdG9yfVxyXG4rIFRhZzogJHt1c2VyLnRhZ31cclxuKyBJRDogJHt1c2VyLmlkfVxyXG4rIEF2YXRhcjogJHt1c2VyLmF2YXRhcn1cclxuKyBBdmF0YXIgVVJMOiAke2F2YXRhclVSTH1cclxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcclxuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxyXG4rIEhhcyBOaXRybzogJHt1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24gPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XHJcbi0gMkZBOiAke3VzZXIubWZhRW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxyXG4tIFZlcmlmaWVkOiAke3VzZXIudmVyaWZpZWR9YFxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRpc3RpY3MoKXtcclxuXHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gT2JqZWN0LnZhbHVlcyhHdWlsZE1vZHVsZS5nZXRHdWlsZHMoKSlcclxuICAgICAgICBjb25zdCByZWxhdGlvbnMgPSBPYmplY3Qua2V5cyhyZWxhdGlvblNoaXBNb2R1bGUuZ2V0UmVsYXRpb25zaGlwcygpKVxyXG4gICAgICAgIGNvbnN0IGZyaWVuZHMgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzRnJpZW5kKGUpKVxyXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSByZWxhdGlvbnMuZmlsdGVyKGUgPT4gcmVsYXRpb25TaGlwTW9kdWxlLmlzQmxvY2tlZChlKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIGArIFNlcnZlciBDb3VudDogJHtndWlsZHMubGVuZ3RofSBzZXJ2ZXJzXHJcbisgUmVsYXRpb25zOiAke3JlbGF0aW9ucy5sZW5ndGh9IHJlbGF0aW9uc1xyXG4rIEZyaWVuZHMgQ291bnQ6ICR7ZnJpZW5kcy5sZW5ndGh9IGZyaWVuZHNcclxuLSBCbG9ja2VkIFVzZXJzIENvdW50OiAke2Jsb2NrZWQubGVuZ3RofSBibG9ja2VkIHVzZXJzYFxyXG4gICAgfVxyXG59XHJcblxyXG5cclxubGV0IGhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXVxyXG5sZXQgbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuXHJcbmNsYXNzIENvZGVDb250ZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFtZXNzYWdlTW9kdWxlMSltZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTIpbWVzc2FnZU1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tZXNzYWdlQ29udGVudClbMF1cclxuICAgICAgICBpZighc2Nyb2xsYmFyTW9kdWxlMSlzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuICAgICAgICBpZighaGlnaHRsaWdodEpTKWhpZ2h0bGlnaHRKUyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhpZ2hsaWdodClbMF1cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake21lc3NhZ2VNb2R1bGUxLm1hcmt1cH0gJHttZXNzYWdlTW9kdWxlMi5tZXNzYWdlQ29udGVudH1gfT5cclxuICAgICAgICAgICAgPHByZT5cclxuICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogaGlnaHRsaWdodEpTLmhpZ2hsaWdodCh0aGlzLnByb3BzLmxhbmd1YWdlLCB0aGlzLnByb3BzLmNvbnRlbnQpLnZhbHVlfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9jb2RlPlxyXG4gICAgICAgICAgICA8L3ByZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufSIsIi8vIEdvb2QgbHVjayB0byByZWFkIG15IGNvZGUsIEV2ZW4gbWUgY2FuJ3QgcmVhZCBpdCBwcm9wZXJseS5cclxuXHJcbmltcG9ydCB7IHN0YXQgfSBmcm9tIFwiZnNcIlxyXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi4vbW9kdWxlcy9kaXN0YW50XCJcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIlxyXG5cclxuY29uc3Qga2V5cyA9IHtcclxuICAgIHNldHRpbmdUaXRsZTogdXVpZHY0KClcclxufVxyXG5sZXQgZm9ybU1vZHVsZVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlQcmV2aWV3IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzdGF0ZXM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFmb3JtTW9kdWxlKWZvcm1Nb2R1bGUgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5Gb3JtU2VjdGlvbilcclxuICAgICAgICAvKiogXHJcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9uW119XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgYWxsQ29tcG9uZW50cyA9IFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV0pLm1hcChrID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1ba10pXHJcbiAgICAgICAgfSkuZmxhdCgpKV1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtU2VjdGlvbiB0YWc9XCJoMlwiIHRpdGxlPVwiTGlnaHRjb3JkJ3MgQXBpIEF2YWlsbGFibGUgY29tcG9uZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm1Nb2R1bGUuRm9ybVRleHQgdHlwZT1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwiXCIgc2VsZWN0YWJsZT17ZmFsc2V9PlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZXNlIGNvbXBvbmVudHMgYXJlIGhlcmUgZm9yIHRoZSBwbHVnaW4gZGV2cy4gVGhleSBjYW4gcXVpY2tseSBlbWJlZCBhbnkgY29tcG9uZW50IGJlbG93IHdpdGggdGhpcyBwYW5lbC5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7bWFyZ2luVG9wOiBcIjIwcHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPkFsbCB0aGVzZSBjb21wb25lbnRzIGhhdmUgZXJyb3IgaGFuZGxpbmcuIElmIHlvdSB3YW50IG5vbmUsIGFkZCBgLm9yaWdpbmFsYCBhZnRlciB0aGUgY29tcG9uZW50IHBhdGguPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5XZSBkbyBub3QgcmVjb21tZW5kIG1vZGlmeWluZyB0aGVzZSBjb21wb25lbnQgYnkgYSBwbHVnaW4uIE9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cclxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJvdXRsaW5lZFwiIHNpemU9XCJtZWRpdW1cIiBob3ZlckNvbG9yPVwiZ3JlZW5cIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovTGlnaHRjb3JkQXBpL2RvY3NcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgICAgICAgICAgbGV0IG9uQ2hhbmdlID0gKHRhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzZXRTdGF0ZSA9IChuZXdTdGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZXM6IFtPYmplY3QuYXNzaWduKHN0YXRlLCBuZXdTdGF0ZSldLmNvbmNhdCh0aGlzLnN0YXRlLnN0YXRlcy5maWx0ZXIoZSA9PiBlLmVsZW0gIT09IGNvbXApKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlLnN0YXRlcy5maW5kKGUgPT4gZS5lbGVtID09PSBjb21wKVxyXG4gICAgICAgICAgICAgICAgaWYoIXN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiOiBcInByZXZpZXdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbTogY29tcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge31cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdGF0ZXMucHVzaChzdGF0ZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRQcm9wcyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmluYWwgPSB7fVxyXG4gICAgICAgICAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1dID0gY2F0ZWdvcnlbMF1bT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFtrZXldID0gQWxsUHJldmlld3MuZmluZChlID0+IGUuZmluZChlID0+IGVba2V5XSkpW3N0YXRlLm9wdGlvbnNba2V5XV1ba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyUHJldmlldyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyQ29kZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianN4XCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwianN4XCIpfS8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQ29kZUJsb2NrIGxhbmd1YWdlPVwianNcIiBjb250ZW50PXtnZW5lcmF0ZUNvZGUoXCJyZWFjdFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBnZXRTdHJGb3JQcm9wID0gKHZhbHVlLCBjb21wUGF0aCwgbGFuZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbXBQYXRoID09PSBcIkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRhYnNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJyZWFjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG4gICAgbWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIlxyXG59fSxcclxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLFxyXG4gICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICB9LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGUsIG51bGwsIFwiUHJldmlldyB0YWJzXCIpXHJcbiAgICApXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxuICAgIH19PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtc2Vjb25kYXJ5KVwiLCBcclxuICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UaXRsZT5QcmV2aWV3IHRhYnM8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIllvdXIgY29tcG9uZW50cyBoZXJlLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCBcIiAgICBcIilcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGdlbmVyYXRlQ29kZSA9IGZ1bmN0aW9uKGxhbmcpeyAvLyBjb2RlIGZvcm1hdHRpbmcgaXMgaGFyZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maW5kKGUgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtjb21wTmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcFBhdGggPSBgTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLiR7Y29tcENhdGVnb3J5fS4ke2NvbXBOYW1lfWBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYobGFuZyA9PT0gXCJqc3hcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wU3RyaW5ncyA9IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT0gXCJjaGlsZHJlblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0ciA9IGtleStcIj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2xvc2VUYWcgPSBgPC8ke2NvbXBQYXRofT5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0vPmBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjaGlsZHJlbiAmJiBjaGlsZHJlbi4kJHR5cGVvZiAmJiAoY2hpbGRyZW4uJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IGNoaWxkcmVuLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2aXNpYmxlS2V5ID0gL1teXFx3XFxkX10vZy50ZXN0KGtleSkgPyBKU09OLnN0cmluZ2lmeShrZXkpIDoga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0gdmlzaWJsZUtleStcIjogXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gSlNPTi5zdHJpbmdpZnkocHJvcHNba2V5XSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpID09PSAwKXJldHVybiBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiICAgIFwiICsgc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcFN0cmluZ3MucHVzaChzdHIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9wT2JqZWN0ID0gXCJ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJvcFN0cmluZ3MubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0xhc3QgPSBpID09PSBwcm9wU3RyaW5ncy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRmlyc3QgPSBpID09PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IFwiLFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wT2JqZWN0ICs9IHN0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzTGFzdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJlYWN0LmNyZWF0ZUVsZW1lbnQoJHtjb21wUGF0aH0sICR7cHJvcE9iamVjdH0sICR7Y2hpbGRyZW5EYXRhfSlgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGhlbHAgPSBjb21wLmhlbHAgfHwge31cclxuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gaGVscC5pbmZvID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgd2FybiA9IGhlbHAud2FybiA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cIndhcm5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGRhbmdlciA9IGhlbHAuZGFuZ2VyID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yID0gaGVscC5lcnJvciA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cImVycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD4gOiBudWxsXHJcbiAgICAgICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGhlbHAuc3VjY2VzcyA/IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3ggdHlwZT1cInN1Y2Nlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbXAuZGlzcGxheU5hbWUgfHwgY29tcC5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdzVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgICAgICAgICAge3N1Y2Nlc3N9XHJcbiAgICAgICAgICAgICAgICAgICAge3dhcm59XHJcbiAgICAgICAgICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICAgICAgICAgIHtkYW5nZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAge0FsbFByZXZpZXdzLm1hcChjYXRlZ29yeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2F0ZWdvcnlbMF0udGV4dClyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeVswXS5jaGlsZHJlbilyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhjYXRlZ29yeVswXSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtrZXl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIG9wdGlvbnM9e2NhdGVnb3J5Lm1hcCgoZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBKU09OLnN0cmluZ2lmeShlW09iamVjdC5rZXlzKGUpWzBdXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5vcHRpb25zLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogKHZhbHVlLnZhbHVlIHx8IFwiMFwiKS5yZXBsYWNlKFwib3B0LVwiLCBcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSBzZWFyY2hhYmxlPXt0cnVlfS8+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17c3RhdGUudGFifSBjaGlsZHJlbj17c3RhdGUudGFiID09PSBcInByZXZpZXdcIiA/IHJlbmRlclByZXZpZXcoKSA6IHJlbmRlckNvZGUoKX0gb25DaGFuZ2U9e29uQ2hhbmdlfS8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCFjb250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBDb250YWluZXIgaXMgdW5kZWZpbmVkLmApKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJjb250ZW50UmVnaW9uU2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5cclxuY29uc3QgVG9vbHRpcCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5yZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhcmRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge3NvcnQ6IFwibmFtZVwiLCBhc2NlbmRpbmc6IHRydWUsIHF1ZXJ5OiBcIlwifTtcclxuICAgICAgICB0aGlzLmlzUGx1Z2lucyA9IHRoaXMucHJvcHMudHlwZSA9PSBcInBsdWdpbnNcIjtcclxuICAgICAgICB0aGlzLmNvb2tpZSA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luQ29va2llIDogdGhlbWVDb29raWU7XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyID0gdGhpcy5pc1BsdWdpbnMgPyBwbHVnaW5Nb2R1bGUgOiB0aGVtZU1vZHVsZTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3J0ID0gdGhpcy5zb3J0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gdGhpcy5yZXZlcnNlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZGRvbkNoYW5nZXMgPSB0aGlzLm9uQWRkb25DaGFuZ2VzLmJpbmQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub24oYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9dW5sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9ICh0aGlzLmlzUGx1Z2lucyA/IFwicGx1Z2luXCIgOiBcInRoZW1lXCIpICsgXCItXCJcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1sb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgICAgIGJkRXZlbnRzLm9mZihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX1yZWxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvbGRlcigpIHtcclxuICAgICAgICBjb25zdCBzaGVsbCA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbDtcclxuICAgICAgICBjb25zdCBvcGVuID0gc2hlbGwub3BlblBhdGggfHwgc2hlbGwub3Blbkl0ZW07XHJcbiAgICAgICAgb3Blbih0aGlzLmlzUGx1Z2lucyA/IENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQobmFtZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5lZGl0KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkRGVsZXRlID0gYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlKG5hbWUpO1xyXG4gICAgICAgIGlmICghc2hvdWxkRGVsZXRlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5tYW5hZ2VyLmRlbGV0ZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbChcIkFyZSBZb3UgU3VyZT9cIiwgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgJHtuYW1lfT9gLCB7XHJcbiAgICAgICAgICAgICAgICBkYW5nZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEZWxldGVcIixcclxuICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge3Jlc29sdmUodHJ1ZSk7fSxcclxuICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7cmVzb2x2ZShmYWxzZSk7fVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc29ydE9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge2xhYmVsOiBcIk5hbWVcIiwgdmFsdWU6IFwibmFtZVwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkF1dGhvclwiLCB2YWx1ZTogXCJhdXRob3JcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJWZXJzaW9uXCIsIHZhbHVlOiBcInZlcnNpb25cIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJSZWNlbnRseSBBZGRlZFwiLCB2YWx1ZTogXCJhZGRlZFwifSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkxhc3QgTW9kaWZpZWRcIiwgdmFsdWU6IFwibW9kaWZpZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJGaWxlIFNpemVcIiwgdmFsdWU6IFwic2l6ZVwifSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkaXJlY3Rpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBc2NlbmRpbmdcIiwgdmFsdWU6IHRydWV9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRGVzY2VuZGluZ1wiLCB2YWx1ZTogZmFsc2V9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnNlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7YXNjZW5kaW5nOiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtzb3J0OiB2YWx1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3F1ZXJ5OiBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb3BzKGFkZG9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAga2V5OiB0aGlzLmdldE5hbWUoYWRkb24pLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB0aGlzLmNvb2tpZVt0aGlzLmdldE5hbWUoYWRkb24pXSxcclxuICAgICAgICAgICAgdG9nZ2xlOiB0aGlzLm1hbmFnZXIudG9nZ2xlLmJpbmQodGhpcy5tYW5hZ2VyKSxcclxuICAgICAgICAgICAgZWRpdDogc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTdcIl0gPyB0aGlzLmVkaXQuYmluZCh0aGlzKSA6IG51bGwsXHJcbiAgICAgICAgICAgIHJlbW92ZTogdGhpcy5kZWxldGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgYWRkb246IGFkZG9uLFxyXG4gICAgICAgICAgICBoYXNoOiBhZGRvbi5oYXNoXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmcodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCI/Pz9cIjtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZSA6IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxpc3QoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50eXBlID09PSBcInBsdWdpbnNcIiA/IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKSA6IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZG9ucygpIHtcclxuICAgICAgICBjb25zdCBzb3J0ZWRBZGRvbnMgPSB0aGlzLmxpc3Quc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXAgPSB0aGlzLnN0YXRlLnNvcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN0YXRlLnNvcnQuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gYS5wbHVnaW4gJiYgYS5wbHVnaW5bYGdldCR7Y2FwfWBdID8gdGhpcy5nZXRTdHJpbmcoYS5wbHVnaW5bYGdldCR7Y2FwfWBdKCkpIDogYVt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBiLnBsdWdpbiAmJiBiLnBsdWdpbltgZ2V0JHtjYXB9YF0gPyB0aGlzLmdldFN0cmluZyhiLnBsdWdpbltgZ2V0JHtjYXB9YF0oKSkgIDogYlt0aGlzLnN0YXRlLnNvcnRdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlckNoZWNrVXBkYXRlcygpe1xyXG4gICAgICAgIGlmKCF3aW5kb3cuWmVyZXNQbHVnaW5MaWJyYXJ5KXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsICE9PSBcImZ1bmN0aW9uXCIpcmV0dXJuIG51bGxcclxuICAgICAgICBpZighdGhpcy5pc1BsdWdpbnMpcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjEwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBpbiBwcm9ncmVzcy5cIiwge3R5cGU6IFwiaW5mb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGNvbXBsZXRlLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0gZGlzYWJsZWQ9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBDaGVjayBmb3IgVXBkYXRlc1xyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvVG9vbHRpcFdyYXA+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHJlZnJlc2hJY29uID0gPFRvb2x0aXAgY29sb3I9XCJibGFja1wiIHBvc2l0aW9uPVwidG9wXCIgdGV4dD1cIlJlbG9hZCBMaXN0XCI+XHJcbiAgICAgICAgICAgIHsocHJvcHMpID0+IFxyXG4gICAgICAgICAgICA8UmVsb2FkSWNvbiB7Li4ucHJvcHN9IGNsYXNzTmFtZT1cImJkLWljb24gYmQtcmVsb2FkIGJkLXJlbG9hZC1oZWFkZXJcIiBzaXplPVwiMThweFwiIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGx1Z2lucykgcGx1Z2luTW9kdWxlLnVwZGF0ZVBsdWdpbkxpc3QoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhlbWVNb2R1bGUudXBkYXRlVGhlbWVMaXN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgIH08L1Rvb2x0aXA+O1xyXG4gICAgICAgIGNvbnN0IGFkZG9uQ2FyZHMgPSB0aGlzLmdldEFkZG9ucygpO1xyXG5cclxuICAgICAgICByZXR1cm4gPENvbnRlbnRDb2x1bW4gdGl0bGU9e2Ake3RoaXMucHJvcHMudHlwZS50b1VwcGVyQ2FzZSgpfeKAlCR7YWRkb25DYXJkcy5sZW5ndGh9YH0+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2V5PVwiZm9sZGVyLWJ1dHRvblwiIGNsYXNzTmFtZT1cImJkLWJ1dHRvbiBiZC1wZmJ0blwiIG9uQ2xpY2s9e3RoaXMub3BlbkZvbGRlci5iaW5kKHRoaXMpfT5PcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJDaGVja1VwZGF0ZXMoKX1cclxuICAgICAgICAgICAgeyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiByZWZyZXNoSWNvbn1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5PcmRlcjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZGEtc2xpc3QgYmQtYWRkb24tbGlzdFwiPnthZGRvbkNhcmRzfTwvZGl2PlxyXG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsgIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJETG9nbyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHtoZWlnaHQ6IFwiMTAwJVwiLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nbyBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLCBzdHlsZToge2ZpbGxSdWxlOiBcImV2ZW5vZGRcIiwgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiLCBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJ9LCB2aWV3Qm94OiBcIjAgMCAyMDAwIDIwMDBcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcIm1ldGFkYXRhXCIsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzFcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjIwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MlwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMTVcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgyNTUsMjU1LDI1NSwwLjE1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3czXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxMFwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDAsMCwwLDAuMzUpXCJ9KSlcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3czKVwifSwgZDogXCJNMTE5NS40NCsxMzUuNDQyTDExOTUuNDQrMTM1LjQ0Mkw5OTcuNisxMzYuNDQyQzEwMjQuMisxNDkuNzQyKzExNzAuMzQrMTYzLjU0MisxMTkzLjY0KzE3OS43NDJDMTI2NC4zNCsyMjguODQyKzEzMTkuNzQrMjkxLjI0MisxMzU4LjI0KzM2NS4wNDJDMTM5OC4xNCs0NDEuNjQyKzE0MTkuNzQrNTMwLjY0MisxNDIyLjU0KzYyOS42NDJMMTQyMi41NCs2MzAuODQyTDE0MjIuNTQrNjMyLjA0MkMxNDIyLjU0Kzc3My4xNDIrMTQyMi41NCsxMjI4LjE0KzE0MjIuNTQrMTM2OS4xNEwxNDIyLjU0KzEzNzAuMzRMMTQyMi41NCsxMzcxLjU0QzE0MTkuODQrMTQ3MC41NCsxMzk4LjI0KzE1NTkuNTQrMTM1OC4yNCsxNjM2LjE0QzEzMTkuNzQrMTcwOS45NCsxMjY0LjQ0KzE3NzIuMzQrMTE5My42NCsxODIxLjQ0QzExNzEuMDQrMTgzNy4xNCsxMDI1LjcrMTg1MC41NCsxMDAwKzE4NjMuNTRMMTE5My41NCsxODY0LjU0QzE1MzkuNzQrMTg2Ni40NCsxODY0LjU0KzE2OTMuMzQrMTg2NC41NCsxMjk2LjY0TDE4NjQuNTQrNzE2Ljk0MkMxODY2LjQ0KzMxMi40NDIrMTU0MS42NCsxMzUuNDQyKzExOTUuNDQrMTM1LjQ0MlpcIiwgZmlsbDogXCIjMTcxNzE3XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzIpXCJ9LCBkOiBcIk0xNjk1LjU0KzYzMS40NDJDMTY4NS44NCsyNzguMDQyKzE0MDkuMzQrMTM1LjQ0MisxMDUyLjk0KzEzNS40NDJMMzYxLjc0KzEzNi40NDJMODAzLjc0KzQ5MC40NDJMMTA2MC43NCs0OTAuNDQyQzEzMzUuMjQrNDkwLjQ0MisxMzM1LjI0KzgzNS4zNDIrMTA2MC43NCs4MzUuMzQyTDEwNjAuNzQrMTE2NC44NEMxMTUwLjIyKzExNjQuODQrMTIxMC41MysxMjAxLjQ4KzEyNDEuNjgrMTI1MC44N0MxMzA2LjA3KzEzNTMrMTI0NS43NisxNTA5LjY0KzEwNjAuNzQrMTUwOS42NEwzNjEuNzQrMTg2My41NEwxMDUyLjk0KzE4NjQuNTRDMTQwOS4yNCsxODY0LjU0KzE2ODUuNzQrMTcyMS45NCsxNjk1LjU0KzEzNjguNTRDMTY5NS41NCsxMjA1Ljk0KzE2NTEuMDQrMTA4NC40NCsxNTcyLjY0Kzk5OS45NDJDMTY1MS4wNCs5MTUuNTQyKzE2OTUuNTQrNzk0LjA0MisxNjk1LjU0KzYzMS40NDJaXCIsIGZpbGw6IFwiIzNFODJFNVwiLCBvcGFjaXR5OiBcIjFcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7c3R5bGU6IHtmaWx0ZXI6IFwidXJsKCNzaGFkb3cxKVwifSwgZDogXCJNMTQ2OS4yNSs2MzEuNDQyQzE0NTkuNTUrMjc4LjA0MisxMTgzLjA1KzEzNS40NDIrODI2LjY1KzEzNS40NDJMMTM1LjQ1KzEzNS40NDJMMTM1LjQ1KzEwMDRDMTM1LjQ1KzEwMDQrMTM1LjQyNysxMjU1LjIxKzM1NS42MjYrMTI1NS4yMUM1NzUuODI1KzEyNTUuMjErNTc1Ljg0OCsxMDA0KzU3NS44NDgrMTAwNEw1NzcuNDUrNDkwLjQ0Mkw4MzQuNDUrNDkwLjQ0MkMxMTA4Ljk1KzQ5MC40NDIrMTEwOC45NSs4MzUuMzQyKzgzNC40NSs4MzUuMzQyTDY2NC42NSs4MzUuMzQyTDY2NC42NSsxMTY0Ljg0TDgzNC40NSsxMTY0Ljg0QzkyMy45MzIrMTE2NC44NCs5ODQuMjQ0KzEyMDEuNDgrMTAxNS4zOSsxMjUwLjg3QzEwNzkuNzgrMTM1MysxMDE5LjQ3KzE1MDkuNjQrODM0LjQ1KzE1MDkuNjRMMTM1LjQ1KzE1MDkuNjRMMTM1LjQ1KzE4NjQuNTRMODI2LjY1KzE4NjQuNTRDMTE4Mi45NSsxODY0LjU0KzE0NTkuNDUrMTcyMS45NCsxNDY5LjI1KzEzNjguNTRDMTQ2OS4yNSsxMjA1Ljk0KzE0MjQuNzUrMTA4NC40NCsxMzQ2LjM1Kzk5OS45NDJDMTQyNC43NSs5MTUuNTQyKzE0NjkuMjUrNzk0LjA0MisxNDY5LjI1KzYzMS40NDJaXCIsIGZpbGw6IFwiI0ZGRkZGRlwiLCBvcGFjaXR5OiBcIjFcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19DaGVja2JveCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5jaGVja2VkIHx8IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJsaVwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveCBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94LCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1pbm5lciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveElubmVyKVswXS5jaGVja2JveElubmVyfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGVja2JveEVsZW1lbnQpWzBdLmNoZWNrYm94RWxlbWVudCwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsICF0aGlzLnN0YXRlLmNoZWNrZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgQXJyb3cgZnJvbSBcIi4uL2ljb25zL2Rvd25hcnJvd1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge29wZW46IGZhbHNlLCB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSB8fCB0aGlzLnByb3BzLm9wdGlvbnNbMF0udmFsdWV9O1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd24gPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnUgPSB0aGlzLnNob3dNZW51LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oaWRlTWVudSA9IHRoaXMuaGlkZU1lbnUuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVudShldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGlkZU1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVNZW51KCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe29wZW46IGZhbHNlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHt2YWx1ZX0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VsZWN0ZWQoKSB7cmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5maW5kKG8gPT4gby52YWx1ZSA9PSB0aGlzLnN0YXRlLnZhbHVlKTt9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMubWFwKG9wdCA9PiBcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0LW9wdGlvbiR7c2VsZWN0ZWQudmFsdWUgPT0gb3B0LnZhbHVlID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCJ9YH0gb25DbGljaz17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMsIG9wdC52YWx1ZSl9PntvcHQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMucHJvcHMuc3R5bGUgPT0gXCJ0cmFuc3BhcmVudFwiID8gXCIgYmQtc2VsZWN0LXRyYW5zcGFyZW50XCIgOiBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuc3RhdGUub3BlbiA/IFwiIG1lbnUtb3BlblwiIDogXCJcIjtcclxuICAgICAgICByZXR1cm4gIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUub3BlbiAmJiB0aGlzLm9wdGlvbnN9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC13cmFwXCI+XHJcbi8vIDxsYWJlbCBjbGFzc05hbWU9XCJiZC1sYWJlbFwiPnt0aGlzLnByb3BzLmxhYmVsfTwvbGFiZWw+XHJcbi8vIDxkaXYgY2xhc3NOYW1lPXtgYmQtc2VsZWN0JHtzdHlsZX0ke2lzT3Blbn1gfSBvbkNsaWNrPXt0aGlzLnNob3dNZW51fSByZWY9e3RoaXMuZHJvcGRvd259PlxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtY29udHJvbHNcIj5cclxuLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC12YWx1ZVwiPnt0aGlzLnNlbGVjdGVkLmxhYmVsfTwvZGl2PlxyXG4vLyAgICAgICAgIDxBcnJvdyBjbGFzc05hbWU9XCJiZC1zZWxlY3QtYXJyb3dcIiAvPlxyXG4vLyAgICAgPC9kaXY+XHJcbi8vIDwvZGl2PlxyXG4vLyB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuLy8gPC9kaXY+OyIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTZWFyY2hJY29uIGZyb20gXCIuLi9pY29ucy9zZWFyY2hcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VhcmNoLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9IG9uS2V5RG93bj17dGhpcy5wcm9wcy5vbktleURvd259IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiYmQtc2VhcmNoXCIgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXJ9IG1heExlbmd0aD1cIjUwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8U2VhcmNoSWNvbiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN3aXRjaCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge2NoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH07XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlN3aXRjaCBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX0gdmFsdWU9e3RoaXMuc3RhdGUuY2hlY2tlZH0gLz5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ29udGVudENvbHVtbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBkaXNwbGF5TmFtZSgpIHtyZXR1cm4gXCJDb250ZW50Q29sdW1uXCI7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL2xldCBjb250ZW50TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbilbMF1cclxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCB0aGlzLnByb3BzLnRpdGxlKSA6IG51bGxcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW4gKyBcIiBcIitjb250ZW50TW9kdWxlLmNvbnRlbnRDb2x1bW5EZWZhdWx0K1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIiwgc3R5bGU6IHtwYWRkaW5nOiBcIjYwcHggNDBweCAwcHhcIn19LFxyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuaW1wb3J0IFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBmcm9tIFwiLi9jc3NFZGl0b3JEZXRhY2hlZFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0Nzc0VkaXRvciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYucHJvcHMubGluZXMgPSAwO1xyXG4gICAgICAgIHNlbGYuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgc2VsZi5hdHRhY2ggPSBzZWxmLmF0dGFjaC5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoZWRFZGl0b3IgPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0Nzc0VkaXRvckRldGFjaGVkLCB7YXR0YWNoOiBzZWxmLmF0dGFjaH0pO1xyXG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLmRldGFjaCA9IHNlbGYuZGV0YWNoLmJpbmQoc2VsZik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRldGFjaGVkOiB0aGlzLnByb3BzLmRldGFjaGVkIHx8IEJEVjIuZWRpdG9yRGV0YWNoZWRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlTGluZUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBhY2UuZWRpdChcImJkLWN1c3RvbWNzcy1lZGl0b3JcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0VGhlbWUoXCJhY2UvdGhlbWUvbW9ub2thaVwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnNldE1vZGUoXCJhY2UvbW9kZS9jc3NcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0U2hvd1ByaW50TWFyZ2luKGZhbHNlKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRGb250U2l6ZSgxNCk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iub24oXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNzcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAocHJldlN0YXRlLmRldGFjaGVkICYmICFzZWxmLnN0YXRlLmRldGFjaGVkKSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLmRldGFjaGVkUm9vdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvZGVNaXJyb3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY3NzXCIsXHJcbiAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAgICAgICAgIHRoZW1lOiBcIm1hdGVyaWFsXCIsXHJcbiAgICAgICAgICAgIHNjcm9sbGJhclN0eWxlOiBcInNpbXBsZVwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3NzKCkge1xyXG4gICAgICAgIGNvbnN0IF9jY3NzID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIGxldCBjY3NzID0gXCJcIjtcclxuICAgICAgICBpZiAoX2Njc3MgJiYgX2Njc3MgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgY2NzcyA9IGF0b2IoX2Njc3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2NzcztcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaW5lQ291bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGluZUNvdW50ID0gdGhpcy5yZWZzLmVkaXRvci52YWx1ZS5zcGxpdChcIlxcblwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxpbmVDb3VudCA9PSB0aGlzLnByb3BzLmxpbmVzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yZWZzLmxpbmVzLnRleHRDb250ZW50ID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobGluZUNvdW50KSwgKF8sIGkpID0+IGkgKyAxKS5qb2luKFwiLlxcblwiKSArIFwiLlwiO1xyXG4gICAgICAgIHRoaXMucHJvcHMubGluZXMgPSBsaW5lQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBjb25zdCB7ZGV0YWNoZWR9ID0gc2VsZi5zdGF0ZTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2lkOiBcImVkaXRvci1kZXRhY2hlZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJoM1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJFZGl0b3IgRGV0YWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXR0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQXR0YWNoXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgIWRldGFjaGVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIkN1c3RvbSBDU1MgRWRpdG9yXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImVkaXRvci13cmFwcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiLCBjbGFzc05hbWU6IFwiZWRpdG9yXCIsIHJlZjogXCJlZGl0b3JcIn0sIHNlbGYuY3NzKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtYXR0YWNoLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWdyb3VwXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIHtpZDogXCJsaXZlLXVwZGF0ZVwiLCB0ZXh0OiBcIkxpdmUgVXBkYXRlXCIsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjaGVja2VkOiBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXX0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRyb2xzLWJ1dHRvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIzcHggMCAwIDNweFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMyZDJkMmRcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJzYXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2JvcmRlclJhZGl1czogXCIwIDNweCAzcHggMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwiZGV0YWNoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEZXRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEwcHhcIiwgbWFyZ2luTGVmdDogXCI1cHhcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVbnNhdmVkIGNoYW5nZXMgYXJlIGxvc3Qgb24gZGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiaGVscC10ZXh0XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJQcmVzcyBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImNvZGVcIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiY3RybFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImlubGluZVwifSwgXCIsXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgd2l0aCB0aGUgZWRpdG9yIGZvY3VzZWQgdG8gYWNjZXNzIHRoZSBlZGl0b3IncyBzZXR0aW5ncy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soYXJnKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChhcmcpIHtcclxuICAgICAgICAgICAgY2FzZSBcInVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDc3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwic2F2ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImRldGFjaFwiOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDc3MoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiY3VzdG9tY3NzXCIpO1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcImN1c3RvbWNzc1wiLCB0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDc3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkY3VzdG9tY3NzXCIsIGJ0b2EodGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGRyb290ID0gc2VsZi5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgaWYgKCFkcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBJTkpFQ1QgUk9PVDogLmFwcFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzZWxmLmRldGFjaGVkRWRpdG9yLCBkcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGRldGFjaGVkUm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IERPTS5xdWVyeShcIiNiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3REZXRhY2hlZFJvb3QoKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaGVkUm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdERldGFjaGVkUm9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHAuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0YWNoKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkZXRhY2hlZDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4vY2hlY2tib3hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Dc3NFZGl0b3JEZXRhY2hlZCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYub25DbGljayA9IHNlbGYub25DbGljay5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYudXBkYXRlQ3NzID0gc2VsZi51cGRhdGVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnNhdmVDc3MgPSBzZWxmLnNhdmVDc3MuYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLm9uQ2hhbmdlID0gc2VsZi5vbkNoYW5nZS5iaW5kKHNlbGYpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyB0aGlzLnVwZGF0ZUxpbmVDb3VudCgpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yID0gYWNlLmVkaXQoXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFRoZW1lKFwiYWNlL3RoZW1lL21vbm9rYWlcIik7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5zZXRNb2RlKFwiYWNlL21vZGUvY3NzXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Rm9udFNpemUoMTQpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLm9uKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVDc3MoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDc3MoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmQtZGV0YWNoZWQtZWRpdG9yXCIpO1xyXG4gICAgICAgIEJEVjIuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmVkaXRvci5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBvcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICBtb2RlOiBcImNzc1wiLFxyXG4gICAgICAgICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAgICAgICB0aGVtZTogXCJtYXRlcmlhbFwiLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJTdHlsZTogXCJzaW1wbGVcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNzcygpIHtcclxuICAgICAgICBjb25zdCBfY2NzcyA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKTtcclxuICAgICAgICBsZXQgY2NzcyA9IFwiXCI7XHJcbiAgICAgICAgaWYgKF9jY3NzICYmIF9jY3NzICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGNjc3MgPSBhdG9iKF9jY3NzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHAuc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHNlbGYub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJhdHRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYXR0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLnJvb3QpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yb290LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgYnRvYSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCkpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsInsvKiA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIndoaXRlXCIgd2lkdGg9XCIxOHB4XCIgaGVpZ2h0PVwiMThweFwiPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuPC9zdmc+ICovfVxyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxOHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmdpblRvcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfT48L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcclxuaW1wb3J0IHRpbWVzdGFtcFJlbmRlciBmcm9tIFwiLi90aW1lc3RhbXBSZW5kZXJcIlxyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi9tYXJnaW50b3BcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuLi9tb2R1bGVzL2Rpc3RhbnRcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmxldCBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikgfHwgZGVmYXVsdFJQQyxcclxuICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aWV3ID0gbnVsbFxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKXtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaEFzc2V0cygpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFzc2V0Q29tcG9uZW50cyA9IG5ldyBTZXQoKVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVdoZW5GZXRjaGVkKGNvbXApe1xyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmFkZChjb21wKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0lucHV0VGV4dH0gc2V0dGluZyBcclxuICAgICAqL1xyXG4gICAgb25DaGFuZ2Uoc2V0dGluZywgdmFsdWUpe1xyXG4gICAgICAgIGxldCBkZWZhdWx0U2V0dGluZyA9IFJQQ1Byb3BzLmZpbmQoZSA9PiBlLmlkID09PSBzZXR0aW5nLnByb3BzLmlkKVxyXG5cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgdGhpcy5zdGF0ZS5kYXRhLCB7XHJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdFNldHRpbmcuaWRdOiAhIXZhbHVlID8gdmFsdWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuc3RhdGUuYXNzZXRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZihzZXR0aW5nLnByb3BzLmlkID09PSBcImFwcGxpY2F0aW9uX2lkXCIpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgICAgIHRoaXMucHJldmlldy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLnNldChzZXR0aW5nc1JQQylcclxuICAgIH1cclxuXHJcbiAgICBmZXRjaEFzc2V0cygpe1xyXG4gICAgICAgIGlmKHRoaXMuaXNmZXRjaGluZyA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGxldCBhcHAgPSB0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWRcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQgIT09IGFwcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSB0cnVlXHJcbiAgICAgICAgQ3VzdG9tUmljaFByZXNlbmNlLmZldGNoQXNzZXRzKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZClcclxuICAgICAgICAudGhlbihhc3NldHMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogT2JqZWN0LmtleXMoYXNzZXRzKS5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2V0ID0gYXNzZXRzW2tdXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGFzc2V0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBhc3NldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBhc3NldC50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzZmV0Y2hpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RhdGUuZGF0YSxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogW11cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzLmZvckVhY2goZSA9PiBlLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQcmV2aWV3KGRhdGEpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMgfHwgKFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NHcm91cCB0aXRsZT1cIlJpY2hQcmVzZW5jZSBTZXR0aW5nc1wiIHNldHRpbmdzPXt0aGlzLnByb3BzLnNldHRpbmdzfSBvbkNoYW5nZT17dGhpcy5wcm9wcy5vbkNoYW5nZX0vPixcclxuICAgICAgICAgICAgPE1hcmdpblRvcCAvPixcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJSaWNoUHJlc2VuY2VcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgey8qKiBvcHRpb25zICovfVxyXG4gICAgICAgICAgICAgICAge3RoaXMub3B0aW9uc0NvbXBvbmVudHN9XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3AgLz5cclxuICAgICAgICAgICAgICAgIDxWMkNfU2V0dGluZ3NUaXRsZSB0ZXh0PVwiUHJldmlld1wiLz5cclxuICAgICAgICAgICAgICAgIHsvKiogcHJldmlldyAqL31cclxuICAgICAgICAgICAgICAgIDxScGNQcmV2aWV3IHNldHRpbmdzPXt0aGlzfS8+XHJcbiAgICAgICAgICAgIDwvZGl2PixcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+PC9kaXY+LFxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7b3BhY2l0eTogMC4wMX19IG9uQ2xpY2s9e3dpbmRvdy5vaGdvZG9oZnVja30+XHJcbiAgICAgICAgICAgICAgICBPaCBnb2QgT2ggZnVja1xyXG4gICAgICAgICAgICA8L2J1dHRvbj4sXHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TGtZYTdycHNfZzRcIilcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICBTZWUgPyBJIHB1bGxlZCBhIGxpdGxlIHNuZWFreSBvbiB5YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9wdGlvbnNDb21wb25lbnRzKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnNDb21wb25lbnRzIHx8ICh0aGlzLl9vcHRpb25zQ29tcG9uZW50cyA9IFJQQ1Byb3BzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgaWYoZS50eXBlID09PSBcInRleHRcIil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gPElucHV0VGV4dCBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPlxyXG4gICAgICAgICAgICB9ZWxzZSBpZihlLnR5cGUgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gWzxJbnB1dE51bWJlciBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0vPl0vKlxyXG4gICAgICAgICAgICAgICAgaWYoZS5pZCA9PT0gXCJ0aW1lc3RhbXBzLnN0YXJ0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnVuc2hpZnQoPERpc2NvcmRCdXR0b24gdGl0bGU9XCJDb3B5IEN1cnJlbnQgVGltZXN0YW1wXCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgICAgICB9fSAvPilcclxuICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJjaG9pY2VcIil7XHJcbiAgICAgICAgICAgICAgICBpZihbXCJhc3NldHMuc21hbGxcIiwgXCJhc3NldHMubGFyZ2VcIl0uaW5jbHVkZXMoZS5pZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRDaG9pY2Ugc2V0dGluZz17ZX0gbWFuYWdlcj17dGhpc30gaWQ9e2UuaWR9IGNob2ljZXM9e1t7dmFsdWU6IFwibm9uZVwiLCBsYWJlbDogXCJObyBhc3NldHNcIn1dLmNvbmNhdCh0aGlzLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpfS8+XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJVbmtub3duIGNob2ljZS5cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICB9XHJcbn1cclxuY29uc3QgUlBDUHJvcHMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiQXBwbGljYXRpb24gSURcIixcclxuICAgICAgICBpZDogXCJhcHBsaWNhdGlvbl9pZFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiNzExNDE2OTU3NzE4NzU3NDE4XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTmFtZVwiLFxyXG4gICAgICAgIGlkOiBcIm5hbWVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJEZXRhaWxzXCIsXHJcbiAgICAgICAgaWQ6IFwiZGV0YWlsc1wiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkJyb3dzaW5nIERpc2NvcmRcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTdGF0ZVwiLFxyXG4gICAgICAgIGlkOiBcInN0YXRlXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTGlnaHRjb3JkIENsaWVudFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlRpbWVzdGFtcCBTdGFydFwiLFxyXG4gICAgICAgIGlkOiBcInRpbWVzdGFtcHMuc3RhcnRcIixcclxuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxyXG4gICAgICAgIGdldCBwbGFjZWhvbGRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTGFyZ2VBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5sYXJnZVwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiU21hbGxBc3NldFwiLFxyXG4gICAgICAgIGlkOiBcImFzc2V0cy5zbWFsbFwiLFxyXG4gICAgICAgIHR5cGU6IFwiY2hvaWNlXCJcclxuICAgIH0sXHJcbl1cclxuXHJcbmxldCBpbnB1dFRleHRNb2R1bGVzXHJcbmNsYXNzIElucHV0VGV4dCBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICBpZihpbnB1dFRleHRNb2R1bGVzICYmIGlucHV0VGV4dE1vZHVsZXNbMF0pcmV0dXJuIGlucHV0VGV4dE1vZHVsZXNcclxuICAgICAgICByZXR1cm4gaW5wdXRUZXh0TW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXQgPSA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuVGV4dElucHV0IHBsYWNlaG9sZGVyPXtzZXR0aW5nLnBsYWNlaG9sZGVyfSBuYW1lPXtzZXR0aW5nLmlkfSB2YWx1ZT17dGhpcy5zdGF0ZS5kYXRhfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgICAgICBpbnB1dE1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTIsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAge3RoaXMuaW5wdXR9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgSW5wdXROdW1iZXJNb2R1bGVzXHJcbmNsYXNzIElucHV0TnVtYmVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBJbnB1dE51bWJlck1vZHVsZXMgfHwgKElucHV0TnVtYmVyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuaW5wdXRNaW5pKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTE2ICYmIGUuc2l6ZTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JUcmFuc3BhcmVudClbMF0sXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IHR5cGU9XCJudW1iZXJcIiBvbkNoYW5nZT17KHZhbHVlLCBuYW1lLCBpbnB1dCkgPT4ge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgXCJcIilcclxuICAgICAgICAgICAgaWYodmFsdWUgPT0gdGhpcy5zdGF0ZS5kYXRhKXtcclxuICAgICAgICAgICAgICAgIGlucHV0LnNldFZhbHVlKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdGhpcy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfX0gdHlwZT1cInRleHRcIi8+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cclxuICAgICAgICAgICAgICAgIHtzZXR0aW5nLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIiA/IFxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmNsaXBib2FyZC5jb3B5KERhdGUubm93KCkrXCJcIilcclxuICAgICAgICAgICAgICAgIH19IGNvbG9yPVwiYnJhbmRcIj5Db3B5IGN1cnJlbnQgdGltZXN0YW1wPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj4gOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IElucHV0Q2hvaWNlTW9kdWxlc1xyXG5jbGFzcyBJbnB1dENob2ljZSBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gPyBcImFzc2V0LVwiK3RoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdIDogXCJub25lXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLnVwZGF0ZVdoZW5GZXRjaGVkKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoZGF0YSl7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gZGF0YS52YWx1ZVxyXG5cclxuICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIub25DaGFuZ2UodGhpcywgdmFsdWUgPT09IFwibm9uZVwiID8gbnVsbCA6IHZhbHVlLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUaW1pbmcgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEgPT09IFwibm9uZVwiID8gbnVsbCA6IHRoaXMuc3RhdGUuZGF0YS5yZXBsYWNlKFwiYXNzZXQtXCIsIFwiXCIpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfSwgNTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gSW5wdXRDaG9pY2VNb2R1bGVzIHx8IChJbnB1dENob2ljZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBzZXR0aW5nID0gdGhpcy5wcm9wcy5zZXR0aW5nXHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIHJvd01vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUyLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICBcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5hc3NldHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiYXNzZXQtXCIrZS5pZCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIG9wdGlvbnMudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgbGFiZWw6IFwiTm8gYXNzZXRzXCJcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPXtyb3dNb2R1bGUucm93K1wiIFwiK21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtyb3dNb2R1bGUuaXRlbX0gJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH1gfT5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAge3NldHRpbmcudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkRyb3Bkb3duIHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IC8+XHJcbiAgICAgICAgICAgICAgICB7Lyo8U2VsZWN0IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9IG9wdGlvbnM9e29wdGlvbnN9Lz4qL31cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBEaXZpZGVyTW9kdWxlcyA9IFtdXHJcbmNsYXNzIERpdmlkZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIERpdmlkZXJNb2R1bGVzJiZEaXZpZGVyTW9kdWxlc1swXSA/IERpdmlkZXJNb2R1bGVzIDogKERpdmlkZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kaXZpZGVyICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXJEZWZhdWx0KVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZGl2aWRlcixcclxuICAgICAgICAgICAgZGl2aWRlckRlZmF1bHRcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXtgJHtkaXZpZGVyLmRpdmlkZXJ9ICR7ZGl2aWRlckRlZmF1bHQuZGl2aWRlckRlZmF1bHR9YH0+PC9kaXY+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIERpc2NvcmRCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHJvd01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnJlbW92ZUtleWJpbmQpWzBdXHJcbiAgICAgICAgbGV0IG1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30gY29sb3I9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBScGNQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzID0ge30pe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogXCJwcm9maWxlXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJzID0gW11cclxuXHJcbiAgICAgICAgdGhpcy5wcm9wcy5zZXR0aW5ncy5wcmV2aWV3ID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRhYih0YWIpe1xyXG4gICAgICAgIGxldCBhbmNpZW50VGFiID0gdGhpcy5zdGF0ZS5hY3RpdmVcclxuICAgICAgICBpZihhbmNpZW50VGFiID09PSB0YWIucHJvcHMuaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBlLnNldEFjdGl2ZShmYWxzZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRhYi5zZXRBY3RpdmUodHJ1ZSlcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiB0YWIucHJvcHMuaWRcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9XCJsYy10YWJXcmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJGdWxsIFByb2ZpbGVcIiBpZD1cInByb2ZpbGVcIi8+XHJcbiAgICAgICAgICAgICAgICA8VGFiIHByZXZpZXc9e3RoaXN9IHRpdGxlPVwiVXNlciBQb3BvdXRcIiBpZD1cInBvcG91dFwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxQcmVzZW5jZUVycm9yQ2F0Y2hlciBwcmV2aWV3PXt0aGlzLnByZXZpZXd9IHN0YXRlPXt0aGlzLnN0YXRlLnJwY30gcHJvcHM9e3twcmV2aWV3OiB0aGlzfX0ga2V5PXt0aGlzLnN0YXRlLmFjdGl2ZX0gLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9ICAgXHJcblxyXG4gICAgaXNBY3RpdmUodGFiKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hY3RpdmUgPT09IHRhYlxyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcmV2aWV3KCl7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUgPT09IFwicHJvZmlsZVwiKXJldHVybiBQcm9maWxlXHJcbiAgICAgICAgcmV0dXJuIFBvcG91dFxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IHByb3BzLnByZXZpZXcuaXNBY3RpdmUocHJvcHMuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLnByZXZpZXcudGFicy5wdXNoKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYGxjLW5hdkl0ZW1gXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5wcmV2aWV3LmNoYW5nZVRhYih0aGlzKVxyXG4gICAgICAgIH19PlxyXG4gICAgICAgICAgICB7dGhpcy5wcm9wcy50aXRsZX1cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBlbXB0eUNsYXNzZXNcclxuY2xhc3MgUHJlc2VuY2VFcnJvckNhdGNoZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29tcG9uZW50RGlkQ2F0Y2goZXJyLCBlcnJJbmZvKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJySW5mbylcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZXJyb3I6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZXJyb3Ipe1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aWV3ID0gbmV3IHRoaXMucHJvcHMucHJldmlldyh0aGlzLnByb3BzLnByb3BzKVxyXG4gICAgICAgICAgICAgICAgcHJldmlldy5zZXRTdGF0ZSh0aGlzLnByb3BzLnN0YXRlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXcucmVuZGVyKClcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGVtcHR5Q2xhc3NlcyA9IGVtcHR5Q2xhc3NlcyB8fCBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmVtcHR5U3RhdGVJbWFnZSAmJiBlLmVtcHR5U3RhdGUpXHJcbiAgICAgICAgICAgIGlmKCFlbXB0eUNsYXNzZXMpe1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIilcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgIG1hcmdpbjogXCIyMHB4XCJcclxuICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9e2BsYy10YWItYm94LXNoYWRvdyAke2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUltYWdlfSBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IFwiMjBweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZUhlYWRlcn0+QW4gZXJyb3Igb2NjdXJlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy4gSm9pbiBvdXIgwq1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3NOYW1lPXtgJHtCRFYyLmFuY2hvckNsYXNzZXMuYW5jaG9yfSAke0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWB9IHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5qb2luTEMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgc2VydmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgwq0gZm9yIGhlbHAuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxubGV0IHBvcG91dE1vZHVsZXNcclxubGV0IFVzZXJQb3BvdXRDb21wb25lbnRcclxubGV0IFBvcG91dFByb3BzXHJcbmNsYXNzIFBvcG91dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwb3BvdXRNb2R1bGVzIHx8IChwb3BvdXRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoIVVzZXJQb3BvdXQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0IGNvbXBvbmVudC5gKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQb3BvdXQuZGVmYXVsdCh7dXNlcklkOiB1c2VyLmlkLCBndWlsZElkOiBudWxsLCBjaGFubmVsSWQ6IG51bGwsIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWV9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IHJlbmRlcjEudHlwZS5yZW5kZXIoUG9wb3V0UHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSBuZXcgcmVuZGVyMi50eXBlKHJlbmRlcjIucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQgPSByZW5kZXIzLnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQb3BvdXRDb21wb25lbnQpdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kIHRoZSBVc2VyUG9wb3V0Q29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQb3BvdXRQcm9wcyA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlci5pZCwgZ3VpbGRJZDogbnVsbCwgY2hhbm5lbElkOiBudWxsLCBkaXNhYmxlVXNlclByb2ZpbGVMaW5rOiB0cnVlfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgc3RvcCBwcm9wYWdhdGlvbiBzaGl0LlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IDxkaXYgey4uLndpbmRvdy5MaWdodGNvcmQuQXBpLl8uZXhjbHVkZVByb3BlcnRpZXMocG9wb3V0LnByb3BzLCBbXCJvbkNsaWNrXCIsIFwib25Db250ZXh0TWVudVwiXSl9IC8+XHJcblxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxjLXVzZXJQb3BvdXQgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge2NvbnRhaW5lcn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHByb2ZpbGVNb2R1bGVzXHJcbmxldCBVc2VyUHJvZmlsZUNvbXBvbmVudFxyXG5sZXQgUHJvZmlsZVByb3BzXHJcbmxldCBjb25uZWN0ZWRQcm9maWxlU3RvcmVcclxuY2xhc3MgUHJvZmlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBwcm9maWxlTW9kdWxlcyB8fCAocHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclByb2ZpbGVcIiksXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUHJvZmlsZS5kZWZhdWx0KHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHVzZXJcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29ubmVjdGVkUHJvZmlsZVN0b3JlID0gcmVuZGVyMS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjIgPSBuZXcgcmVuZGVyMS50eXBlKHJlbmRlcjEucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjMgPSByZW5kZXIyLnR5cGUucmVuZGVyKHJlbmRlcjIucHJvcHMsIG51bGwpXHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcjQgPSBuZXcgcmVuZGVyMy50eXBlKHJlbmRlcjMucHJvcHMpLnJlbmRlcigpXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlQ29tcG9uZW50ID0gcmVuZGVyNC50eXBlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFVc2VyUHJvZmlsZUNvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQcm9maWxlQ29tcG9uZW50IGNvbXBvbmVudC5gKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBQcm9maWxlUHJvcHMgPSBuZXcgY29ubmVjdGVkUHJvZmlsZVN0b3JlKHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcixcclxuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHt9XHJcbiAgICAgICAgfSkucmVuZGVyKCkucHJvcHNcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gbmV3IFVzZXJQcm9maWxlQ29tcG9uZW50KE9iamVjdC5hc3NpZ24oe30sIFByb2ZpbGVQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHlcclxuICAgICAgICB9KSkucmVuZGVyKCkucHJvcHMuY2hpbGRyZW4gLy8gYnlwYXNzIHRyYWNraW5nXHJcblxyXG4gICAgICAgIHByb2ZpbGUucHJvcHMuc3R5bGUgPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcImF1dG9cIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiIGxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgIHtwcm9maWxlfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qXHJcbmxldCBwb3BvdXRNb2R1bGVcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHsgLy8gVE9ETzogUHJvYmFibHkgdXNlIGludGVybmFsIENvbXBvbmVudHMgaW5zdGVhZCBvZiBtYWtpbmcgaXQgZnJvbSBzY3JhdGNoLlxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gcG9wb3V0TW9kdWxlIHx8IChwb3BvdXRNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ib3QpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hY3Rpdml0eVVzZXJQb3BvdXQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tdXRlZCAmJiBlLndyYXBwZXIgJiYgZS5iYXNlKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudGhlbWVHaG9zdEhhaXJsaW5lQ2hhbm5lbHMpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBybyAmJiBlLmlubGluZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcylbMF0uZGVmYXVsdC5NZXNzYWdlcyxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb290TW9kdWxlMSxcclxuICAgICAgICAgICAgZmxleE1vZHVsZTEsXHJcbiAgICAgICAgICAgIHN0eWxpbmdNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHByb3RpcE1vZHVsZTEsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlMSxcclxuICAgICAgICAgICAgTWVzc2FnZXMsXHJcbiAgICAgICAgICAgIGF2YXRhck1vZHVsZTEsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZTEuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VVc2VyUG9wb3V0fSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrVXNlclBvcG91dCA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVVzZXJQb3BvdXR9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VyUG9wb3V0fSByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyUGxheWluZ30+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtzdHlsaW5nTW9kdWxlMS52ZXJ0aWNhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5Q2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLmFsaWduQ2VudGVyfSAke3N0eWxpbmdNb2R1bGUxLm5vV3JhcH0gJHtyb290TW9kdWxlMS5oZWFkZXJUb3B9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFyV3JhcHBlck5vcm1hbH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YXZhdGFyTW9kdWxlMX0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBjbGFzcz17cm9vdE1vZHVsZTEuYXZhdGFySGludH0gdmlld0JveD1cIjAgMCA4MCA4MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiBtYXNrPVwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTgwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5hdmF0YXJIaW50SW5uZXJ9PntNZXNzYWdlcy5WSUVXX1BST0ZJTEV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJUZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfWB9IHN0eWxlPXt7ZmxleDogXCIxIDEgYXV0b1wifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnTm9OaWNrbmFtZX0gJHtuYW1lVGFnTW9kdWxlMS5uYW1lVGFnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YCR7bmFtZVRhZ01vZHVsZTEudXNlcm5hbWV9ICR7cm9vdE1vZHVsZTEuaGVhZGVyVGFnVXNlcm5hbWVOb05pY2tuYW1lfWB9Pnt1c2VyLnVzZXJuYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+I3t1c2VyLmRpc2NyaW1pbmF0b3J9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVVzZXJQb3BvdXR9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmhlYWRlclRleHROb3JtYWx9ICR7dGV4dE1vZHVsZTEuYmFzZX0gJHtzaXplTW9kdWxlMS5zaXplMTJ9YH0+e01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmJvZHlOb3JtYWx9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2ltYWdlc31cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzVXNlclBvcG91dCA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5uYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eU5hbWV9PntkYXRhLm5hbWV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhLmRldGFpbHMpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnN0YXRlfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtkYXRhLnN0YXRlfT57ZGF0YS5zdGF0ZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZUNvbXBvbmVudCA9IHRpbWVzdGFtcFJlbmRlcihUaW1lc3RhbXAsIE1lc3NhZ2VzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEudGltZXN0YW1wfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSgpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Jvb3RNb2R1bGUxLmJvZHl9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyRmFkZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9ICR7cm9vdE1vZHVsZTEuYm9keUlubmVyfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5VGl0bGV9PntNZXNzYWdlcy5OT1RFfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtub3RlTW9kdWxlMS5ub3RlfSAke3Jvb3RNb2R1bGUxLm5vdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcGxhY2Vob2xkZXI9e01lc3NhZ2VzLk5PVEVfUExBQ0VIT0xERVJ9IG1heGxlbmd0aD1cIjI1NlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjM2cHhcIn19IGRpc2FibGVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5mb290ZXJ9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb3RpcH0gJHtwcm90aXBNb2R1bGUxLmlubGluZX1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHtwcm90aXBNb2R1bGUxLnByb30gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfSBzdHlsZT17e2NvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCJ9fT57TWVzc2FnZXMuUElOTkVEX01FU1NBR0VTX1BST19USVB9PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Y29sb3JNb2R1bGUxLmNvbG9yU3RhbmRhcmR9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fSAke3Byb3RpcE1vZHVsZTEudGlwfWB9PntNZXNzYWdlcy5DT05URVhUX01FTlVfSElOVH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBTdGF0dXNNb2R1bGVzXHJcbmNsYXNzIFN0YXR1cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBTdGF0dXNNb2R1bGVzIHx8IChTdGF0dXNNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRQcmVzZW5jZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGdldFByZXNlbmNlLFxyXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBnZXRQcmVzZW5jZS5kZWZhdWx0LmdldFByZXNlbmNlKCkuc3RhdHVzXHJcbiAgICAgICAgaWYoc3RhdHVzID09PSBcImludmlzaWJsZVwiKXN0YXR1cyA9IFwib2ZmbGluZVwiXHJcbiAgICAgICAgcmV0dXJuIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHg9XCI2MFwiIHk9XCI2MFwiIGZpbGw9XCIjZmZmZmZmXCIgbWFzaz17YHVybCgjc3ZnLW1hc2stc3RhdHVzLSR7c3RhdHVzfSlgfSBjbGFzc05hbWU9e3BvaW50ZXJFdmVudHN9PjwvcmVjdD5cclxuICAgIH1cclxufVxyXG5cclxubGV0IHRpbWVzdGFtcENsYXNzID0gXCJcIlxyXG5cclxubGV0IFByb2ZpbGVNb2R1bGVzXHJcbmNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgeyAvLyBUT0RPOiBQcm9iYWJseSB1c2UgaW50ZXJuYWwgQ29tcG9uZW50cyBpbnN0ZWFkIG9mIG1ha2luZyBpdCBmcm9tIHNjcmF0Y2guXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBQcm9maWxlTW9kdWxlcyB8fCAoUHJvZmlsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsZXggJiYgZS5faG9yaXpvbnRhbClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnRpY2FsICYmIGUuYWxpZ25TdHJldGNoICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWRCdG4pWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS50b3BTZWN0aW9uU3RyZWFtaW5nKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmJvdClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmFjdGl2aXR5UHJvZmlsZSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm11dGVkICYmIGUud3JhcHBlciAmJiBlLmJhc2UpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckZhZGUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub3RlICYmIE9iamVjdC5rZXlzKGUpLmxlbmd0aCA9PT0gMSlbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzKVswXS5kZWZhdWx0Lk1lc3NhZ2VzXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgYXZhdGFyVVJMID0gdXNlci5hdmF0YXJVUkxcclxuICAgICAgICBpZih1c2VyLmF2YXRhciAmJiB1c2VyLmF2YXRhci5zdGFydHNXaXRoKFwiYV9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSB1c2VyLmdldEF2YXRhclVSTChcImdpZlwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBhdmF0YXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBuYW1lVGFnTW9kdWxlMSxcclxuICAgICAgICAgICAgYWN0aXZpdHlNb2R1bGUxLFxyXG4gICAgICAgICAgICB0ZXh0TW9kdWxlMSxcclxuICAgICAgICAgICAgc2l6ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIHNjcm9sbGVyTW9kdWxlMSxcclxuICAgICAgICAgICAgbm90ZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIE1lc3NhZ2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIHRpbWVzdGFtcENsYXNzID0gdGltZXN0YW1wQ2xhc3MgfHwgYWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcFxyXG5cclxuICAgICAgICBsZXQgaW1hZ2VzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIWRhdGFbXCJhc3NldHMubGFyZ2VcIl0pcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdXHJcbiAgICAgICAgICAgIGlmKGRhdGFbXCJhc3NldHMubGFyZ2VcIl0pe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goPGltZyBhbHQ9XCJcIiBzcmM9e2BodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9hcHAtYXNzZXRzLyR7ZGF0YS5hcHBsaWNhdGlvbl9pZH0vJHtkYXRhW1wiYXNzZXRzLmxhcmdlXCJdfS5wbmdgfSBjbGFzcz17YCR7YWN0aXZpdHlNb2R1bGUxLmFzc2V0c0xhcmdlSW1hZ2VQcm9maWxlfSAke2RhdGFbXCJhc3NldHMuc21hbGxcIl0gPyBhY3Rpdml0eU1vZHVsZTEuYXNzZXRzTGFyZ2VNYXNrUHJvZmlsZSA6IFwiXCJ9YH0gLz4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoZGF0YVtcImFzc2V0cy5zbWFsbFwiXSl7XHJcbiAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCg8aW1nIGFsdD1cIlwiIHNyYz17YGh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2FwcC1hc3NldHMvJHtkYXRhLmFwcGxpY2F0aW9uX2lkfS8ke2RhdGFbXCJhc3NldHMuc21hbGxcIl19LnBuZ2B9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzU21hbGxJbWFnZVByb2ZpbGV9IC8+KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpbWFnZXMubGVuZ3RoKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYXNzZXRzfT5cclxuICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH0pKClcclxuXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7c3R5bGluZ01vZHVsZTEudmVydGljYWx9ICR7c3R5bGluZ01vZHVsZTEuanVzdGlmeVN0YXJ0fSAke3N0eWxpbmdNb2R1bGUxLmFsaWduU3RyZXRjaH0gJHtzdHlsaW5nTW9kdWxlMS5ub1dyYXB9ICR7cm9vdE1vZHVsZTEucm9vdH1gfSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnRvcFNlY3Rpb25QbGF5aW5nfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz17cm9vdE1vZHVsZTEuaGVhZGVyfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLmF2YXRhcn0gJHthdmF0YXJNb2R1bGUxLndyYXBwZXJ9YH0gcm9sZT1cImltZ1wiIHN0eWxlPXt7d2lkdGg6IFwiODBweFwiLCBoZWlnaHQ6IFwiODBweFwifX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjkyXCIgaGVpZ2h0PVwiODBcIiB2aWV3Qm94PVwiMCAwIDkyIDgwXCIgY2xhc3M9e2Ake2F2YXRhck1vZHVsZTEubWFza30gJHthdmF0YXJNb2R1bGUxLnN2Z31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIG1hc2s9XCJ1cmwoI3N2Zy1tYXNrLWF2YXRhci1zdGF0dXMtcm91bmQtODApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz17YXZhdGFyVVJMfSBhbHQ9XCIgXCIgY2xhc3M9e2F2YXRhck1vZHVsZTEuYXZhdGFyfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGF0dXMgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEuaGVhZGVySW5mb31gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtgJHtyb290TW9kdWxlMS5uYW1lVGFnfSAke25hbWVUYWdNb2R1bGUxLm5hbWVUYWd9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtgJHtyb290TW9kdWxlMS51c2VybmFtZX0gJHtyb290TW9kdWxlMS51c2VybmFtZX1gfT57dXNlci51c2VybmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXtyb290TW9kdWxlMS5kaXNjcmltaW5hdG9yfT4je3VzZXIuZGlzY3JpbWluYXRvcn08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7ZmxleE1vZHVsZTEuZmxleH0gJHtmbGV4TW9kdWxlMS5ob3Jpem9udGFsfSAke3N0eWxpbmdNb2R1bGUxLmp1c3RpZnlTdGFydH0gJHtzdHlsaW5nTW9kdWxlMS5hbGlnblN0cmV0Y2h9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZXN9YH0gc3R5bGU9e3tmbGV4OiBcIjEgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlcyAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5oZWFkZXJGaWxsfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5hY3Rpdml0eVByb2ZpbGV9ICR7cm9vdE1vZHVsZTEuYWN0aXZpdHl9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPXtgJHthY3Rpdml0eU1vZHVsZTEuaGVhZGVyVGV4dE5vcm1hbH0gJHt0ZXh0TW9kdWxlMS5iYXNlfSAke3NpemVNb2R1bGUxLnNpemUxMn1gfT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfSEVBREVSX1BMQVlJTkd9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuYm9keU5vcm1hbH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpbWFnZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2ltYWdlcyA/IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50SW1hZ2VzUHJvZmlsZSA6IGFjdGl2aXR5TW9kdWxlMS5jb250ZW50Tm9JbWFnZXNVc2VyUG9wb3V0fSBzdHlsZT17e2ZsZXg6IFwiMSAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRhdGEubmFtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8aDMgY2xhc3M9e2Ake2FjdGl2aXR5TW9kdWxlMS5uYW1lTm9ybWFsfSAke3RleHRNb2R1bGUxLmJhc2V9ICR7c2l6ZU1vZHVsZTEuc2l6ZTE0fWB9IHRpdGxlPXtkYXRhLm5hbWV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLmFjdGl2aXR5TmFtZX0+e2RhdGEubmFtZX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5kZXRhaWxzKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYgdGl0bGU9e2RhdGEudGl0bGV9IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuZGV0YWlsc30+e2RhdGEuZGV0YWlsc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZGF0YS5zdGF0ZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzPXthY3Rpdml0eU1vZHVsZTEuc3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17ZGF0YS5zdGF0ZX0+e2RhdGEuc3RhdGV9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkYXRhW1widGltZXN0YW1wcy5zdGFydFwiXSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lQ29tcG9uZW50ID0gdGltZXN0YW1wUmVuZGVyKFRpbWVzdGFtcCwgTWVzc2FnZXMpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17YWN0aXZpdHlNb2R1bGUxLnRpbWVzdGFtcH0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KHRpbWVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRhdGFbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5ib2R5fT5cclxuXHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGV9YH0+XHJcblx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJ9PlxyXG5cdFx0XHRcdFx0XHRcdCAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS51c2VySW5mb1NlY3Rpb259PlxyXG5cdFx0XHRcdFx0XHRcdFx0ICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbkhlYWRlcn0+e01lc3NhZ2VzLk5PVEV9PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPGRpdiBjbGFzcz17YCR7cm9vdE1vZHVsZTEubm90ZX0gJHtub3RlTW9kdWxlMS5ub3RlfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPXtNZXNzYWdlcy5OT1RFX1BMQUNFSE9MREVSfSBtYXhsZW5ndGg9XCIyNTZcIiBhdXRvY29ycmVjdD1cIm9mZlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e0JETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IHN0eWxlPXt7aGVpZ2h0OiBcIjQwcHhcIn19IGRpc2FibGVkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XHJcblx0XHRcdFx0XHRcdFx0XHQgICAgPC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0ICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb25uZWN0ZWRBY2NvdW50cyAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbm5lY3RlZEFjY291bnRzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBhY2NvdW50cyA9IFtdXHJcbiAgICAgICAgbGV0IHJvb3RNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF1cclxuICAgICAgICBsZXQgQWNjb3VudE1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRBY2NvdW50cylbMF0uZGVmYXVsdFxyXG5cclxuICAgICAgICBsZXQgYWNjcyA9IEFjY291bnRNb2R1bGUxLmdldEFjY291bnRzKCkuZmlsdGVyKGUgPT4gZS52aXNpYmlsaXR5ID09PSAxKVxyXG4gICAgICAgIGZvcihsZXQgYWNjIG9mIGFjY3Mpe1xyXG4gICAgICAgICAgICBhY2NvdW50cy5wdXNoKDxDb25uZWN0ZWRBY2NvdW50IGFjYz17YWNjfSAvPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGFjY291bnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLnVzZXJJbmZvU2VjdGlvbn0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPXtyb290TW9kdWxlMS5jb25uZWN0ZWRBY2NvdW50c30+XHJcbiAgICAgICAgICAgICAgICAgICAge2FjY291bnRzfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgQ29ubmVjdGVkQWNjb3VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlMSxcclxuICAgICAgICAgICAgc3R5bGluZ01vZHVsZTEsXHJcbiAgICAgICAgICAgIHJvb3RNb2R1bGUxLFxyXG4gICAgICAgICAgICBmbG93ZXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBhbmNob3JNb2R1bGUxLFxyXG4gICAgICAgICAgICBTb2NpYWxDb25zdGFudHNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4ICYmIGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS52ZXJ0aWNhbCAmJiBlLmFsaWduU3RyZXRjaCAmJiAhZS5zdHJlYW1lck1vZGVFbmFibGVkQnRuKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudG9wU2VjdGlvblN0cmVhbWluZylbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmZsb3dlclN0YXJDb250YWluZXIpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5hbmNob3IpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXQgJiYgZS5kZWZhdWx0Lm1hcClbMF0uZGVmYXVsdFxyXG4gICAgICAgIF1cclxuICAgICAgICBsZXQgYWNjID0gdGhpcy5wcm9wcy5hY2NcclxuICAgICAgICBsZXQgY29uc3RhbnRzU29jaWFsID0gU29jaWFsQ29uc3RhbnRzLmdldChhY2MudHlwZSlcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3M9e2Ake2ZsZXhNb2R1bGUxLmZsZXh9ICR7ZmxleE1vZHVsZTEuaG9yaXpvbnRhbH0gJHtzdHlsaW5nTW9kdWxlMS5qdXN0aWZ5U3RhcnR9ICR7c3R5bGluZ01vZHVsZTEuYWxpZ25DZW50ZXJ9ICR7c3R5bGluZ01vZHVsZTEubm9XcmFwfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnR9YH0gc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgPGltZyBhbHQ9e2BMb2dvICR7Y29uc3RhbnRzU29jaWFsLm5hbWV9YH0gY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRJY29ufSBzcmM9e2NvbnN0YW50c1NvY2lhbC5pY29uLmNvbG9yIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLndoaXRlIHx8IGNvbnN0YW50c1NvY2lhbC5pY29uLmdyZXl9IC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9e3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnROYW1lSW5uZXJ9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE5hbWV9PnthY2MubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIHthY2MudmVyaWZpZWQgPyAoPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17YCR7Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyQ29udGFpbmVyfSAke3Jvb3RNb2R1bGUxLmNvbm5lY3RlZEFjY291bnRWZXJpZmllZEljb259YH0gc3R5bGU9e3t3aWR0aDogXCIxNnB4XCIsIGhlaWdodDogXCIxNnB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17Zmxvd2VyTW9kdWxlMS5mbG93ZXJTdGFyfSB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE1LjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNGY1NDVjXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz17Zmxvd2VyTW9kdWxlMS5jaGlsZENvbnRhaW5lcn0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTUuMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwiIGZpbGw9XCIjZmZmZmZmXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPikgOiBudWxsfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9e2Ake2FuY2hvck1vZHVsZTEuYW5jaG9yfSAke2FuY2hvck1vZHVsZTEuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gfSByZWw9XCJub3JlZmVycmVyIG5vb3BlbmVyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz17cm9vdE1vZHVsZTEuY29ubmVjdGVkQWNjb3VudE9wZW5JY29ufSB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTAgNVYzSDUuMzc1QzQuMDY1MTkgMyAzIDQuMDY1MTkgMyA1LjM3NVYxOC42MjVDMyAxOS45MzYgNC4wNjUxOSAyMSA1LjM3NSAyMUgxOC42MjVDMTkuOTM2IDIxIDIxIDE5LjkzNiAyMSAxOC42MjVWMTRIMTlWMTlINVY1SDEwWlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0yMSAyLjk5OTAySDE0VjQuOTk5MDJIMTcuNTg2TDkuMjkyOTcgMTMuMjkyTDEwLjcwNyAxNC43MDZMMTkgNi40MTMwMlY5Ljk5OTAySDIxVjIuOTk5MDJaXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgdXNlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBsZXQgcm9vdE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcbiAgICAgICAgbGV0IFVzZXJGbGFncyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLlVzZXJGbGFncylbMF0uVXNlckZsYWdzXHJcbiAgICAgICAgbGV0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgbGV0IHNlcmlhbGl6ZWQgPSBbXVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIGluIFVzZXJGbGFncyl7XHJcbiAgICAgICAgICAgIGlmKHVzZXIuaGFzRmxhZyhVc2VyRmxhZ3NbZmxhZ05hbWVdKSlzZXJpYWxpemVkLnB1c2goZmxhZ05hbWUpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IobGV0IGZsYWdOYW1lIG9mIHNlcmlhbGl6ZWQpe1xyXG4gICAgICAgICAgICBsZXQgc2VhcmNoYWJsZSA9IGBwcm9maWxlQmFkZ2Uke2ZsYWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCBcIiBcIikuc3BsaXQoXCIgXCIpLm1hcChlID0+IGVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKS5qb2luKFwiXCIpfWBcclxuICAgICAgICAgICAgc2VhcmNoYWJsZSA9IHNlYXJjaGFibGUucmVwbGFjZShcIkh5cGVzcXVhZE9ubGluZVwiLCBcIkh5cGVTcXVhZE9ubGluZVwiKVxyXG4gICAgICAgICAgICBpZighcm9vdE1vZHVsZVtzZWFyY2hhYmxlXSljb250aW51ZVxyXG4gICAgICAgICAgICBiYWRnZXMucHVzaCg8QmFkZ2UgbmFtZT17c2VhcmNoYWJsZX0vPilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHVzZXIuaGFzUHJlbWl1bVN1YnNjcmlwdGlvbil7XHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKDxCYWRnZSBuYW1lPVwicHJvZmlsZUJhZGdlUHJlbWl1bVwiIC8+KVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIEJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCByb290TW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvcFNlY3Rpb25TdHJlYW1pbmcpWzBdXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzcz17cm9vdE1vZHVsZTEucHJvZmlsZUJhZGdlV3JhcHBlcn0+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9e2Ake3Jvb3RNb2R1bGUxLnByb2ZpbGVCYWRnZX0gJHtyb290TW9kdWxlMVt0aGlzLnByb3BzLm5hbWVdfWB9PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRpbWVzdGFtcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RpbWVzdGFtcENsYXNzfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSovIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0xheWVyIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5rZXl1cExpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAga2V5dXBMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgaWYgKGUud2hpY2ggPT09IDI3KSB7XHJcbiAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLnJlZnMucm9vdC5wYXJlbnROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCB0aGlzLmtleXVwTGlzdGVuZXIpO1xyXG5cclxuICAgICAgICBjb25zdCB0aGlzTm9kZSA9IERPTS5xdWVyeShgIyR7dGhpcy5wcm9wcy5pZH1gKTtcclxuICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgkezEuMSAtIDAuMSAqIHByb2dyZXNzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIHRoaXNOb2RlLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogKDEgLSBwcm9ncmVzcyl9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IDEgLSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc05vZGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCIucHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LnJlbW92ZShcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqIHByb2dyZXNzICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbE1vdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxheWVyID0gRE9NLnF1ZXJ5KFwiW2NsYXNzKj1cXFwibGF5ZXItXFxcIl1cIik7XHJcbiAgICAgICAgbGF5ZXIuY2xhc3NMaXN0LmFkZChcInB1YmxpY1NlcnZlcnNPcGVuXCIpO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MC4wNyAqICgxIC0gcHJvZ3Jlc3MpICsgMC45M30pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwibGF5ZXIgYmQtbGF5ZXIgXCIrQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXIgJiYgZS5hbmltYXRpbmcpWzBdLmxheWVyLCBpZDogdGhpcy5wcm9wcy5pZCwgcmVmOiBcInJvb3RcIiwgc3R5bGU6IHtvcGFjaXR5OiAwLCB0cmFuc2Zvcm06IFwic2NhbGUoMS4xKSB0cmFuc2xhdGVaKDBweClcIn19LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgVG9vbHMgZnJvbSBcIi4uL3Rvb2xzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBUYWJCYXJTZXBhcmF0b3IgZnJvbSBcIi4uL3RhYkJhclNlcGFyYXRvclwiO1xyXG5pbXBvcnQgVGFiQmFySGVhZGVyIGZyb20gXCIuLi90YWJCYXJIZWFkZXJcIjtcclxuaW1wb3J0IFRhYkJhckl0ZW0gZnJvbSBcIi4uL3RhYkJhckl0ZW1cIjtcclxuXHJcbmltcG9ydCBTZXJ2ZXJDYXJkIGZyb20gXCIuL3NlcnZlckNhcmRcIjtcclxuaW1wb3J0IFNpZGViYXJWaWV3IGZyb20gXCIuL3NpZGViYXJWaWV3XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHVibGljU2VydmVycyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoYW5nZUNhdGVnb3J5ID0gdGhpcy5jaGFuZ2VDYXRlZ29yeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNlYXJjaEtleURvd24gPSB0aGlzLnNlYXJjaEtleURvd24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbiA9IHRoaXMuY2hlY2tDb25uZWN0aW9uLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5qb2luID0gdGhpcy5qb2luLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0ID0gdGhpcy5jb25uZWN0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuR3VpbGRTdG9yZSA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRHdWlsZHNcIl0pO1xyXG4gICAgICAgIHRoaXMuQXZhdGFyRGVmYXVsdHMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiXSk7XHJcbiAgICAgICAgdGhpcy5JbnZpdGVBY3Rpb25zID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImFjY2VwdEludml0ZVwiXSk7XHJcbiAgICAgICAgdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldFNvcnRlZEd1aWxkc1wiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IC0xLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlcnZlcnM6IFtdLFxyXG4gICAgICAgICAgICBuZXh0OiBudWxsLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogMCxcclxuICAgICAgICAgICAgICAgIHVzZXI6IG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMucHJvcHMucm9vdElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHF1ZXJ5LCBjbGVhcikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGZldGNoKGAke3NlbGYuZW5kUG9pbnR9JHtxdWVyeX0ke3F1ZXJ5ID8gXCImc2NoZW1hPW5ld1wiIDogXCI/c2NoZW1hPW5ld1wifWAsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgYXdhaXQgcmVzLnRleHQoKVxyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gZGF0YS5yZXN1bHRzLnJlZHVjZSgoYXJyLCBzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlcnZlci5qb2luZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAvLyBhcnIucHVzaCg8U2VydmVyQ2FyZCBzZXJ2ZXI9e3NlcnZlcn0gam9pbj17c2VsZi5qb2lufS8+KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY2xlYXIpIHtcclxuICAgICAgICAgICAgICAgIHNlcnZlcnMgPSBzZWxmLnN0YXRlLnNlcnZlcnMuY29uY2F0KHNlcnZlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9zZXJ2ZXJzLnVuc2hpZnQoc2VsZi5iZFNlcnZlcik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBlbmQgPSBkYXRhLnNpemUgKyBkYXRhLmZyb207XHJcbiAgICAgICAgICAgIGRhdGEubmV4dCA9IGA/ZnJvbT0ke2VuZH1gO1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS50ZXJtKSBkYXRhLm5leHQgKz0gYCZ0ZXJtPSR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkpIGRhdGEubmV4dCArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgICAgICBpZiAoZW5kID49IGRhdGEudG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEudG90YWw7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm5leHQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBgU2hvd2luZyAxLSR7ZW5kfSBvZiAke2RhdGEudG90YWx9IHJlc3VsdHMgaW4gJHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIHRpdGxlICs9IGAgZm9yICR7c2VsZi5zdGF0ZS50ZXJtfWA7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgc2VydmVyczogc2VydmVycyxcclxuICAgICAgICAgICAgICAgIG5leHQ6IGRhdGEubmV4dFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhzZWxmKTtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVmcy5zYnYucmVmcy5jb250ZW50U2Nyb2xsZXIuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiRmFpbGVkIHRvIGxvYWQgc2VydmVycy4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlsc1wiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgam9pbihzZXJ2ZXJDYXJkKSB7XHJcbiAgICAgICAgaWYgKHNlcnZlckNhcmQucHJvcHMucGlubmVkKSByZXR1cm4gdGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZShzZXJ2ZXJDYXJkLnByb3BzLmludml0ZV9jb2RlKTtcclxuXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7dGhpcy5qb2luRW5kUG9pbnR9LyR7c2VydmVyQ2FyZC5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcn1gLHtcclxuICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2VydmVyQ2FyZC5zZXRTdGF0ZSh7am9pbmVkOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29ubmVjdCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZi53aW5kb3dPcHRpb25zO1xyXG4gICAgICAgIG9wdGlvbnMueCA9IE1hdGgucm91bmQod2luZG93LnNjcmVlblggKyB3aW5kb3cuaW5uZXJXaWR0aCAvIDIgLSBvcHRpb25zLndpZHRoIC8gMik7XHJcbiAgICAgICAgb3B0aW9ucy55ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWSArIHdpbmRvdy5pbm5lckhlaWdodCAvIDIgLSBvcHRpb25zLmhlaWdodCAvIDIpO1xyXG5cclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cgPSBuZXcgKHdpbmRvdy5yZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLkJyb3dzZXJXaW5kb3cpKG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0P3Njb3Blcz1ndWlsZHMuam9pbiZwcmV2aW91c1VybD1odHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2luZm9cIjtcclxuICAgICAgICBzZWxmLmpvaW5XaW5kb3cud2ViQ29udGVudHMub24oXCJkaWQtbmF2aWdhdGVcIiwgKGV2ZW50LCB1cmwpID0+IHtcclxuICAgICAgICAgICAgaWYgKHVybCAhPSBcImh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiKSByZXR1cm47XHJcbiAgICAgICAgICAgIHNlbGYuam9pbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICBzZWxmLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy5sb2FkVVJMKHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHdpbmRvd09wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiA1NTAsXHJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMjgyYjMwXCIsXHJcbiAgICAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG1heGltaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWluaW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbHdheXNPblRvcDogdHJ1ZSxcclxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB3ZWJQcmVmZXJlbmNlczoge1xyXG4gICAgICAgICAgICAgICAgbm9kZUludGVncmF0aW9uOiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYmRTZXJ2ZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VydmVyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkJldHRlckRpc2NvcmRcIixcclxuICAgICAgICAgICAgb25saW5lOiBcIjc1MDArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiMjAwMDArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgQmV0dGVyRGlzY29yZCBzZXJ2ZXIgZm9yIHN1cHBvcnQgZXRjXCIsXHJcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IFwiODYwMDQ3NDQ5NjY5MTQwNDhcIixcclxuICAgICAgICAgICAgaWNvblVybDogXCJodHRwczovL2Nkbi5kaXNjb3JkYXBwLmNvbS9pY29ucy84NjAwNDc0NDk2NjkxNDA0OC8yOTJlN2Y2YmZmZjJiNzFkZmQxM2U1MDhhODU5YWVkZC53ZWJwXCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjBUbWZvNVpiT1JDUnFiQWRcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIyID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiMzArXCIsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFwiNTArXCIsXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IFtcImNvbW11bml0eVwiLCBcInByb2dyYW1taW5nXCIsIFwic3VwcG9ydFwiXSxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT2ZmaWNpYWwgTGlnaHRjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vYXZhdGFyczMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjU2OTAwNTg/cz0yMDAmdj00XCIsXHJcbiAgICAgICAgICAgIG5hdGl2ZWpvaW46IHRydWUsXHJcbiAgICAgICAgICAgIGludml0ZV9jb2RlOiBcIjdlRmZmMkFcIixcclxuICAgICAgICAgICAgcGlubmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7c2VydmVyOiBzZXJ2ZXIyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlciwgcGlubmVkOiB0cnVlLCBqb2luOiB0aGlzLmpvaW4sIGd1aWxkTGlzdDogZ3VpbGRMaXN0LCBmYWxsYmFjazogZGVmYXVsdExpc3RbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNSldfSlcclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVuZFBvaW50KCkge1xyXG4gICAgICAgIHJldHVybiBcImh0dHBzOi8vc2VhcmNoLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2luRW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qLmRpc2NvcmRzZXJ2ZXJzLmNvbVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0RW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9qb2luLmRpc2NvcmRzZXJ2ZXJzLmNvbS9jb25uZWN0XCI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb2Ase1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogMCxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMixcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBkYXRhXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzZWxmLnNlYXJjaChcIlwiLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhclZpZXcsIHtyZWY6IFwic2J2XCJ9LCB0aGlzLmNvbXBvbmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWRlYmFyOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuc2lkZWJhclxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb250ZW50OiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMuY29udGVudFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0b29sczoge1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwicHRcIiwgcmVmOiBcInRvb2xzXCIsIG9uQ2xpY2s6IHRoaXMuY2xvc2V9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lkZWJhcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJcIiwga2V5OiBcInBzXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyIFNJREVcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCIsIHN0eWxlOiB7Zm9udFNpemU6IFwiMTZweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJQdWJsaWMgU2VydmVyc1wiXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFySGVhZGVyLCB7dGV4dDogXCJDYXRlZ29yaWVzXCJ9KSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlCdXR0b25zLm1hcCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJJdGVtLCB7aWQ6IGluZGV4LCBvbkNsaWNrOiB0aGlzLmNoYW5nZUNhdGVnb3J5LCBrZXk6IGluZGV4LCB0ZXh0OiB2YWx1ZSwgc2VsZWN0ZWQ6IHRoaXMuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gaW5kZXh9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlcixcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VhcmNoSW5wdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLWl0ZW1cIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRleHQtaW5wdXQgZmxleC12ZXJ0aWNhbFwiLCBzdHlsZToge3dpZHRoOiBcIjE3MnB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7cmVmOiBcInNlYXJjaGlucHV0XCIsIG9uS2V5RG93bjogdGhpcy5zZWFyY2hLZXlEb3duLCBvbkNoYW5nZTogKCkgPT4ge30sIHR5cGU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiaW5wdXQgZGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJTZWFyY2guLi5cIiwgbWF4TGVuZ3RoOiBcIjUwXCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hLZXlEb3duKGUpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nIHx8IGUud2hpY2ggIT09IDEzKSByZXR1cm47XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgdGVybTogZS50YXJnZXQudmFsdWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgcXVlcnkgPSBgP3Rlcm09JHtlLnRhcmdldC52YWx1ZX1gO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnkgIT09IDApIHtcclxuICAgICAgICAgICAgcXVlcnkgKz0gYCZjYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2gocXVlcnksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjYXRlZ29yeUJ1dHRvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFsbFwiLCBcIkZQUyBHYW1lc1wiLCBcIk1NTyBHYW1lc1wiLCBcIlN0cmF0ZWd5IEdhbWVzXCIsIFwiTU9CQSBHYW1lc1wiLCBcIlJQRyBHYW1lc1wiLCBcIlRhYmxldG9wIEdhbWVzXCIsIFwiU2FuZGJveCBHYW1lc1wiLCBcIlNpbXVsYXRpb24gR2FtZXNcIiwgXCJNdXNpY1wiLCBcIkNvbW11bml0eVwiLCBcIkxhbmd1YWdlXCIsIFwiUHJvZ3JhbW1pbmdcIiwgXCJPdGhlclwiXTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VDYXRlZ29yeShpZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBzZWxmLnJlZnMuc2VhcmNoaW5wdXQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiBpZCxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGlkID09PSAwKSB7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuc2VhcmNoKGA/Y2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tpZF19YCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRMaXN0ID0gdGhpcy5Tb3J0ZWRHdWlsZFN0b3JlLmdldEZsYXR0ZW5lZEd1aWxkSWRzKCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdExpc3QgPSB0aGlzLkF2YXRhckRlZmF1bHRzLkRFRkFVTFRfQVZBVEFSUztcclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZS5jb25uZWN0aW9uLnN0YXRlID09PSAxKSByZXR1cm4gc2VsZi5ub3RDb25uZWN0ZWQ7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7cmVmOiBcImNvbnRlbnRcIiwga2V5OiBcInBjXCIsIGNsYXNzTmFtZTogY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgXCIrY29sdW1uTW9kdWxlLmNvbnRlbnRDb2x1bW4rXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSksXHJcbiAgICAgICAgICAgIHNlbGYuYmRTZXJ2ZXIsXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5tYXAoKHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXJ2ZXJDYXJkLCB7a2V5OiBzZXJ2ZXIuaWRlbnRpZmllciwgc2VydmVyOiBzZXJ2ZXIsIGpvaW46IHNlbGYuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUubmV4dCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO3NlbGYuc2V0U3RhdGUoe2xvYWRpbmc6IHRydWV9KTsgc2VsZi5zZWFyY2goc2VsZi5zdGF0ZS5uZXh0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLCBzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWFyZ2luVG9wOiBcIjEwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5sb2FkaW5nID8gXCJMb2FkaW5nXCIgOiBcIkxvYWQgTW9yZVwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHNlbGYuc3RhdGUuc2VydmVycy5sZW5ndGggPiAwICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogc2VsZi5zdGF0ZS50aXRsZX0pXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5vdENvbm5lY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvL3JldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwgeyB0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlIH0pO1xyXG4gICAgICAgIGxldCBjb2x1bW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uRGVmYXVsdClbMF1cclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJuY2NcIiwgcmVmOiBcImNvbnRlbnRcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sXHJcbiAgICAgICAgICAgICAgICBcIk5vdCBjb25uZWN0ZWQgdG8gZGlzY29yZHNlcnZlcnMuY29tIVwiLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBzZWxmLmNvbm5lY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IFwiMThweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdDogXCIxMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBcIjE0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbm5lY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSwgc2VsZi5iZFNlcnZlclxyXG4gICAgICAgICldO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJhXCIsXHJcbiAgICAgICAgICAgICAgICB7aHJlZjogXCJodHRwczovL2Rpc2NvcmRzZXJ2ZXJzLmNvbVwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJEaXNjb3Jkc2VydmVycy5jb21cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29ubmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCB7Y29ubmVjdGlvbn0gPSBzZWxmLnN0YXRlO1xyXG4gICAgICAgIGlmIChjb25uZWN0aW9uLnN0YXRlICE9PSAyKSByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJTZXBhcmF0b3IsIG51bGwpLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge2NvbG9yOiBcIiNiOWJiYmVcIiwgZm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgXCJDb25uZWN0ZWQgYXM6IFwiLFxyXG4gICAgICAgICAgICAgICAgYCR7Y29ubmVjdGlvbi51c2VyLnVzZXJuYW1lfSMke2Nvbm5lY3Rpb24udXNlci5kaXNjcmltaW5hdG9yfWBcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtzdHlsZToge3BhZGRpbmc6IFwiNXB4IDEwcHggMCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtzdHlsZToge3dpZHRoOiBcIjEwMCVcIiwgbWluSGVpZ2h0OiBcIjIwcHhcIn0sIHR5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJ1aS1idXR0b24gZmlsbGVkIGJyYW5kIHNtYWxsIGdyb3dcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wiLCBvbkNsaWNrOiBzZWxmLmNvbm5lY3R9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlY29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxufVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXJ2ZXJDYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuc2VydmVyLmljb25VcmwpIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGltYWdlRXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBqb2luZWQ6IHRoaXMucHJvcHMuZ3VpbGRMaXN0LmluY2x1ZGVzKHRoaXMucHJvcHMuc2VydmVyLmlkZW50aWZpZXIpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NlcnZlcn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGxldCBjYXJkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2FyZCAmJiBlLmNhcmRQcmltYXJ5KVswXVxyXG4gICAgICAgIGxldCBmbGV4TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxleENoaWxkICYmIGUuX2hvcml6b250YWxSZXZlcnNlKVswXVxyXG4gICAgICAgIGxldCB3cmFwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubm9XcmFwICYmICFlLnN0cmVhbWVyTW9kZUVuYWJsZWQpWzBdXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIiwgLy8gY2FyZFByaW1hcnktMUh2LXRvXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGAke2NhcmRNb2R1bGUuY2FyZH0gJHtjYXJkTW9kdWxlLmNhcmRQcmltYXJ5fSAke0JETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTgpWzBdLm1hcmdpbkJvdHRvbTh9IGJkLXNlcnZlci1jYXJkJHtzZXJ2ZXIucGlubmVkID8gXCIgYmQtc2VydmVyLWNhcmQtcGlubmVkXCIgOiBcIlwifWB9LFxyXG4gICAgICAgICAgICAvLyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAvLyBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgLy8geyBjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZmxleC0xTzFHS1kgZGlyZWN0aW9uUm93LTN2M3RmRyBqdXN0aWZ5U3RhcnQtMnlJWm8wIGFsaWduU3RyZXRjaC0xaHd4TWEgbm9XcmFwLTNqeW52NlwiIH0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge3JlZjogXCJpbWdcIiwgY2xhc3NOYW1lOiBcImJkLXNlcnZlci1pbWFnZVwiLCBzcmM6IHNlcnZlci5pY29uVXJsLCBvbkVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcyksIGRyYWdnYWJsZTogZmFsc2V9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IGZsZXhNb2R1bGUuZmxleENoaWxkK1wiIGJkLXNlcnZlci1jb250ZW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwK1wiIGJkLXNlcnZlci1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaDVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiaDUtMThfMW5kIGRlZmF1bHRDb2xvci0xX2FqWDAgbWFyZ2luLXJlc2V0IGJkLXNlcnZlci1uYW1lXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW1lbWJlci1jb3VudFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5tZW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgTWVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5ob3Jpem9udGFsK1wiIFwiK3dyYXBNb2R1bGUubm9XcmFwfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdEhhaXJsaW5lLURCRC0yZCBzY3JvbGxlckZhZGUtMUlqdzV5IGJkLXNlcnZlci1kZXNjcmlwdGlvbi1jb250YWluZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBzY3JvbGxlciBiZC1zZXJ2ZXItZGVzY3JpcHRpb25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5kZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleC0xeE1RZzUgZmxleC0xTzFHS1kgaG9yaXpvbnRhbC0xYWU5Y2kgaG9yaXpvbnRhbC0yRUVFblkgZGlyZWN0aW9uUm93LTN2M3RmRyBub1dyYXAtM2p5bnY2IGJkLXNlcnZlci1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImZsZXhDaGlsZC1mYW9WVzMgYmQtc2VydmVyLXRhZ3NcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5jYXRlZ29yaWVzLmpvaW4oXCIsIFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmpvaW5lZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGNvbG9yR3JlZW4tMjlpQUtZXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiIzNhYzE1Y1wifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5lcnJvciAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IFwiYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJidXR0b24tMzhhU2NyIGxvb2tGaWxsZWQtMUd4MDBQIGNvbG9yQnJhbmQtM3BYcjkxIHNpemVNaW4tMW1KZDF4IGdyb3ctcTc3T05OIGRpc2FibGVkLTlhRjJ1Z1wiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIiwgYmFja2dyb3VuZENvbG9yOiBcIiNjMTNhM2FcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZXJ2ZXIuZXJyb3IgJiYgIXRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk5cIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCJ9LCBvbkNsaWNrOiAoKSA9PiB7dGhpcy5qb2luKCk7fX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkpvaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVFcnJvcigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLnNlcnZlci5pY29uVXJsID0gdGhpcy5wcm9wcy5mYWxsYmFjaztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZUVycm9yOiB0cnVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgam9pbigpIHtcclxuICAgICAgICB0aGlzLnByb3BzLmpvaW4odGhpcyk7XHJcbiAgICAgICAgLy90aGlzLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2Nyb2xsZXIgZnJvbSBcIi4uL3Njcm9sbGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2lkZWJhclZpZXcgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3NpZGViYXIsIGNvbnRlbnQsIHRvb2xzfSA9IHRoaXMucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzdGFuZGFyZFNpZGViYXJWaWV3LTNGMUk3aSB1aS1zdGFuZGFyZC1zaWRlYmFyLXZpZXdcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInNpZGViYXJSZWdpb24tVkZUVWtOIHNpZGViYXItcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7a2V5OiBcInNpZGViYXJTY3JvbGxlclwiLCByZWY6IFwic2lkZWJhclNjcm9sbGVyXCIsIHNpZGViYXI6IHRydWUsIGZhZGU6IHNpZGViYXIuZmFkZSB8fCB0cnVlLCBkYXJrOiBzaWRlYmFyLmRhcmsgfHwgdHJ1ZX0sIHNpZGViYXIuY29tcG9uZW50KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50UmVnaW9uLTNuRHVZeSBjb250ZW50LXJlZ2lvblwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRUcmFuc2l0aW9uV3JhcC0zaHFPRVcgY29udGVudC10cmFuc2l0aW9uLXdyYXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXJXcmFwLTJsSkVrZCBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcC0zWVpYZG0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCBzY3JvbGxlclRoZW1lZC0yb2VudXMgdGhlbWVHaG9zdC0yOE1TbjAgc2Nyb2xsZXJUcmFjay0xWklwc3ZcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInNjcm9sbGVyLTJGS0ZQRyBmaXJlZm94Rml4U2Nyb2xsRmxleC1jbkkyaXggY29udGVudFJlZ2lvblNjcm9sbGVyLTI2bmMxZSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlciBzY3JvbGxlclwiLCByZWY6IFwiY29udGVudFNjcm9sbGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudENvbHVtbi0yaHJJWUggY29udGVudENvbHVtbkRlZmF1bHQtMVZRa0dNIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sIGNvbnRlbnQuY29tcG9uZW50KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzLmNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUmVsb2FkSWNvbiBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xyXG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcclxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiNkY2RkZGVcIixcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1yZWxvYWQgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHRoaXMucHJvcHMub25DbGljayxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7d2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCJ9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6IFwibm9uZVwiLCBkOiBcIk0wIDBoMjR2MjRIMHpcIn0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2Nyb2xsZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgLy9zY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXlcclxuICAgICAgICBsZXQgc2Nyb2xsZXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXJIb3Jpem9udGFsKVswXVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyUmVnaW9uU2Nyb2xsZXIpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0SGFpcmxpbmV9JHt0aGlzLnByb3BzLmZhZGUgPyBcIiBcIitzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJGYWRlIDogXCJcIn1gO1xyXG4gICAgICAgIGxldCBzY3JvbGxlckNsYXNzID0gc2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyK1wiIHNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVjayAqL1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNpZGViYXIpIHNjcm9sbGVyQ2xhc3MgKz0gYCAke3Njcm9sbGVyTW9kdWxlMi5zaWRlYmFyUmVnaW9uU2Nyb2xsZXJ9IHNpZGViYXItcmVnaW9uLXNjcm9sbGVyYFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbnRlbnRDb2x1bW4pIHtcclxuICAgICAgICAgICAgc2Nyb2xsZXJDbGFzcyArPSBcIiBcIitzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyK1wiIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IGAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJNb2R1bGUyLmNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXB9IGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyLXdyYXAgICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyTW9kdWxlMS50aGVtZUdob3N0fSAke3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlclRyYWNrfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJ3cmFwXCIsIGNsYXNzTmFtZTogd3JhcHBlckNsYXNzfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtrZXk6IFwic2Nyb2xsZXJcIiwgcmVmOiBcInNjcm9sbGVyXCIsIGNsYXNzTmFtZTogc2Nyb2xsZXJDbGFzc30sXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlblxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBWMkNfU2Nyb2xsZXIucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19TY3JvbGxlci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbn0pOyAiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4vc2V0dGluZ3NHcm91cFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuL21hcmdpbnRvcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKChzZWN0aW9uLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICBpICE9PSAwID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCwge30pIDogbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2U6IHRoaXMucHJvcHMub25DaGFuZ2V9KSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9zd2l0Y2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc0dyb3VwIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHt0aXRsZSwgc2V0dGluZ3MsIGJ1dHRvbn0gPSB0aGlzLnByb3BzO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbXBvbmVudCA9IGJ1dHRvbiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7a2V5OiBcInRpdGxlLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogYnV0dG9uLm9uQ2xpY2t9LCBidXR0b24udGl0bGUpIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gW0JEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGV9KSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdLCBvbkNoYW5nZTogKGlkLCBjaGVja2VkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UoaWQsIGNoZWNrZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgIH0pXTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2V0dGluZ3NUaXRsZSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcbi8vaDItMmdXRS1vIHRpdGxlLTNzWldZUSBzaXplMTYtMTRjR3o1IGhlaWdodDIwLW1PMmVJTiB3ZWlnaHRTZW1pQm9sZC1OSmV4emkgZGEtaDIgZGEtdGl0bGUgZGEtc2l6ZTE2IGRhLWhlaWdodDIwIGRhLXdlaWdodFNlbWlCb2xkIGRlZmF1bHRDb2xvci0xX2FqWDAgZGEtZGVmYXVsdENvbG9yIG1hcmdpblRvcDYwLTNQR2J0SyBkYS1tYXJnaW5Ub3A2MCBtYXJnaW5Cb3R0b20yMC0zMnFJRDcgZGEtbWFyZ2luQm90dG9tMjBcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImgyXCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy50ZXh0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuXHJcbmxldCBjbGFzc25hbWVzID0gW11cclxuZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKG5hbWUpe1xyXG4gICAgbGV0IGNsYXNzTmFtZSA9IGNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChuYW1lK1wiLVwiKSlcclxuICAgIGlmKGNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICBjbGFzc05hbWUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5uYW1lKVswXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaW5mbyA9IFtcclxuICAgICAgICAgICAgICAgIGluZm8sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgzIG1hcmdpbi1yZXNldCBtYXJnaW4tcmVzZXQgdWktZmxleC1jaGlsZFwifSwgdGV4dCksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7b25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJcInVzZSBzdHJpY3RcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIlxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3RcclxuXHJcbmNvbnN0IGludGVydmFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkludGVydmFsKVswXVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBvbmVudCwgTWVzc2FnZXMpIHtcclxuICAgIGNsYXNzIFRpbWVSZW5kZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnRlcnZhbCA9IG5ldyBpbnRlcnZhbE1vZHVsZTEuSW50ZXJ2YWwoKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ2V0VXBkYXRlZFRpbWUoKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RhcnQoMWUzLCAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRTdGF0ZShzZWxmLmdldFVwZGF0ZWRUaW1lKCkpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwuc3RvcCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb21wb25lbnREaWRVcGRhdGUoYWN0aXZpdHkpe1xyXG4gICAgICAgICAgICBpZihhY3Rpdml0eS50aW1lc3RhbXBzLmVuZCA9PT0gdGhpcy5wcm9wcy50aW1lc3RhbXBzLmVuZCAmJiBhY3Rpdml0eS50aW1lc3RhbXBzLnN0YXJ0ID09PSB0aGlzLnByb3BzLnRpbWVzdGFtcHMuc3RhcnQpcmV0dXJuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUodGhpcy5nZXRVcGRhdGVkVGltZSgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0VXBkYXRlZFRpbWUoKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB0aGlzLnByb3BzLnRpbWVzdGFtcHNcclxuICAgICAgICAgICAgbGV0IG5vdyA9IERhdGUubm93KCkgLyAxZTM7XHJcbiAgICAgICAgICAgIGlmKG51bGwgIT0gdGltZXN0YW1wcy5lbmQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlmZihub3csIGNoZWNrVW5peCh0aW1lc3RhbXBzLmVuZCkgLyAxZTMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYobnVsbCAhPSB0aW1lc3RhbXBzLnN0YXJ0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERpZmYoY2hlY2tVbml4KHRpbWVzdGFtcHMuc3RhcnQpIC8gMWUzLCBub3cpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgICAgICAgICAgbWludXRlczogMCxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVyVGltZShudW1iZXIsIHJlbW92ZVplcm8pe1xyXG4gICAgICAgICAgICBpZihyZW1vdmVaZXJvID09PSB1bmRlZmluZWQpcmVtb3ZlWmVybyA9IGZhbHNlXHJcbiAgICAgICAgICAgIGlmKHJlbW92ZVplcm8gJiYgbnVtYmVyIDw9IDApcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIGlmKG51bWJlciA8IDEwKXJldHVybiBcIjBcIitudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIG51bWJlclxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGlmZih0aW1lc3RhbXAsIG5vdyl7XHJcbiAgICAgICAgICAgIGxldCBob3VycyA9IE1hdGgubWF4KG5vdyAtIHRpbWVzdGFtcCwgMClcclxuICAgICAgICAgICAgbGV0IHNlY29uZHMgPSBNYXRoLmZsb29yKGhvdXJzKSAlIDYwXHJcbiAgICAgICAgICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihob3VycyAvIDYwKSAlIDYwXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBob3VyczogTWF0aC5mbG9vcihob3VycyAvIDM2MDApICUgMjQsXHJcbiAgICAgICAgICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgICAgICAgICAgc2Vjb25kc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgICAgICBsZXQgdGltZXN0YW1wcyA9IHByb3BzLnRpbWVzdGFtcHNcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VkUHJvcHMgPSBmdW5jdGlvbihwcm9wcywgaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChudWxsID09IHByb3BzKSByZXR1cm4ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVzdGFtcHMgPSB7fVxyXG4gICAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpdGVtcy5pbmRleE9mKGtleSkgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcHNba2V5XSA9IHByb3BzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcHNcclxuICAgICAgICAgICAgfShwcm9wcywgW1widGltZXN0YW1wc1wiXSlcclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICAgICAgbGV0IGhvdXJzID0gc3RhdGUuaG91cnNcclxuICAgICAgICAgICAgbGV0IG1pbnV0ZXMgPSBzdGF0ZS5taW51dGVzXHJcbiAgICAgICAgICAgIGxldCBzZWNvbmRzID0gc3RhdGUuc2Vjb25kc1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhvdXJzOiB0aGlzLnJlbmRlclRpbWUoaG91cnMsICEwKSxcclxuICAgICAgICAgICAgICAgIG1pbnV0ZXM6IHRoaXMucmVuZGVyVGltZShtaW51dGVzKSxcclxuICAgICAgICAgICAgICAgIHNlY29uZHM6IHRoaXMucmVuZGVyVGltZShzZWNvbmRzKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZih0aW1lc3RhbXBzLmVuZCAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHVzZWRQcm9wcywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IE1lc3NhZ2VzLlVTRVJfQUNUSVZJVFlfVElNRVNUQU1QX0VORC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRpbWVzdGFtcHMuc3RhcnQgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCB1c2VkUHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlcy5VU0VSX0FDVElWSVRZX1RJTUVTVEFNUF9TVEFSVC5mb3JtYXQoZGF0YSlcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFRpbWVSZW5kZXJcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVW5peChlKSB7XHJcbiAgICByZXR1cm4gKFwiXCIgKyBlKS5sZW5ndGggPCAxMyA/IDFlMyAqIGUgOiBlXHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxuXHJcbi8vPGRpdiBjbGFzcz1cImxheWVyLXY5SHlZYyBkaXNhYmxlZFBvaW50ZXJFdmVudHMtMXB0Z1RCXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDIzN3B4OyBib3R0b206IDUxcHg7XCI+XHJcbi8vXHQ8ZGl2IGNsYXNzPVwidG9vbHRpcC0yUWZMdGMgdG9vbHRpcFRvcC1YRERTeHggdG9vbHRpcEJsYWNrLVBQRzQ3eiB0b29sdGlwRGlzYWJsZVBvaW50ZXJFdmVudHMtM2VhQkdOXCIgc3R5bGU9XCJvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7XCI+XHJcbi8vXHRcdDxkaXYgY2xhc3M9XCJ0b29sdGlwUG9pbnRlci0zWmZpcktcIj48L2Rpdj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBDb250ZW50LWJxVkxXS1wiPlVzZXIgU2V0dGluZ3M8L2Rpdj5cclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5cclxuLy88ZGl2IGNsYXNzPVwibGF5ZXItdjlIeVljXCIgc3R5bGU9XCJ0b3A6IDg2MHB4OyBsZWZ0OiA2MzIuNXB4O1wiPlxyXG4vL1x0PGRpdiBjbGFzcz1cInRvb2x0aXAtMlFmTHRjIHRvb2x0aXBCbGFjay1QUEc0N3ogdG9vbHRpcFRvcC1YRERTeHhcIj5cclxuLy9cdFx0PGRpdiBjbGFzcz1cInRvb2x0aXBQb2ludGVyLTNaZmlyS1wiPjwvZGl2PlxyXG4vL1x0XHRDaGFuZ2Vsb2dcclxuLy9cdDwvZGl2PlxyXG4vLzwvZGl2PlxyXG5sZXQgVG9vbHRpcENsYXNzZXNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcENsYXNzZXMoKXtcclxuXHRpZihUb29sdGlwQ2xhc3NlcylyZXR1cm4gVG9vbHRpcENsYXNzZXNcclxuXHRyZXR1cm4gVG9vbHRpcENsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInRvb2x0aXBcIiwgXCJ0b29sdGlwQmxhY2tcIik7XHJcbn1cclxubGV0IFRvb2x0aXBMYXllcnNcclxuZnVuY3Rpb24gZ2V0VG9vbHRpcExheWVycygpe1xyXG5cdGlmKFRvb2x0aXBMYXllcnMpcmV0dXJuIFRvb2x0aXBMYXllcnNcclxuXHRyZXR1cm4gVG9vbHRpcExheWVycyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwibGF5ZXJcIiwgXCJsYXllckNvbnRhaW5lclwiKTtcclxufVxyXG5cclxuY29uc3QgZ2V0Q2xhc3MgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgY29uc3QgdXBwZXJDYXNlID0gc2lkZU9yQ29sb3JbMF0udG9VcHBlckNhc2UoKSArIHNpZGVPckNvbG9yLnNsaWNlKDEpO1xyXG4gICAgY29uc3QgdG9vbHRpcENsYXNzID0gZ2V0VG9vbHRpcENsYXNzZXMoKVtgdG9vbHRpcCR7dXBwZXJDYXNlfWBdO1xyXG4gICAgaWYgKHRvb2x0aXBDbGFzcykgcmV0dXJuIHRvb2x0aXBDbGFzcztcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgY2xhc3NFeGlzdHMgPSBmdW5jdGlvbihzaWRlT3JDb2xvcikge1xyXG4gICAgcmV0dXJuIGdldENsYXNzKHNpZGVPckNvbG9yKSA/IHRydWUgOiBmYWxzZTtcclxufTtcclxuXHJcbmNvbnN0IHRvUHggPSBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfXB4YDtcclxufTtcclxuXHJcbi8qIDxkaXYgY2xhc3M9XCJsYXllci12OUh5WWMgZGEtbGF5ZXJcIiBzdHlsZT1cImxlZnQ6IDIzNC41cHg7IGJvdHRvbTogNTFweDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLTJRZkx0YyBkYS10b29sdGlwIHRvb2x0aXBUb3AtWEREU3h4IHRvb2x0aXBCbGFjay1QUEc0N3pcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcFBvaW50ZXItM1pmaXJLIGRhLXRvb2x0aXBQb2ludGVyXCI+PC9kaXY+XHJcbiAgICAgICAgVXNlciBTZXR0aW5nc1xyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAqL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW11bGF0ZWRUb29sdGlwIHtcclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBjb25zdHJ1Y3RvclxyXG5cdCAqIEBwYXJhbSB7KEhUTUxFbGVtZW50fGpRdWVyeSl9IG5vZGUgLSBET00gbm9kZSB0byBtb25pdG9yIGFuZCBzaG93IHRoZSB0b29sdGlwIG9uXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpcCAtIHN0cmluZyB0byBzaG93IGluIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB0b29sdGlwXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPWJsYWNrXSAtIGNvcnJlbGF0ZXMgdG8gdGhlIGRpc2NvcmQgc3R5bGluZy9jb2xvcnMgKGJsYWNrLCBicmFuZCwgZ3JlZW4sIGdyZXksIHJlZCwgeWVsbG93KVxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zaWRlPXRvcF0gLSBjYW4gYmUgYW55IG9mIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJldmVudEZsaXA9ZmFsc2VdIC0gcHJldmVudHMgbW92aW5nIHRoZSB0b29sdGlwIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIGlmIGl0IGlzIHRvbyBiaWcgb3IgZ29lcyBvZmZzY3JlZW5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZWQ9ZmFsc2VdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQgZnJvbSBzaG93aW5nIG9uIGhvdmVyXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3Iobm9kZSwgdGV4dCwgb3B0aW9ucyA9IHt9KSB7XHJcblx0XHRjb25zdCB7c3R5bGUgPSBcImJsYWNrXCIsIHNpZGUgPSBcInRvcFwiLCBwcmV2ZW50RmxpcCA9IGZhbHNlLCBkaXNhYmxlZCA9IGZhbHNlfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLm5vZGUgPSBub2RlIGluc3RhbmNlb2YgalF1ZXJ5ID8gbm9kZVswXSA6IG5vZGU7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IHN0eWxlLnRvTG93ZXJDYXNlKCk7XHJcblx0XHR0aGlzLnNpZGUgPSBzaWRlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50RmxpcCA9IHByZXZlbnRGbGlwO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKCFjbGFzc0V4aXN0cyh0aGlzLnNpZGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTaWRlICR7dGhpcy5zaWRlfSBkb2VzIG5vdCBleGlzdC5gKTtcclxuXHRcdGlmICghY2xhc3NFeGlzdHModGhpcy5zdHlsZSkpIHJldHVybiBVdGlscy5lcnIoXCJFbXVsYXRlZFRvb2x0aXBcIiwgYFN0eWxlICR7dGhpcy5zdHlsZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRcclxuXHRcdHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcExheWVycygpLmxheWVyICsgXCIgXCIgKyBnZXRUb29sdGlwTGF5ZXJzKCkuZGlzYWJsZWRQb2ludGVyRXZlbnRzO1xyXG5cclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc05hbWUgPSBgJHtnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXB9ICR7Z2V0Q2xhc3ModGhpcy5zdHlsZSl9YDtcclxuXHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0aGlzLmxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBnZXRUb29sdGlwQ2xhc3NlcygpLnRvb2x0aXBDb250ZW50XHJcblxyXG5cdFx0Y29uc3QgcG9pbnRlckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0cG9pbnRlckVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwUG9pbnRlcjtcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZChwb2ludGVyRWxlbWVudCk7XHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50LmFwcGVuZCh0aGlzLmxhYmVsRWxlbWVudCk7XHJcblx0XHR0aGlzLmVsZW1lbnQuYXBwZW5kKHRoaXMudG9vbHRpcEVsZW1lbnQpO1xyXG5cclxuXHRcdHRoaXMubm9kZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xyXG5cclxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0bXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBub2RlcyA9IEFycmF5LmZyb20obXV0YXRpb24ucmVtb3ZlZE5vZGVzKTtcclxuXHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyh0aGlzLm5vZGUpKTtcclxuXHRcdFx0XHRcdGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5oaWRlKCk7XHJcblx0XHR9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29udGFpbmVyIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYXBwZW5kZWQuICovXHJcbiAgICBnZXQgY29udGFpbmVyKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzLnNwbGl0KFwiIFwiKVswXStcIiB+IC5cIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdKTsgfVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICB0aGlzLm5vZGUgPSBCRFYyLnJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy50b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHt4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLCBzdHlsZToge3dpZHRoOiBcIjE4cHhcIiwgaGVpZ2h0OiBcIjE4cHhcIn19LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImdcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiLCBmaWxsOiBcIm5vbmVcIiwgZmlsbFJ1bGU6IFwiZXZlbm9kZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2NsYXNzTmFtZTogXCJmaWxsXCIsIGZpbGw6IFwiI2RjZGRkZVwiLCBkOiBcIk05LjUgMy4yMDVMOC43OTUgMi41IDYgNS4yOTUgMy4yMDUgMi41bC0uNzA1LjcwNUw1LjI5NSA2IDIuNSA4Ljc5NWwuNzA1LjcwNUw2IDYuNzA1IDguNzk1IDkuNWwuNzA1LS43MDVMNi43MDUgNlwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1rZGlycFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb2R1bGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibm9kZS1mZXRjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJpbXJhZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5YXV6bFwiKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/BetterDiscordApp/js/main.min.js b/BetterDiscordApp/js/main.min.js index 1da1981..2f51e0b 100644 --- a/BetterDiscordApp/js/main.min.js +++ b/BetterDiscordApp/js/main.min.js @@ -1 +1 @@ -module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return Se}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static formatString(e,t){for(const n in t){let s=t[n];Array.isArray(s)&&(s=JSON.stringify(s)),"object"==typeof s&&null!==s&&(s=s.toString()),e=e.replace(new RegExp(`{{${n}}}`,"g"),s)}return e}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("openModal","updateModal"),r=l.findByDisplayName("Markdown"),o=l.findByDisplayName("ConfirmModal");if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.openModal(n=>ie.React.createElement(o,Object.assign({header:e,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},n),t),{modalKey:m})}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var P=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new L(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;F||(F=BDModules.get(e=>e.flowerStarContainer)[0]);W||(W=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(P,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(P,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:W.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(P,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:F.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:F.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],W=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):(d.warn("Module Not Exported",`${c.name}, please start setting module.exports`),a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`)}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in Se)we[e]||delete Se[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){Se[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){Se[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){Se[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;Se[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(Se[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(Se,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",Se)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.5",ue={description:"BBD's changelog.",changes:[{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`.","Fixed the open folder buttons for plugins and themes"]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},Se={};class xe{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}const $e=Re.prototype.render;Object.defineProperty(Re.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>$e});class je extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement(je,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Le,null),this.searchInput,ie.react.createElement(Le,null),ie.react.createElement(Pe,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Le,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Le,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class _e extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var Ie=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(_e,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(Oe,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var Fe=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const We=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var ze=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!We.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(We);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const Ue=ie.React;class qe extends Ue.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return Ue.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let Ge=[];function Ve(e){let t=Ge.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],Ge.push(t),t)}class Je extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return Ge.find(e=>e.startsWith("beta-"))||Ge.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ve("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(qe,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Ze extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Je,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ye=BDModules.get(e=>e.marginTop60)[0];class Ke extends React.Component{render(){return Ye||(Ye=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ye.marginTop60})}}class Xe extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ke,{}):null,ie.react.createElement(Ze,Object.assign({},e,{onChange:this.props.onChange}))])}}class Qe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class et extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Qe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Vn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class tt extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(et,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Qe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Vn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class nt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const st=nt.prototype.render;Object.defineProperty(nt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>st});class rt extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class ot extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const it=ie.React;class at extends it.Component{render(){const e=this.props.size||"24px";return it.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},it.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),it.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const lt=ie.React;class ct extends lt.Component{render(){const e=this.props.size||"24px";return lt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},lt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),lt.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),lt.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const dt=ie.React,ut=ie.anchorClasses;class ht extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="contentRegionScroller-"]');if(!((e,t)=>{if(!e)return console.error(new Error("Container is undefined.")),!1;const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=dt.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=dt.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${ut.anchor} ${ut.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=dt.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return dt.createElement(P,{color:"black",side:"top",text:e},dt.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",dt.createElement(at,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",dt.createElement(ct,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",dt.createElement(ot,{className:"bd-icon"}),this.reload),dt.createElement(qe,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const pt=ht.prototype.render;Object.defineProperty(ht.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>pt});const mt=ie.React;class gt extends mt.Component{render(){const e=this.props.size||"16px";return mt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},mt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const ft=ie.React;class bt extends ft.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=ft.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return ft.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>ft.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return ft.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},ft.createElement("div",{className:"bd-select-value"},this.selected.label),ft.createElement(gt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const yt=ie.React;class vt extends yt.Component{render(){const e=this.props.size||"16px";return yt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},yt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),yt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const wt=ie.React;class Ct extends wt.Component{render(){return wt.createElement("div",{className:"bd-search-wrapper"},wt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),wt.createElement(vt,null))}}function Et(){return(Et=Object.assign||function(e){for(var t=1;t{ks.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(Ce):Object.values(we)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=xt.createElement(St,{color:"black",position:"top",text:"Reload List"},e=>xt.createElement(ot,Et({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return xt.createElement(rt,{title:`${this.props.type.toUpperCase()}—${t.length}`},xt.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,xt.createElement("div",{className:"bd-controls bd-addon-controls"},xt.createElement(Ct,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),xt.createElement("div",{className:"bd-addon-dropdowns"},xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Sort by:"),xt.createElement(bt,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),xt.createElement("div",{className:"bd-select-wrapper"},xt.createElement("label",{className:"bd-label"},"Order:"),xt.createElement(bt,{options:this.directions,onChange:this.reverse,style:"transparent"})))),xt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const Dt=kt.prototype.render;Object.defineProperty(kt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Dt});const Mt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Bt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Nt=process.pid;var Lt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Mt.dispatch({type:Bt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Nt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Pt(){return(Pt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function Tt(){return(Tt=Object.assign||function(e){for(var t=1;tt=e);jt[e]=n;const s=[];for(let t of Wt.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);Ot.push([e,t]),setTimeout(()=>{let e=Ot;0!==e.length&&(Ot=[],It(zt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof Ft||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Wt.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Wt.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete jt[e],s}};const It=function(e,t,n){return me["lightcord-5"]?E()(`${Wt.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new Ft("The current settings blocked the request."))};class Ft extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Wt={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:At,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Rt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},zt={badges:"/users/badges"},Ht=ie.React;let Ut;class qt extends Ht.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=Gt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Lt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Lt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ut||(Ut=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[Ht.createElement(Ze,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),Ht.createElement(Ke,null),Ht.createElement(Ne,{text:"RichPresence"}),Ht.createElement("div",null,this.optionsComponents),Ht.createElement("div",null,Ht.createElement(Ke,null),Ht.createElement(Ne,{text:"Preview"}),Ht.createElement(dn,{settings:this})),Ht.createElement("div",{className:e.marginBottom20}),Ht.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),Ht.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=Gt.map(e=>{if("text"===e.type)return Ht.createElement(Yt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[Ht.createElement(Kt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?Ht.createElement(Xt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const Gt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Vt,Jt,Zt;class Yt extends Ht.PureComponent{get modules(){return Vt&&Vt[0]?Vt:Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Ht.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),Ht.createElement(cn,null))}}class Kt extends Ht.PureComponent{get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Ht.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?Ht.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),Ht.createElement(cn,null))}}class Xt extends Ht.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Zt||(Zt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Ht.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),Ht.createElement(cn,null))}}let Qt,en,tn,nn,sn,rn,on,an,ln=[];class cn extends Ht.PureComponent{get modules(){return ln&&ln[0]?ln:ln=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return Ht.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}Ht.Component;class dn extends Ht.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return Ht.createElement("div",{className:"lc-tabWrapper"},Ht.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},Ht.createElement(un,{preview:this,title:"Full Profile",id:"profile"}),Ht.createElement(un,{preview:this,title:"User Popout",id:"popout"})),Ht.createElement(hn,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?mn:pn}}class un extends Ht.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",Ht.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class hn extends Ht.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Qt=Qt||ie.WebpackModules.find(e=>e.emptyStateImage),Qt?Ht.createElement("div",{style:{margin:"20px"}},Ht.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},Ht.createElement("div",{className:Qt.emptyStateImage,style:{marginTop:"20px"}}),Ht.createElement("div",{className:Qt.emptyStateHeader},"An error occured"),Ht.createElement("p",{className:Qt.emptyStateSubtext},"Please check the console for more informations. Join our ­",Ht.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class pn extends Ht.Component{get modules(){return en||(en=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!tn){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();nn=t.props;const s=t.type.render(nn,null),r=new s.type(s.props).render();tn=r.type}if(!tn)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});nn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new tn(Object.assign({},nn,{activity:r})).render().props.children,i=Ht.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return Ht.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class mn extends Ht.Component{get modules(){return sn||(sn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!rn){const t=new e.default({user:n}).render();an=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();rn=o.type}if(!rn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});on=new an({user:n,close:()=>{}}).render().props;const o=new rn(Object.assign({},on,{activity:r})).render().props.children;return o.props.style={width:"auto"},Ht.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const gn=ie.React;let fn=BDModules.get(e=>e.defaultMarginh5)[0],bn=BDModules.get(e=>e.colorStandard)[0],yn=BDModules.get(e=>e.size32)[0],vn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const wn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,En=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,Sn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class xn extends gn.Component{constructor(e){super(e)}render(){return fn||(fn=BDModules.get(e=>e.defaultMarginh5)[0]),bn||(bn=BDModules.get(e=>e.colorStandard)[0]),yn||(yn=BDModules.get(e=>e.size32)[0]),[gn.createElement(Ne,{text:"Account Infos"}),gn.createElement("div",null,gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Profile"),gn.createElement(Bn,{content:this.getProfileValue(),language:"diff"}),gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Statistics"),gn.createElement(Bn,{content:this.getStatistics(),language:"diff"}),gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Connected Sessions"),gn.createElement(Bn,{content:this.getSessionValue(),language:"diff"})),gn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=En.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=Sn.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(wn.getGuilds()),t=Object.keys(Cn.getRelationships()),n=t.filter(e=>Cn.isFriend(e)),s=t.filter(e=>Cn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let kn=BDModules.get(e=>e.highlight)[0],Dn=BDModules.get(e=>e.markup)[0],Mn=BDModules.get(e=>e.messageContent)[0];class Bn extends gn.Component{render(){return Dn||(Dn=BDModules.get(e=>e.markup)[0]),Mn||(Mn=BDModules.get(e=>e.messageContent)[0]),vn||(vn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),kn||(kn=BDModules.get(e=>e.highlight)[0]),gn.createElement("div",{class:`${Dn.markup} ${Mn.messageContent}`},gn.createElement("pre",null,gn.createElement("code",{class:`${vn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:kn.highlight(this.props.language,this.props.content).value}})),gn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Nn=window.Lightcord.DiscordModules.dispatcher,Ln=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Pn=BDModules.get(e=>e.default&&e.default.addRelationship)[0],An=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const Tn={};let Rn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var $n=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Nn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Nn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Rn?Rn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Ln.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(Tn[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||jn(n,"discord.gg/")||jn(n,"discord.com/invite/")||jn(n,"discordapp.com/invite/"))&&(Tn[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Pn||(Pn=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Pn.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),An||(An=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),An.default.closePrivateChannel(t.id,!1)))))}};function jn(e,t){let n=e.embeds;return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!e.fields.map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let On;const _n=d.removeDa;var In=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,On=On||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=_n(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${_n(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${_n(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${_n(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${_n(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${_n(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${_n(s.userSettingsSecurity)} .${_n(r.children)} > div:nth-child(2)`)),console.log(n),n}(),On||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${On.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${On.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},Fn=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};$t();let Wn;class zn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Wn||(Wn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Wn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Wn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel."),React.createElement(Ke,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-secondary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const Hn=ie.React;class Un extends Hn.Component{render(){const e=this.props.size||"18px";return Hn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},Hn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),Hn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class qn extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(P,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Un,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let Gn=!1;var Vn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new xe,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Jn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Jn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Jn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Jn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Jn(()=>(new qn).render())),this.sidebar.register("core",Jn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Jn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Jn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Jn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?Ie.addButton():Ie.removeButton()),"bda-gs-4"==e&&(t?Fe.start():Fe.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?ze.start():ze.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?He.startDebugListener():He.stopDebugListener()),"fork-dm-1"==e&&(t?He.startCopySelector():He.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Lt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Lt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?$n.enable():$n.disable()),"lightcord-6"===e&&(t?In.enable():In.disable()),"lightcord-7"===e&&(t?Fn.enable():Fn.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&Ie.addButton(),me["bda-gs-4"]&&Fe.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&ze.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Lt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&$n.enable(),me["lightcord-6"]&&In.enable(),me["lightcord-7"]&&Fn.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&He.startDebugListener(),me["fork-dm-1"]&&He.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Xe,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ke),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Je,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{Gn||(Gn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),Gn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),Gn=!1,t()}))},wrapper:!0,disabled:Gn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(qt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(xn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(zn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(tt,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(kt,{type:e}))}}};function Jn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Zn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Yn(){return(Yn=Object.assign||function(e){for(var t=1;t/g};let Qn=BDModules.get(e=>e.CustomEmoji)[0],es=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],ts=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ns=BDModules.get(e=>e.getAutocompleteOptions)[0],ss=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],rs=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],os=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],is=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var as=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),is||(is=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),ts&&ns&&ss&&rs&&os&&is){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ns);const e=ns.getAutocompleteOptions;ns.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return ms(n),n},queryResults:e=>ss.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>ls(e,t,r.emojis,n,s,rs.default.Messages.EMOJI_MATCHING,rs.default.Messages.EMOJI,ts.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?os.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Xn.EmojiRegex.exec(e),r){o=!0,es||(es=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=es.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Qn||(Qn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Qn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function ls(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[cs(o,i,e,c),d]}function cs(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(ts.default.Title,{title:r},r)}cs.displayName="renderHeader";let ds=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],us=ds&&ds.default.isEmojiDisabled,hs=!1,ps=!1;function ms(e){hs=e,ps||(ds||(ds=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),ds&&(us||(us=ds.default.isEmojiDisabled),ps=!0,ds.default.isEmojiDisabled=function(e){return hs?!(!e.surrogates&&!e.diversity):us.call(this,...arguments)}))}const{ipcRenderer:gs}=n(0);function fs(){}let bs,ys,vs,ws;fs.prototype.setConfig=function(e){this.hasStarted||Object.assign(ve,e)},fs.prototype.setMethods=function(e){this.hasStarted||(bs=e)},fs.prototype.init=async function(){if(this.hasStarted)return;if(this.hasStarted=!0,!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Vn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),as.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},fs.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=$t(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return Cs(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},fs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},fs.prototype.injectExternals=async function(){},fs.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Vn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Vn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Vn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Vn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},fs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),vs||(vs=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),ws||(ws=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(ys)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(vs).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},fs.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},fs.prototype.alert=function(e,t){return d.alert(e,t)},fs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function Cs(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);_t.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(P,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}fs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},fs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},fs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},fs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=$t();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},fs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"}))));const r=$t();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),Cs(r,n,!0)}}))},fs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(P,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(P,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"}))));const r=$t();s.push(ie.React.createElement("div",{id:"badges-"+r})),Cs(r,n,!1)}}))},fs.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var Es=new fs;const Ss={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),Es},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};Ss.getData=Ss.loadData,Ss.saveData=function(e,t,n){return g.setPluginData(e,t,n)},Ss.setData=Ss.saveData,Ss.deleteData=function(e,t){return g.deletePluginData(e,t)},Ss.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},Ss.onRemoved=function(e,t){return d.onRemoved(e,t)},Ss.suppressErrors=function(e,t){return d.suppressErrors(e,t)},Ss.testJSON=function(e){return d.testJSON(e)},Ss.isPluginEnabled=function(e){return!!Ee[e]},Ss.isThemeEnabled=function(e){return!!Se[e]},Ss.isSettingEnabled=function(e){return!!me[e]},Ss.enableSetting=function(e){return Vn.onChange(e,!0)},Ss.disableSetting=function(e){return Vn.onChange(e,!1)},Ss.toggleSetting=function(e){return Vn.onChange(e,!me[e])},Ss.getBDData=function(e){return g.getBDData(e)},Ss.setBDData=function(e,t){return g.setBDData(e,t)};const xs=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Ss.Plugins=xs(Ee,Ce,v),Ss.Themes=xs(Se,we,oe);var ks=Ss;window.Lightcord.BetterDiscord.BdApi=Ss,n.d(t,"default",(function(){return Bs})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ds=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},Ms=Object.keys(s);for(const e of Ms)Ds(e,s[e]);Ds("BDV2",ie),Ds("pluginModule",v),Ds("themeModule",oe),Ds("Utils",d),Ds("BDEvents",b),Ds("settingsPanel",Vn),Ds("DataStore",g),Ds("ContentManager",se),Ds("ClassNormalizer",ze),window.BdApi=ks,Ds("mainCore",Es);class Bs{constructor(e,t){Es.setConfig(e),Es.setMethods(t)}init(){Es.init()}}}]); \ No newline at end of file +module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=10)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t){e.exports=require("rimraf")},function(e,t){e.exports=require("yauzl")},function(e,t){e.exports=require("mkdirp")},function(e,t,n){"use strict";n.r(t);var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return ae})),n.d(s,"currentDiscordVersion",(function(){return le})),n.d(s,"minSupportedVersion",(function(){return ce})),n.d(s,"bbdVersion",(function(){return de})),n.d(s,"bbdChangelog",(function(){return ue})),n.d(s,"settings",(function(){return he})),n.d(s,"defaultCookie",(function(){return pe})),n.d(s,"settingsCookie",(function(){return me})),n.d(s,"settingsRPC",(function(){return ge})),n.d(s,"defaultRPC",(function(){return fe})),n.d(s,"bdpluginErrors",(function(){return be})),n.d(s,"bdthemeErrors",(function(){return ye})),n.d(s,"bdConfig",(function(){return ve})),n.d(s,"bdthemes",(function(){return we})),n.d(s,"bdplugins",(function(){return Ce})),n.d(s,"pluginCookie",(function(){return Ee})),n.d(s,"themeCookie",(function(){return xe}));var r=n(0);const o=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete o.m.__extra_id__,delete o.c.__extra_id__;const i=e=>{for(const t in o.c)if(o.c.hasOwnProperty(t)){const n=o.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let a={find:i,findAll:e=>{const t=[];for(const n in o.c)if(o.c.hasOwnProperty(n)){const s=o.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>i(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>i(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>i(t=>t.displayName===e)};var l=a;window.Lightcord.BetterDiscord.WebpackModules=a;class c{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(c.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;ne.channelTextArea&&e.titleWrapper)[0].channelTextArea.split(" ")[0]+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static formatString(e,t){for(const n in t){let s=t[n];Array.isArray(s)&&(s=JSON.stringify(s)),"object"==typeof s&&null!==s&&(s=s.toString()),e=e.replace(new RegExp(`{{${n}}}`,"g"),s)}return e}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const u=e[t];let h=!1;const p=()=>{a||console.log("unpatch",t,"of",c),h=!0};return e[t]=function(){if(h)return u.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:p,originalMethod:u,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=d.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&d.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&d.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&p(),n.returnValue},Object.assign(e[t],u),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=u,e[t].toString=function(){return u.toString()}),p}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar.split(" ")[9]+" + div")||null,t=e?e.querySelector("."+BDModules.get(e=>e.membersWrap)[0].membersWrap):null,n=e?e.querySelector("form"):null,s=e?e.getBoundingClientRect().left:310,r=t?t.getBoundingClientRect().left:0,o=r?r-e.getBoundingClientRect().left:d.screenWidth-s-240,i=n?n.offsetHeight:80,a=document.createElement("div");a.classList.add("bd-toasts"),a.style.setProperty("left",s+"px"),a.style.setProperty("width",o+"px"),a.style.setProperty("bottom",i+"px"),document.querySelector("#app-mount").appendChild(a)}const{type:n="",icon:s=!0,timeout:r=3e3}=t,o=document.createElement("div");o.classList.add("bd-toast"),n&&o.classList.add("toast-"+n),n&&s&&o.classList.add("icon"),o.innerText=e,document.querySelector(".bd-toasts").appendChild(o),setTimeout(()=>{o.classList.add("closing"),setTimeout(()=>{o.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},r)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),c.query("#app-mount").append(o);const i=[];return{close:()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=c.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=c.createElement('
');for(const n of e){const e=c.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),d.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&c.removeClass(t,"selected"),c.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[c.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{c.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),c.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=l.findByProps("push","update","pop","popWithKey"),n=l.findByProps("fixed","improved"),s=l.findByDisplayName("Text"),r=l.findByProps("Child"),o=l.findByProps("Tags","default"),i=l.find(e=>e.defaultProps&&0==e.defaultProps.selectable),a=l.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&a))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p=`v${de}`,footer:m}=e,g=ie.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,a.parse(d)));for(let e=0;eg("li",null,a.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=l.find(e=>"Anchor"==e.displayName),n=l.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),ie.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=l.findByProps("openModal","updateModal"),r=l.findByDisplayName("Markdown"),o=l.findByDisplayName("ConfirmModal");if(!s||!o||!r)return d.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:c=i,confirmText:u="Okay",cancelText:h="Cancel",danger:p=!1,key:m}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?ie.React.createElement(r,null,e):e),s.openModal(n=>ie.React.createElement(o,Object.assign({header:e,red:p,confirmText:u,cancelText:h,onConfirm:a,onCancel:c},n),t),{modalKey:m})}static removeDa(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}}d.showToast=d.suppressErrors(d.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=d;const u=window.require,h=n(2),p=n(1),m=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";var g=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{h.existsSync(this.BDFile)||h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary");const e=JSON.parse(h.readFileSync(this.BDFile,"binary"));if(e.hasOwnProperty("settings")&&(this.data=e),!h.existsSync(this.settingsFile))return;let t=u(this.settingsFile);h.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[m]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),d.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=p.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=p.resolve(ve.dataPath,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=p.resolve(ve.dataPath,"bdsettings.json"))}getPluginFile(e){return p.resolve(se.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[m][e]||null}setSettingGroup(e,t){this.data.settings[m][e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,h.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"binary")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:h.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(h.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],h.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"binary")}};const f=n(5);var b=new class extends f{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class y{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return se.pluginsFolder}}y.prototype.loadPlugins=async function(){this.loadPluginData(),be.splice(0,0,...await se.loadPlugins());const e=Object.keys(Ce);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},y.prototype.startPlugin=function(e,t=!1){try{Ce[e].plugin.start(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has started.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be started.`,{type:"error"}),Ee[e]=!1,this.savePluginData(),d.err("Plugins",e+" could not be started.",n)}},y.prototype.stopPlugin=function(e,t=!1){try{Ce[e].plugin.stop(),me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} has stopped.`)}catch(n){me["fork-ps-2"]&&!t&&d.showToast(`${Ce[e].plugin.getName()} v${Ce[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),d.err("Plugins",Ce[e].plugin.getName()+" could not be stopped.",n)}},y.prototype.enablePlugin=function(e,t=!1){Ee[e]||(Ee[e]=!0,this.savePluginData(),this.startPlugin(e,t))},y.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},y.prototype.disablePlugin=function(e,t=!1){Ee[e]&&(Ee[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},y.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},y.prototype.togglePlugin=function(e){Ee[e]?this.disablePlugin(e):this.enablePlugin(e)},y.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},y.prototype.loadPlugin=async function(e){const t=await se.loadContent(e,"plugin");if(t)return me["fork-ps-1"]&&d.showContentErrors({plugins:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(Ce).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){me["fork-ps-1"]&&d.showContentErrors({plugins:[e]})}d.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),b.dispatch("plugin-loaded",n.getName())},y.prototype.unloadPlugin=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const n=t.plugin.getName();Ee[n]&&this.disablePlugin(n,!0);const s=se.unloadContent(Ce[n].filename,"plugin");if(delete Ce[n],s)return me["fork-ps-1"]&&d.showContentErrors({plugins:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("plugin-unloaded",n)},y.prototype.delete=function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(se.pluginsFolder,t.filename);n(2).unlinkSync(s)},y.prototype.reloadPlugin=async function(e){const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=Ee[n];s&&this.stopPlugin(n,!0);const r=await se.reloadContent(Ce[n].filename,"plugin");if(r)return me["fork-ps-1"]&&d.showContentErrors({plugins:[r]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,r);Ce[n].plugin.load&&"function"==typeof Ce[n].plugin.load&&Ce[n].plugin.load(),s&&this.startPlugin(n,!0),d.log("ContentManager",`${n} v${Ce[n].plugin.getVersion()} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${Ce[n].plugin.getVersion()} was reloaded.`,{type:"success"}),b.dispatch("plugin-reloaded",n)},y.prototype.reload=function(e){return this.reloadPlugin(e)},y.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(Ce).find(t=>t.filename==e)||Ce[e];if(!t)return;const s=n(1).resolve(se.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(`${s}`)},y.prototype.updatePluginList=function(){const e=se.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},y.prototype.loadPluginData=function(){const e=g.getSettingGroup("plugins");e&&Object.assign(Ee,e)},y.prototype.savePluginData=function(){g.setSettingGroup("plugins",Ee)},y.prototype.newMessage=function(){const e=Object.keys(Ce);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()})}get container(){return document.querySelector("."+BDModules.get(e=>e.popouts)[0].popouts.split(" ")[0]+" ~ ."+BDModules.get(e=>e.layerContainer)[0].layerContainer.split(" ")[0])}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=d.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=d.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${k().tooltip} ${M(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(M("top")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(M("bottom")),this.element.style.setProperty("top",N(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(M("left")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(M("right")),this.element.style.setProperty("left",N(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",N(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",N(e-this.element.offsetHeight/2))}}var L=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=ie.reactDom.findDOMNode(this),this.tooltip=new P(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},A=n(2),T=n(1);const R={},$={};var j=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();E()(e.url,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=w.createHash("sha256");let o=Buffer.alloc(0);n.body.on("data",e=>{o=Buffer.concat([o,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");$[e.url]=n,O[n]=e.url,_(n,o,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;W||(W=BDModules.get(e=>e.flowerStarContainer)[0]);F||(F=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let o of s.children)"A"===o.tagName?o.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),d.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{r.remote.shell.openExternal(o.href)}})}):["div"].includes(o.tagName.toLowerCase())&&e(o)};e(s.parentNode)}catch(e){console.error(e)}ie.reactDom.render(ie.react.createElement(L,{text:t.type+" "+t.name+" is potentially dangerous."},ie.react.createElement("div",{className:W.flowerStarContainer,style:{width:"20px",height:"20px"}},ie.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},ie.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(L,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},ie.react.createElement("div",{className:W.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:W.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},ie.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:F.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),ie.react.createElement(L,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:W.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:W.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=ie.react.createElement("span",{style:{display:"inherit"}},[ie.react.createElement(L,{text:t.type+" "+t.name+" is certified by Lightcord."},ie.react.createElement("div",{className:W.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},ie.react.createElement("svg",{className:W.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),ie.react.createElement("div",{className:F.childContainer},ie.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},ie.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),ie.react.createElement(L,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},ie.react.createElement("div",{className:W.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){d.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=z($).find(e=>e[1]===t.hash)[0];console.log(e),E()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(T.join)("Plugin"===t.type?se._pluginsFolder:se._themesFolder,t.filename);console.log(s),Object(A.writeFileSync)(s,n),d.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),d.showToast(e.message,{type:"error"})})}})}},ie.react.createElement("svg",{className:W.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);ie.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return R[e]&&!R[e].suspect}};const O={};function _(e,t,n,s,o){if(console.log(`File: ${n} hash: ${e}`),R[e]){const t=R[e];s(t)}else E()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":r.remote.getCurrentWebContents().userAgent}}).then(async r=>{if(200!==r.status)return n.endsWith(".theme.css")?o(e):void function(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);R[e]={suspect:!0,name:O[e].split("/").pop(),type:O[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${R[e].type.toLowerCase()}: ${R[e].name}`),n(R[e])}(e,t,s,o,n);const i=await r.json();i.hash=e,i.filename=n,R[e]=i,s(i)}).catch(console.error)}function I(e,t,n=(e=>{}),s=!1){const r=w.createHash("sha256");let o=Buffer.alloc(0);Object(A.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(O[i]=e,s&&te[i]){let e=te[i];if(!(e.timestampe.flowerStarContainer)[0],F=BDModules.get(e=>e.childContainer)[0];function z(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let H=null,U=null;function q(){H=[w.randomBytes(16).toString("base64"),w.randomBytes(32).toString("base64")]}function G(e){let t=[Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")],n=w.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;U=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(H)))},setInterval(()=>{U()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return q(),void U();H=e}catch(e){q(),U()}});n(5);const V=n(1),J=n(2),Z=n(6).Module;Z.globalPaths.push(V.resolve(n(0).remote.app.getAppPath(),"node_modules"));class Y extends Error{constructor(e){super(e),this.name="MetaError"}}const K=Z._extensions[".js"],X=Z._extensions[".css"]?Z._extensions[".css"]:()=>null,Q=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,ee=/^\\@/;let te={},ne=!1;var se=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ne||(ne=!0,Z._extensions[".js"]=this.getContentRequire("plugin"),Z._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=J.realpathSync(V.resolve(ve.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=J.realpathSync(V.resolve(ve.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof g.getSettingGroup("PluginCertifierHashes"))g.setSettingGroup("PluginCertifierHashes",G("{}"));else try{te=JSON.parse(function(e){try{let t=w.createDecipheriv("aes-256-cbc",Buffer.from(H[1],"base64"),Buffer.from(H[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(g.getSettingGroup("PluginCertifierHashes")))}catch(e){g.setSettingGroup("PluginCertifierHashes",G("{}")),te={}}Object.keys(te).forEach(e=>{let t=te[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete te[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete te[e];t.hash===e?t.result.suspect&&delete te[e]:delete te[e]}),this.saveAddonCache()}saveAddonCache(){g.setSettingGroup("PluginCertifierHashes",G(JSON.stringify(te)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=J.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{J.statSync(V.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?v.unloadPlugin(r):oe.unloadTheme(r)}if(!J.statSync(V.resolve(n,r)).isFile())return;const o=J.statSync(V.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await v.loadPlugin(r):await oe.loadTheme(r)),"change"==e&&(t?await v.reloadPlugin(r):await oe.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new Y("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new Y("META was not found.");const s=d.testJSON(n);if(!s)throw new Y("META could not be parsed.");if(!s.name)throw new Y("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(Q))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(ee,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?K:X;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=V.resolve(o,V.basename(r));if(!J.existsSync(i)||r!==J.realpathSync(i))return Reflect.apply(s,this,arguments);let a=J.readFileSync(r,"utf8");a=d.stripBOM(a);const l=J.statSync(r),c=n.extractMeta(a);if(c.filename=V.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename),!d.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):(d.warn("Module Not Exported",`${c.name}, please start setting module.exports`),a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`)}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(me["fork-ps-6"]){let t=await new Promise(t=>{I(V.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(te[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(V.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(V.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:{message:"Cannot read property 'replace' of undefined",stack:"Cannot read property 'replace' of undefined"}};if(r.id=d.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete Ce[r.plugin.getName()],Ce[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete we[r.name],we[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(V.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=J.readdirSync(s),o=Object.values(t?Ce:we),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&J.statSync(V.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=J.readdirSync(s);for(const t of o){if(!J.statSync(V.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class re{constructor(){window.Lightcord.BetterDiscord.ThemeModule=this}get folder(){return se.themesFolder}}re.prototype.loadThemes=async function(){this.loadThemeData(),ye.splice(0,0,...await se.loadThemes());const e=Object.keys(we);for(let t=0;tsetTimeout(e,10))}for(const e in xe)we[e]||delete xe[e];this.saveThemeData()},re.prototype.enableTheme=function(e,t=!1){xe[e]=!0,this.saveThemeData();const n=we[e];c.addStyle(c.escapeID(n.id),unescape(n.css)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been applied.`)},re.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},re.prototype.disableTheme=function(e,t=!1){xe[e]=!1,this.saveThemeData();const n=we[e];c.removeStyle(c.escapeID(n.id)),me["fork-ps-2"]&&!t&&d.showToast(`${n.name} v${n.version} has been disabled.`)},re.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},re.prototype.toggleTheme=function(e){xe[e]?this.disableTheme(e):this.enableTheme(e)},re.prototype.toggle=function(e,t=!1){return this.toggleTheme(e,t)},re.prototype.loadTheme=async function(e){const t=await se.loadContent(e,"theme");if(t)return me["fork-ps-1"]&&d.showContentErrors({themes:[t]}),me["fork-ps-2"]&&d.showToast(`${e} could not be loaded. It may not have been loaded.`,{type:"error"}),d.err("ContentManager",`${e} could not be loaded.`,t);const n=Object.values(we).find(t=>t.filename==e);d.log("ContentManager",`${n.name} v${n.version} was loaded.`),me["fork-ps-2"]&&d.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),b.dispatch("theme-loaded",n.name)},re.prototype.unloadTheme=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const n=t.name;xe[n]&&this.disableTheme(n,!0);const s=se.unloadContent(we[n].filename,"theme");if(delete we[n],s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be unloaded. It may have not been loaded yet.`,{type:"error"}),d.err("ContentManager",`${n} could not be unloaded. It may have not been loaded yet.`,s);d.log("ContentManager",`${n} was unloaded.`),me["fork-ps-2"]&&d.showToast(`${n} was unloaded.`,{type:"success"}),b.dispatch("theme-unloaded",n)},re.prototype.delete=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(se.themesFolder,t.filename);n(2).unlinkSync(s)},re.prototype.reloadTheme=async function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return this.loadTheme(e);const n=t.name,s=await se.reloadContent(we[n].filename,"theme");if(xe[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return me["fork-ps-1"]&&d.showContentErrors({themes:[s]}),me["fork-ps-2"]&&d.showToast(`${n} could not be reloaded.`,{type:"error"}),d.err("ContentManager",`${n} could not be reloaded.`,s);d.log("ContentManager",`${n} v${we[n].version} was reloaded.`),me["fork-ps-2"]&&d.showToast(`${n} v${we[n].version} was reloaded.`,{type:"success"}),b.dispatch("theme-reloaded",n)},re.prototype.reload=function(e){return this.reloadTheme(e)},re.prototype.edit=function(e){const t=Object.values(we).find(t=>t.filename==e)||we[e];if(!t)return;const s=n(1).resolve(se.themesFolder,t.filename);n(0).shell.openItem(`${s}`)},re.prototype.updateThemeList=function(){const e=se.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},re.prototype.loadThemeData=function(){const e=g.getSettingGroup("themes");e&&Object.assign(xe,e)},re.prototype.saveThemeData=function(){g.setSettingGroup("themes",xe)};var oe=new re,ie=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};const ae="0.0.306",le=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",ce="0.3.0",de="0.3.5",ue={description:"BBD's changelog.",changes:[{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`.","Fixed the open folder buttons for plugins and themes"]}]},he={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Themes in Popout Window":{id:"lightcord-9",info:"Enable themes in Popout Window. (For example, when detaching screenshare.)",implemented:!0,hidden:!1,cat:"core",category:"content manager",experimental:!0},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"React DevTools":{id:"reactDevTools",info:"Adds react developer tools to the devtools. Must be installed in Google Chrome on your pc.",implemented:!0,hidden:!0,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},pe={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!0,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,reactDevTools:!1,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,"lightcord-9":!1,no_window_bound:!1},me={},ge={},fe={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},be=[],ye=[],ve=Object.create(BetterDiscordConfig),we={},Ce={},Ee={},xe={};class Se{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var ke=new class{injectColoredText(){this.cancelColoredText||ie.MessageComponent&&(this.cancelColoredText=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=me["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},De=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!me["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=d.monkeyPatch(ie.TimeFormatter,"calendarFormat",{after:t}),s=d.monkeyPatch(ie.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Me extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},ie.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},ie.react.createElement("path",{d:"M0 0h12v12H0"}),ie.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Be extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return ie.react.createElement("div",{className:"tools-container "+e.toolsContainer},ie.react.createElement("div",{className:"tools "+e.tools},ie.react.createElement("div",{className:t.container},ie.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},ie.react.createElement(Me,null)),ie.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Ne extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Pe extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Le extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Ae extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return ie.react.createElement("div",{className:`ui-tab-bar-item${this.props.selected?" selected":""}`,onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class Te extends ie.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return ie.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},ie.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),ie.react.createElement("div",{className:n.flexChild+" bd-server-content"},ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),ie.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),ie.react.createElement("div",{className:n.horizontal+" "+s.noWrap},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},ie.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),ie.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},ie.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},ie.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},ie.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&ie.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},ie.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class Re extends ie.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return ie.react.createElement("div",{key:"scrollerwrap",className:n},ie.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}const $e=Re.prototype.render;Object.defineProperty(Re.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>$e});class je extends ie.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return ie.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},ie.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},ie.react.createElement(Re,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),ie.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},ie.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},ie.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},ie.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},ie.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class Oe extends ie.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=ie.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=ie.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=ie.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=ie.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){ie.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next=`?from=${o}`,n.state.term&&(s.next+=`&term=${n.state.term}`),n.state.selectedCategory&&(s.next+=`&category=${n.categoryButtons[n.state.selectedCategory]}`),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=` for ${n.state.term}`),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[ie.react.createElement(Te,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),ie.react.createElement(Te,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return ie.react.createElement(je,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:ie.react.createElement(Be,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return ie.react.createElement("div",{className:"sidebar",key:"ps"},ie.react.createElement("div",{className:"ui-tab-bar SIDE"},ie.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),ie.react.createElement(Pe,null),this.searchInput,ie.react.createElement(Pe,null),ie.react.createElement(Le,{text:"Categories"}),this.categoryButtons.map((e,t)=>ie.react.createElement(Ae,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),ie.react.createElement(Pe,null),this.footer,this.connection))}get searchInput(){return ie.react.createElement("div",{className:"ui-form-item"},ie.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},ie.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n=`?term=${e.target.value}`;0!==t.state.selectedCategory&&(n+=`&category=${t.categoryButtons[t.state.selectedCategory]}`),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search(`?category=${t.categoryButtons[e]}`,!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},ie.react.createElement(Ne,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>ie.react.createElement(Te,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&ie.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},ie.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&ie.react.createElement(Ne,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[ie.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",ie.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},ie.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return ie.react.createElement("div",{className:"ui-tab-bar-header"},ie.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?ie.react.createElement("span",null):ie.react.createElement("span",null,ie.react.createElement(Pe,null),ie.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),ie.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},ie.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},ie.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class _e extends ie.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&ie.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=c.query(`#${this.props.id}`);c.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=c.query(".publicServersOpen");t.classList.remove("publicServersOpen"),c.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=c.query('[class*="layer-"]');e.classList.add("publicServersOpen"),c.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return ie.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var Ie=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return ie.react.createElement(_e,{rootId:"pubslayerroot",id:"pubslayer"},ie.react.createElement(Oe,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[BDModules.get(e=>e.layers&&e.layer)[0].layers.split(" ")[0]];const t=c.query(".layers, ."+e);return!!t&&(t.append(c.createElement("
")),!0)}render(){const e=this.root;e?ie.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=c.createElement(`
`);me["bda-gs-1"]||(e.style.display="none");const t=c.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[d.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(c.query("#bd-pub-li"))return;const t=c.query(`div.${e} > div`);c.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=l.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=l.findByDisplayName("Guilds");e||t||d.warn("PublicServer","Can't find GuildList component"),this.guildPatch=d.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch,c.query("#bd-pub-li").remove()}};var We=new class{start(){c.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){c.removeStyle("VoiceMode")}};const Fe=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var ze=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(l.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(l.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Fe.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Fe);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(`${e}-`)||(r+=` ${t}`);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add(`da-${s}`)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=c.query("."+d.removeDa(s.menu));if(!r){const t=c.query("#app-mount > ."+d.removeDa(n.layerContainer)),o=c.createElement(`
`);r=c.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=c.createElement(`
`),l=c.createElement(`
`);a.append(l),r.append(a);const u=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",u),document.removeEventListener("contextmenu",u),document.removeEventListener("keyup",u))};document.addEventListener("click",u),document.addEventListener("contextmenu",u),document.addEventListener("keyup",u)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=c.createElement('
'),l=c.createElement(``);if(l.append(c.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{ie.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=c.queryAll("div[role=menuitem]."+d.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=c.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}getRules(e,t=e.ownerDocument.styleSheets){return[...t].filter(e=>!e.href||!e.href.includes("BetterDiscordApp")).map(e=>[...e.cssRules||[]]).flat().filter(t=>t&&t.selectorText&&e.matches(t.selectorText)&&t.style.length&&t.selectorText.split(", ").length<8&&!t.selectorText.split(", ").includes("*"))}};const Ue=ie.React;class qe extends Ue.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this)}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return Ue.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}}let Ge=[];function Ve(e){let t=Ge.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(e=>e.name)[0],Ge.push(t),t)}class Je extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return Ge.find(e=>e.startsWith("beta-"))||Ge.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ve("beta")},"(EXPERIMENTAL)")]),ie.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},ie.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},ie.react.createElement("h3",{className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),ie.react.createElement(qe,{onChange:this.onChange,checked:this.props.checked})),ie.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Ze extends ie.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?ie.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[ie.react.createElement(Ne,{text:e}),s,t.map(e=>ie.react.createElement(Je,{id:e.id,key:e.id,data:e,checked:me[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Ye=BDModules.get(e=>e.marginTop60)[0];class Ke extends React.Component{render(){return Ye||(Ye=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Ye.marginTop60})}}class Xe extends ie.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?ie.react.createElement(Ke,{}):null,ie.react.createElement(Ze,Object.assign({},e,{onChange:this.props.onChange}))])}}class Qe extends ie.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return ie.react.createElement("li",null,ie.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},ie.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},ie.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),ie.react.createElement("span",null)),ie.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class et extends ie.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){c.addClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){c.removeClass(c.query("#app-mount"),"bd-detached-editor"),ie.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}get root(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}render(){const e=this;return ie.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},ie.react.createElement("div",{id:"bd-customcss-innerpane"},ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Qe,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Vn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":c.query("#editor-detached")&&t.props.attach(),ie.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}}class tt extends ie.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=ie.react.createElement(et,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||ie.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/monokai"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{me["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&ie.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=g.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=atob(e)),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&ie.react.createElement("div",{id:"editor-detached"},ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("h3",null,"Editor Detached"),ie.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&ie.react.createElement("div",null,ie.react.createElement(Ne,{text:"Custom CSS Editor"}),ie.react.createElement("div",{className:"editor-wrapper"},ie.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),ie.react.createElement("div",{id:"bd-customcss-attach-controls"},ie.react.createElement("ul",{className:"checkbox-group"},ie.react.createElement(Qe,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:me["bda-css-0"]})),ie.react.createElement("div",{id:"bd-customcss-detach-controls-button"},ie.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),ie.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),ie.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),ie.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),ie.react.createElement("div",{className:"help-text"},"Press ",ie.react.createElement("code",{className:"inline"},"ctrl"),"+",ie.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":me["bda-css-0"]=t,Vn.saveSettings()}}updateCss(){c.removeStyle("customcss"),c.addStyle("customcss",this.editor.session.getValue())}saveCss(){g.setBDData("bdcustomcss",btoa(this.editor.session.getValue()))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?ie.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=c.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=c.query(".app, ."+BDModules.get(e=>e.app&&e.layers)[0].app.split(" ")[0]);return!!e&&(c.insertAfter(c.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class nt extends ie.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?ie.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const st=nt.prototype.render;Object.defineProperty(nt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>st});class rt extends ie.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class ot extends ie.reactComponent{constructor(e){super(e)}render(){return ie.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},ie.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),ie.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const it=ie.React;class at extends it.Component{render(){const e=this.props.size||"24px";return it.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},it.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),it.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const lt=ie.React;class ct extends lt.Component{render(){const e=this.props.size||"24px";return lt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},lt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),lt.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),lt.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const dt=ie.React,ut=ie.anchorClasses;class ht extends ie.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),me["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="contentRegionScroller-"]');if(!((e,t)=>{if(!e)return console.error(new Error("Container is undefined.")),!1;const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=c.offset(e),s=c.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;c.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){d.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return ie.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},ie.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},ie.react.createElement(Me,null)),"object"==typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&ie.react.createElement("div",{id:`plugin-settings-${this.name}`,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=dt.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=dt.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${ut.anchor} ${ut.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{ie.LayerStack.popLayer(),ie.openDM(n.id)})),s[i]=dt.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),ie.react.createElement("a",n,e)}makeButton(e,t,n){return dt.createElement(L,{color:"black",side:"top",text:e},dt.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),ie.LayerStack.popLayer(),ie.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&ie.react.createElement("div",{className:"bd-card-footer bda-footer"},ie.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),ie.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},ie.react.createElement("div",{className:"bd-addon-header bda-header"},ie.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),ie.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",dt.createElement(at,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",dt.createElement(ct,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",dt.createElement(ot,{className:"bd-icon"}),this.reload),dt.createElement(qe,{onChange:this.onChange,checked:this.state.checked}))),ie.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},ie.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const pt=ht.prototype.render;Object.defineProperty(ht.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>pt});const mt=ie.React;class gt extends mt.Component{render(){const e=this.props.size||"16px";return mt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},mt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const ft=ie.React;class bt extends ft.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=ft.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return ft.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>ft.createElement("div",{className:`bd-select-option${e.value==t.value?" selected":""}`,onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return ft.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},ft.createElement("div",{className:"bd-select-value"},this.selected.label),ft.createElement(gt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const yt=ie.React;class vt extends yt.Component{render(){const e=this.props.size||"16px";return yt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},yt.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),yt.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const wt=ie.React;class Ct extends wt.Component{render(){return wt.createElement("div",{className:"bd-search-wrapper"},wt.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50"}),wt.createElement(vt,null))}}function Et(){return(Et=Object.assign||function(e){for(var t=1;t{ks.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:me["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(Ce):Object.values(we)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin[`get${n}`]?this.getString(e.plugin[`get${n}`]()):e[this.state.sort],r=t.plugin&&t.plugin[`get${n}`]?this.getString(t.plugin[`get${n}`]()):t[this.state.sort];return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{try{d.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{d.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),d.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),d.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1},"Check for Updates"))):null:null}render(){const e=St.createElement(xt,{color:"black",position:"top",text:"Reload List"},e=>St.createElement(ot,Et({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?v.updatePluginList():oe.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return St.createElement(rt,{title:`${this.props.type.toUpperCase()}—${t.length}`},St.createElement("button",{key:"folder-button",className:"bd-button bd-pfbtn",onClick:this.openFolder.bind(this)},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!me["fork-ps-5"]&&e,St.createElement("div",{className:"bd-controls bd-addon-controls"},St.createElement(Ct,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),St.createElement("div",{className:"bd-addon-dropdowns"},St.createElement("div",{className:"bd-select-wrapper"},St.createElement("label",{className:"bd-label"},"Sort by:"),St.createElement(bt,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),St.createElement("div",{className:"bd-select-wrapper"},St.createElement("label",{className:"bd-label"},"Order:"),St.createElement(bt,{options:this.directions,onChange:this.reverse,style:"transparent"})))),St.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const Dt=kt.prototype.render;Object.defineProperty(kt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Dt});const Mt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,Bt=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Nt=process.pid;var Pt=new class{constructor(){this.enabled=!1,this.game=ge}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Mt.dispatch({type:Bt.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Nt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(ge||Object.create(fe)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};ie.react,BDModules.get(e=>e.Interval)[0];function Lt(){return(Lt=Object.assign||function(e){for(var t=1;te.default&&e.default.open&&e.default.fetchMutualFriends)[0];React.Component;function Tt(){return(Tt=Object.assign||function(e){for(var t=1;tt=e);jt[e]=n;const s=[];for(let t of Ft.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!me["lightcord-5"])return t([]);Ot.push([e,t]),setTimeout(()=>{let e=Ot;0!==e.length&&(Ot=[],It(zt.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof Wt||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)Ft.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(Ft.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete jt[e],s}};const It=function(e,t,n){return me["lightcord-5"]?E()(`${Ft.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new Wt("The current settings blocked the request."))};class Wt extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const Ft={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:At,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:Rt,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},zt={badges:"/users/badges"},Ht=ie.React;let Ut;class qt extends Ht.Component{constructor(e){super(e),this.state={data:g.getSettingGroup("rpc")||fe,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=Gt.find(t=>t.id===e.props.id);this.setState({data:Object.assign(ge,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),g.setSettingGroup("rpc",ge),this.preview.forceUpdate(),Pt.set(ge)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Pt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ut||(Ut=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[Ht.createElement(Ze,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),Ht.createElement(Ke,null),Ht.createElement(Ne,{text:"RichPresence"}),Ht.createElement("div",null,this.optionsComponents),Ht.createElement("div",null,Ht.createElement(Ke,null),Ht.createElement(Ne,{text:"Preview"}),Ht.createElement(dn,{settings:this})),Ht.createElement("div",{className:e.marginBottom20}),Ht.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),Ht.createElement("button",{style:{opacity:.01},onClick:()=>{r.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=Gt.map(e=>{if("text"===e.type)return Ht.createElement(Yt,{setting:e,manager:this,id:e.id});if("number"===e.type){return[Ht.createElement(Kt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?Ht.createElement(Xt,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const Gt=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let Vt,Jt,Zt;class Yt extends Ht.PureComponent{get modules(){return Vt&&Vt[0]?Vt:Vt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Ht.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),Ht.createElement(cn,null))}}class Kt extends Ht.PureComponent{get modules(){return Jt||(Jt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Ht.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?Ht.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),Ht.createElement(cn,null))}}class Xt extends Ht.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Zt||(Zt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),Ht.createElement("div",{className:t.row+" "+n.marginBottom20},Ht.createElement("div",{className:`${t.item} ${i.flexChild}`},Ht.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Ht.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),Ht.createElement(cn,null))}}let Qt,en,tn,nn,sn,rn,on,an,ln=[];class cn extends Ht.PureComponent{get modules(){return ln&&ln[0]?ln:ln=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return Ht.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}Ht.Component;class dn extends Ht.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return Ht.createElement("div",{className:"lc-tabWrapper"},Ht.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},Ht.createElement(un,{preview:this,title:"Full Profile",id:"profile"}),Ht.createElement(un,{preview:this,title:"User Popout",id:"popout"})),Ht.createElement(hn,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?mn:pn}}class un extends Ht.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",Ht.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class hn extends Ht.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Qt=Qt||ie.WebpackModules.find(e=>e.emptyStateImage&&e.emptyState),Qt?Ht.createElement("div",{style:{margin:"20px"}},Ht.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:`lc-tab-box-shadow ${Qt.emptyState}`},Ht.createElement("div",{className:Qt.emptyStateImage,style:{marginTop:"20px"}}),Ht.createElement("div",{className:Qt.emptyStateHeader},"An error occured"),Ht.createElement("p",{className:Qt.emptyStateSubtext},"Please check the console for more informations. Join our ­",Ht.createElement("a",{className:`${ie.anchorClasses.anchor} ${ie.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{ie.joinLC()}},"support server"),"­ for help."))):(d.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class pn extends Ht.Component{get modules(){return en||(en=[ie.WebpackModules.find(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!tn){if(!e)throw new Error("Couldn't find the UserPopout component.");const t=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render();nn=t.props;const s=t.type.render(nn,null),r=new s.type(s.props).render();tn=r.type}if(!tn)throw new Error("Couldn't find the UserPopoutComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});nn=new e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0}).render().props;const o=new tn(Object.assign({},nn,{activity:r})).render().props.children,i=Ht.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return Ht.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class mn extends Ht.Component{get modules(){return sn||(sn=[ie.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),ie.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!rn){const t=new e.default({user:n}).render();an=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();rn=o.type}if(!rn)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},fe,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||fe.name,application_id:this.game.application_id||fe.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});on=new an({user:n,close:()=>{}}).render().props;const o=new rn(Object.assign({},on,{activity:r})).render().props.children;return o.props.style={width:"auto"},Ht.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const gn=ie.React;let fn=BDModules.get(e=>e.defaultMarginh5)[0],bn=BDModules.get(e=>e.colorStandard)[0],yn=BDModules.get(e=>e.size32)[0],vn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const wn=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,Cn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,En=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,xn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class Sn extends gn.Component{constructor(e){super(e)}render(){return fn||(fn=BDModules.get(e=>e.defaultMarginh5)[0]),bn||(bn=BDModules.get(e=>e.colorStandard)[0]),yn||(yn=BDModules.get(e=>e.size32)[0]),[gn.createElement(Ne,{text:"Account Infos"}),gn.createElement("div",null,gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Profile"),gn.createElement(Bn,{content:this.getProfileValue(),language:"diff"}),gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Statistics"),gn.createElement(Bn,{content:this.getStatistics(),language:"diff"}),gn.createElement("h5",{className:bn.colorStandard+" "+yn.size14+" "+fn.h5+" "+fn.defaultMarginh5},"Connected Sessions"),gn.createElement(Bn,{content:this.getSessionValue(),language:"diff"})),gn.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=En.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=xn.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(wn.getGuilds()),t=Object.keys(Cn.getRelationships()),n=t.filter(e=>Cn.isFriend(e)),s=t.filter(e=>Cn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let kn=BDModules.get(e=>e.highlight)[0],Dn=BDModules.get(e=>e.markup)[0],Mn=BDModules.get(e=>e.messageContent)[0];class Bn extends gn.Component{render(){return Dn||(Dn=BDModules.get(e=>e.markup)[0]),Mn||(Mn=BDModules.get(e=>e.messageContent)[0]),vn||(vn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),kn||(kn=BDModules.get(e=>e.highlight)[0]),gn.createElement("div",{class:`${Dn.markup} ${Mn.messageContent}`},gn.createElement("pre",null,gn.createElement("code",{class:`${vn.scrollbarGhostHairline} hljs`,dangerouslySetInnerHTML:{__html:kn.highlight(this.props.language,this.props.content).value}})),gn.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const Nn=window.Lightcord.DiscordModules.dispatcher,Pn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0],An=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const Tn={};let Rn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var $n=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Nn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,Nn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(Rn?Rn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Pn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(Tn[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||jn(n,"discord.gg/")||jn(n,"discord.com/invite/")||jn(n,"discordapp.com/invite/"))&&(Tn[e.message.author.id]=!0,d.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),Ln||(Ln=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),Ln.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),An||(An=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),An.default.closePrivateChannel(t.id,!1)))))}};function jn(e,t){let n=e.embeds||[];return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!(e.fields||[]).map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let On;const _n=d.removeDa;var In=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,On=On||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=_n(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${_n(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${_n(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${_n(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${_n(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${_n(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${_n(s.userSettingsSecurity)} .${_n(r.children)} > div:nth-child(2)`)),console.log(n),n}(),On||console.error(new Error("Couldn't find selectors to blur personnal informations.")),c.addStyle("blurPrivate",`\n${On.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${On.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,c.removeStyle("blurPrivate"))}},Wn=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};$t();let Fn;class zn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Fn||(Fn=l.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Fn.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Fn.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel.",React.createElement("div",{style:{marginTop:"20px"}}),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"info"},"All these components have error handling. If you want none, add `.original` after the component path."),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"warn"},"We do not recommend modifying these component by a plugin. Only do this if you know what you are doing.")),React.createElement(Ke,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{r.remote.shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs")},wrapper:!1},"Documentation")),e.map(e=>{let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=t=>{this.setState({states:[Object.assign(s,t)].concat(this.state.states.filter(t=>t.elem!==e))})},s=this.state.states.find(t=>t.elem===e);s||(s={tab:"preview",elem:e,options:{}},this.state.states.push(s));let r=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(s.options).forEach(n=>{e[n]=t.find(e=>e.find(e=>e[n]))[s.options[n]][n]}),e},o=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\n marginTop: "20px", marginBottom: "20px"\n}},\n React.createElement("div", {style: {\n backgroundColor: "var(--background-secondary)",\n padding: "30px 30px",\n borderRadius: "8px"\n }, className: "lc-tab-box-shadow" },\n React.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n )\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},i=function(t){const n=e.displayName||e.name;const s=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=r();if("jsx"===t){let e,n=[],r=null;if(Object.keys(i).forEach(e=>{if("children"==e)r=o(i[e],s,t);else{let r=e+"=";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=`{${o(i[e],s,t)}}`,n.push(r)}}),r){return e=`<${s} ${n.join(" ")}>`,`${e}\n ${r}\n${``}`}return e=`<${s} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=o(e,s,t));let n=[];Object.keys(i).forEach(e=>{let r=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?r+=JSON.stringify(i[e]):r+=o(i[e],s,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(r)});let r="{";n.length?n.forEach((e,t)=>{let s=t===n.length-1;0===t||(r+=","),r+="\n ",r+=e,s&&(r+="\n}")}):r+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${s}, ${r}, ${a})`}},a=e.help||{},l=a.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},a.info):null,c=a.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},a.warn):null,d=a.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},a.danger):null,u=a.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},a.error):null,h=a.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},a.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),l,h,c,u,d,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(s.options[t]||"0"),onChange:e=>{n({options:Object.assign({},s.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:s.tab,children:"preview"===s.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,r()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:i("jsx")}),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:i("react")}))),onChange:e=>{n({tab:e})}}))})]}get renders(){}}const Hn=ie.React;class Un extends Hn.Component{render(){const e=this.props.size||"18px";return Hn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},Hn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),Hn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}class qn extends React.PureComponent{render(){let e=l.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(L,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{d.showChangelogModal(bbdChangelog)}},React.createElement(Un,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let Gn=!1;var Vn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Se,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Jn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Jn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Jn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Jn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Jn(()=>(new qn).render())),this.sidebar.register("core",Jn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Jn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Jn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Jn(this.renderAddonPane("themes")))}get root(){const e=c.query("#bd-settingspane-container");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e,t]=[BDModules.get(e=>e.layer&&e.animating)[0].layer.split(" ")[0],BDModules.get(e=>e.standardSidebarView)[0]];const n=c.query("."+e+" ."+t.standardSidebarView.split(" ")[0]+", ."+e+" .ui-standard-sidebar-view");if(!n)return!1;const s=c.createElement(`
`);return n.append(s),d.onRemoved(s,()=>{ie.reactDom.unmountComponentAtNode(s)}),!0}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}get MsgLogSettings(){return this.getSettings("msglog")}getSettings(e){return Object.keys(he).reduce((t,n)=>{const s=he[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onClick(){}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron"].includes(e)||(me[e]=t),"bda-gs-2"==e&&(t?c.addClass(document.body,"bd-minimal"):c.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?c.addClass(document.body,"bd-minimal-chan"):c.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?Ie.addButton():Ie.removeButton()),"bda-gs-4"==e&&(t?We.start():We.stop()),"bda-gs-5"==e&&(t?c.addClass(c.query("#app-mount"),"bda-dark"):c.removeClass(c.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&De.inject24Hour(),"bda-gs-7"==e&&(t?ke.injectColoredText():ke.removeColoredText()),"fork-ps-4"==e&&(t?ze.start():ze.stop()),"fork-ps-5"==e&&(t?(se.watchContent("plugin"),se.watchContent("theme")):(se.unwatchContent("plugin"),se.unwatchContent("theme"))),"fork-wp-1"==e&&(d.setWindowPreference("transparent",t),t?d.setWindowPreference("backgroundColor",null):d.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?He.startDebugListener():He.stopDebugListener()),"fork-dm-1"==e&&(t?He.startCopySelector():He.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Pt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Pt.disable();if("lightcord-3"===e&&(t?r.remote.getCurrentWindow().setAlwaysOnTop(!0):r.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?$n.enable():$n.disable()),"lightcord-6"===e&&(t?In.enable():In.disable()),"lightcord-7"===e&&(t?Wn.enable():Wn.disable()),"lightcord-8"===e){let e=r.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("no_window_bound"===e){let e=r.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}if("enable_glasstron"===e){let e=r.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),r.remote.app.relaunch(),r.remote.app.exit()}this.saveSettings()}async initializeSettings(){me["bda-gs-2"]&&c.addClass(document.body,"bd-minimal"),me["bda-gs-3"]&&c.addClass(document.body,"bd-minimal-chan"),me["bda-gs-1"]&&Ie.addButton(),me["bda-gs-4"]&&We.start(),me["bda-gs-5"]&&c.addClass(c.query("#app-mount"),"bda-dark"),me["bda-gs-6"]&&De.inject24Hour(),me["bda-gs-7"]&&ke.injectColoredText(),me["fork-ps-4"]&&ze.start(),me["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),me["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),me["lightcord-presence-1"]&&Pt.enable(),me["lightcord-3"]&&r.remote.getCurrentWindow().setAlwaysOnTop(!0),me["lightcord-4"]&&$n.enable(),me["lightcord-6"]&&In.enable(),me["lightcord-7"]&&Wn.enable(),me["fork-ps-5"]&&(se.watchContent("plugin"),se.watchContent("theme")),me["bda-gs-8"]&&He.startDebugListener(),me["fork-dm-1"]&&He.startCopySelector(),this.saveSettings()}saveSettings(){g.setSettingGroup("settings",me),g.setSettingGroup("rpc",ge)}loadSettings(){Object.assign(me,g.getSettingGroup("settings")),Object.assign(ge,g.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return ie.react.createElement(Xe,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=r.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:ie.react.createElement(Ke),ie.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=me[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0));let r=ie.react.createElement(Je,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),ie.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),r.remote.app.relaunch({args:r.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),r.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{Gn||(Gn=!0,d.showToast("Clearing cache...",{type:"info"}),t(),r.remote.getCurrentWebContents().session.clearCache().then(()=>{d.showToast("Cache is cleared !",{type:"success"}),Gn=!1,t()}).catch(e=>{console.error(e),d.showToast("An error occured. Check console for more informations.",{type:"error"}),Gn=!1,t()}))},wrapper:!0,disabled:Gn},"Clear cache")]}PresenceComponent(){return ie.react.createElement(qt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return ie.react.createElement(Sn,{key:"lapannel"})}ApiPreviewComponent(){return ie.react.createElement(zn,{key:"lapipannel"})}customCssComponent(){return ie.react.createElement(tt,{key:"csseditor"})}renderAddonPane(e){class t extends ie.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return ie.react.createElement(t,{type:e},ie.react.createElement(kt,{type:e}))}}};function Jn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class Zn extends ie.reactComponent{render(){return ie.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},ie.react.createElement("metadata",null),ie.react.createElement("defs",null,ie.react.createElement("filter",{id:"shadow1"},ie.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),ie.react.createElement("filter",{id:"shadow2"},ie.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),ie.react.createElement("filter",{id:"shadow3"},ie.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),ie.react.createElement("g",null,ie.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),ie.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function Yn(){return(Yn=Object.assign||function(e){for(var t=1;t/g};let Qn=BDModules.get(e=>e.CustomEmoji)[0],es=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],ts=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],ns=BDModules.get(e=>e.getAutocompleteOptions)[0],ss=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],rs=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],os=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],is=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var as=new class{constructor(){this.init().catch(e=>d.err("EmojiModule","An error occured",e))}async init(){if(ts||(ts=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),ns||(ns=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ss||(ss=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),rs||(rs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),os||(os=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),is||(is=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),ts&&ns&&ss&&rs&&os&&is){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",ns);const e=ns.getAutocompleteOptions;ns.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return ms(n),n},queryResults:e=>ss.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>ls(e,t,r.emojis,n,s,rs.default.Messages.EMOJI_MATCHING,rs.default.Messages.EMOJI,ts.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?os.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=d.monkeyPatch(ie.MessageComponent,"default",{before:e=>{if(!d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=d.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=Xn.EmojiRegex.exec(e),r){o=!0,es||(es=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=es.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(Qn||(Qn=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(Qn.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=` ${t}`,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function ls(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[cs(o,i,e,c),d]}function cs(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(ts.default.Title,{title:r},r)}cs.displayName="renderHeader";let ds=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],us=ds&&ds.default.isEmojiDisabled,hs=!1,ps=!1;function ms(e){hs=e,ps||(ds||(ds=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),ds&&(us||(us=ds.default.isEmojiDisabled),ps=!0,ds.default.isEmojiDisabled=function(e){return hs?!(!e.surrogates&&!e.diversity):us.call(this,...arguments)}))}const{ipcRenderer:gs}=n(0);function fs(){}let bs,ys,vs,ws;fs.prototype.setConfig=function(e){this.hasStarted||Object.assign(ve,e)},fs.prototype.setMethods=function(e){this.hasStarted||(bs=e)},fs.prototype.init=async function(){if(this.hasStarted)return;if(this.hasStarted=!0,!Array.prototype.flat)return void d.alert("Not Supported","BetterDiscord v"+de+" does not support this old version ("+le+") of Discord. Please update your Discord installation before proceeding.");if(ve.version
Please download the latest version from GitHub");if(window.ED)return void d.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void d.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");d.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),d.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),ie.initialize(),d.log("Startup","Updating Settings"),Vn.initializeSettings(),d.log("Startup","Loading Addons Cache"),await se.loadAddonCertifierCache(),d.log("Startup","Loading Plugins"),await v.loadPlugins(),d.log("Startup","Loading Themes"),await oe.loadThemes(),c.addStyle("customcss",atob(g.getBDData("bdcustomcss"))),window.addEventListener("beforeunload",(function(){me["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),j.start(),d.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),d.log("Startup","Initializing Main Observer"),this.initObserver(),me["fork-ps-1"]&&(d.log("Startup","Collecting Startup Errors"),d.showContentErrors({plugins:be,themes:ye}));const e=g.getBDData("version");if(de>e&&(ue&&this.showChangelogModal(ue),g.setBDData("version",de)),as.start(),d.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),d.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),d.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),d.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),d.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),d.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),d.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),d.suppressErrors(this.patchPopoutWindow.bind(this),"BD Popout Window Patch")(),ve.haveInstalledDefault){let e=d.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},fs.prototype.patchPopoutWindow=async function(){let e=!1;this.cancelPatchPopoutWindow=()=>{e=!0},window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getWindow).then(t=>{if(e)return;const n=window.Lightcord.DiscordModules.dispatcher._interceptor;window.Lightcord.DiscordModules.dispatcher.setInterceptor((function(e){if(e&&"POPOUT_WINDOW_OPEN"===e.type){const t=e.render;e.render=function(){t.call(this,...arguments);const e=returnValue.type;return returnValue.type=function(t){const n=e(t);return console.log(t,n),n},console.log(returnValue),returnValue}}return n.call(this,e)})),window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_OPEN",n=>{me["lightcord-9"]&&(e||(d.log("POPOUT THEME","Popout opened, Adding theme"),setImmediate(()=>{console.log(n);const e=t.default.getWindow(n.key);console.log(e)})))})})},fs.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!ie.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=l.find(e=>"Anchor"==e.displayName);window.Lightcord.Api.ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=$t(),o=ie.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},ie.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(ie.React.createElement(L,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(ie.React.createElement(L,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"})))),i.push(o);let a=ie.React.createElement("div",{style:{display:"block"}},i);return Cs(r,e.user,!1),a}}),e.push(d.monkeyPatch(ie.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},fs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=ie.guildClasses.wrapper.split(" ")[0];document.querySelectorAll(`.${s}`).length>0&&e++;const r=ie.guildClasses.listItem.split(" ")[0],o=ie.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(ve.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},fs.prototype.injectExternals=async function(){},fs.prototype.initSettings=function(){if(g.initialize(),g.getSettingGroup("settings")||g.getSettingGroup("rpc")){Vn.loadSettings();for(const e in pe)null==me[e]&&(me[e]=pe[e],Vn.saveSettings())}else g.getSettingGroup("settings")||Object.assign(me,pe),g.getSettingGroup("rpc")||Object.assign(ge,fe),Vn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if(!e[1])return e;if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Vn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},fs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),vs||(vs=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),ws||(ws=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(ys)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(vs).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},fs.prototype.showChangelogModal=function(e={}){return d.showChangelogModal(e)},fs.prototype.alert=function(e,t){return d.alert(e,t)},fs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=l.find(e=>"TabBar"==e.displayName),t=l.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(ie.React.createElement(L,{color:"black",side:"top",text:"Lightcord"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(ie.React.createElement(L,{color:"black",side:"top",text:"BandagedBD"},ie.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,o,i]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const a=`(${ve.hash?ve.hash.substring(0,7):ve.branch})`,l=[ie.react.createElement("div",{className:`${s} ${o.size12}`},`Lightcord ${r.remote.getGlobal("BuildInfo").version} `,ie.react.createElement("span",{className:i+" da-versionHash"},`(${(r.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),ie.react.createElement("div",{className:`${s} ${o.size12}`},`BBD ${de} `,ie.react.createElement("span",{className:i+" da-versionHash"},a))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function Cs(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=l.find(e=>"Anchor"==e.displayName);_t.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=ie.React.createElement(L,{color:"black",side:"top",text:e.name},e.href?ie.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},ie.React.createElement(e.component,r)):ie.React.createElement(e.component,r)),a=document.createElement("div");ie.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}fs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=l.findByProps("wrapper","unreadMentionsBar"),t=l.findByProps("guildsError","selected"),n=l.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=ie.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=d.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},fs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=l.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=d.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},fs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=l.findByDisplayName("Guilds"),t=l.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=d.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},fs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];l.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=d.monkeyPatch(e,"default",{after:e=>{if(!me["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=d.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=$t();n.push(ie.react.createElement("span",{id:"certified-"+s})),j.patch(t,"certified-"+s)}}))},fs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=l.findByProps("MessageTimestamp"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=d.monkeyPatch(e,"default",{after:e=>{const n=d.getNestedProp(e.methodArguments[0],"message.author"),s=d.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(L,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(L,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"}))));const r=$t();s.push(ie.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),Cs(r,n,!0)}}))},fs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=l.findByDisplayName("MemberListItem"),t=l.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=d.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=d.getNestedProp(e.thisObject,"props.user"),s=d.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(ie.React.createElement(L,{color:"black",side:"top",text:"BandagedBD Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},ie.React.createElement(Zn,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(ie.React.createElement(L,{color:"black",side:"top",text:"Lightcord Developer"},ie.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},ie.React.createElement(Kn,{size:"16px",className:"bd-logo"}))));const r=$t();s.push(ie.React.createElement("div",{id:"badges-"+r})),Cs(r,n,!1)}}))},fs.prototype.updateInjector=async function(){const e=g.injectionPath;if(!e)return!1;const t=n(2),s=n(1),r=n(7),o=n(8),i=n(9),a=s.resolve(e,".."),l=s.basename(e),c="https://github.com/rauenzi/BetterDiscordApp/archive/injector.zip",u=s.resolve(a,"injector.zip"),h=s.resolve(a,"BetterDiscordApp-injector");d.log("InjectorUpdate","Downloading "+c);let p=await new Promise(e=>{null.get({url:c,encoding:null},async(n,s,r)=>{if(n||200!==s.statusCode)return e(!1);await new Promise(e=>t.exists(u,e))&&await new Promise(e=>t.rename(u,`${u}.bak${Math.round(performance.now())}`,e)),d.log("InjectorUpdate","Writing "+u),t.writeFile(u,r,t=>e(!t))})});if(!p)return p;await new Promise(e=>t.exists(h,e))&&await new Promise(e=>t.rename(h,`${h}.bak${Math.round(performance.now())}`,e));const m=await new Promise(e=>o.open(u,{lazyEntries:!0},(t,n)=>e(n)));m.on("entry",(function(e){if(e.fileName.endsWith("/"))return m.readEntry();d.log("InjectorUpdate","Extracting "+e.fileName);const n=s.resolve(a,e.fileName);i.sync(s.dirname(n)),m.openReadStream(e,(function(e,s){if(e)return p=!1;s.on("end",(function(){m.readEntry()})),s.pipe(t.createWriteStream(n))}))})),m.readEntry(),await new Promise(e=>m.once("end",e));const f=s.resolve(a,`${l}.bak${Math.round(performance.now())}`);return await new Promise(n=>t.rename(e,f,n)),d.log("InjectorUpdate",`Renaming ${s.basename(h)} to ${l}`),p=await new Promise(n=>t.rename(h,e,e=>n(!e))),p?p?(await new Promise(e=>r(f,e)),await new Promise(e=>t.unlink(u,e)),d.log("InjectorUpdate","Injector Updated!"),p):(d.err("InjectorUpdate","Something went wrong... restoring backups."),await new Promise(e=>r(h,e)),await new Promise(n=>t.rename(f,e,n)),p):(d.err("InjectorUpdate","Failed to rename the final directory"),p)};var Es=new fs;const xs={get React(){return ie.React},get ReactDOM(){return ie.ReactDom},get ReactComponent(){return ie.ReactComponent},get WindowConfigFile(){return d.WindowConfigFile},get settings(){return he},get emotes(){return{}},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return d.getAllWindowPreferences()},getWindowPreference:function(e){return d.getWindowPreference(e)},setWindowPreference:function(e,t){return d.setWindowPreference(e,t)},injectCSS:function(e,t){c.addStyle(c.escapeID(e),t)},clearCSS:function(e){c.removeStyle(c.escapeID(e))},linkJS:function(e,t){c.addScript(c.escapeID(e),t)},unlinkJS:function(e){c.removeScript(c.escapeID(e))},getPlugin:function(e){return Ce.hasOwnProperty(e)?Ce[e].plugin:null},getCore:function(){return d.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),Es},alert:function(e,t){return d.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return d.showConfirmationModal(e,t,n)},showToast:function(e,t={}){d.showToast(e,t)},findModule:function(e){return ie.WebpackModules.find(e)},findAllModules:function(e){return ie.WebpackModules.findAll(e)},findModuleByProps:function(...e){return ie.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return ie.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return ie.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),ie.getInternalInstance(e)},loadData:function(e,t){return g.getPluginData(e,t)}};xs.getData=xs.loadData,xs.saveData=function(e,t,n){return g.setPluginData(e,t,n)},xs.setData=xs.saveData,xs.deleteData=function(e,t){return g.deletePluginData(e,t)},xs.monkeyPatch=function(e,t,n){return d.monkeyPatch(e,t,n)},xs.onRemoved=function(e,t){return d.onRemoved(e,t)},xs.suppressErrors=function(e,t){return d.suppressErrors(e,t)},xs.testJSON=function(e){return d.testJSON(e)},xs.isPluginEnabled=function(e){return!!Ee[e]},xs.isThemeEnabled=function(e){return!!xe[e]},xs.isSettingEnabled=function(e){return!!me[e]},xs.enableSetting=function(e){return Vn.onChange(e,!0)},xs.disableSetting=function(e){return Vn.onChange(e,!1)},xs.toggleSetting=function(e){return Vn.onChange(e,!me[e])},xs.getBDData=function(e){return g.getBDData(e)},xs.setBDData=function(e,t){return g.setBDData(e,t)};const Ss=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};xs.Plugins=Ss(Ee,Ce,v),xs.Themes=Ss(xe,we,oe);var ks=xs;window.Lightcord.BetterDiscord.BdApi=xs,n.d(t,"default",(function(){return Bs})),function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ds=(e,t)=>{Object.defineProperty(window,e,{get:()=>(d.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},Ms=Object.keys(s);for(const e of Ms)Ds(e,s[e]);Ds("BDV2",ie),Ds("pluginModule",v),Ds("themeModule",oe),Ds("Utils",d),Ds("BDEvents",b),Ds("settingsPanel",Vn),Ds("DataStore",g),Ds("ContentManager",se),Ds("ClassNormalizer",ze),window.BdApi=ks,Ds("mainCore",Es);class Bs{constructor(e,t){Es.setConfig(e),Es.setMethods(t)}init(){Es.init()}}}]); \ No newline at end of file diff --git a/BetterDiscordApp/package-lock.json b/BetterDiscordApp/package-lock.json index c408323..944dad7 100644 --- a/BetterDiscordApp/package-lock.json +++ b/BetterDiscordApp/package-lock.json @@ -4186,7 +4186,7 @@ }, "kind-of": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true }, @@ -6505,7 +6505,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -6614,7 +6614,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { diff --git a/BetterDiscordApp/src/0globals.js b/BetterDiscordApp/src/0globals.js index bf32a89..21a4ab5 100644 --- a/BetterDiscordApp/src/0globals.js +++ b/BetterDiscordApp/src/0globals.js @@ -76,6 +76,7 @@ export const settings = { "Scroll To Settings": {id: "fork-ps-3", info: "Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)", implemented: true, hidden: false, cat: "core", category: "content manager"}, "Automatic Loading": {id: "fork-ps-5", info: "Automatically loads, reloads, and unloads plugins and themes", implemented: true, hidden: false, cat: "core", category: "content manager"}, "Enable Edit Button": {id: "fork-ps-7", info: "Enable an Edit Button on the plugin and theme panel.", implemented: true, hidden: false, cat: "core", category: "content manager"}, + "Themes in Popout Window": {id: "lightcord-9", info: "Enable themes in Popout Window. (For example, when detaching screenshare.)", implemented: true, hidden: false, cat: "core", category: "content manager", experimental: true}, /* Developer */ "Developer Mode": {id: "bda-gs-8", info: "Developer Mode Toggle", implemented: true, hidden: false, cat: "core", category: "developer settings"}, @@ -146,6 +147,7 @@ export const defaultCookie = { "lightcord-6": true, "lightcord-7": false, "lightcord-8": false, + "lightcord-9": false, "lightcord-10": false, "no_window_bound": false, }; diff --git a/BetterDiscordApp/src/modules/core.js b/BetterDiscordApp/src/modules/core.js index 8bcd001..74c0797 100644 --- a/BetterDiscordApp/src/modules/core.js +++ b/BetterDiscordApp/src/modules/core.js @@ -143,6 +143,7 @@ Core.prototype.init = async function() { Utils.suppressErrors(this.patchMessageHeader.bind(this), "BD Badge Chat Patch")(); Utils.suppressErrors(this.patchMemberList.bind(this), "BD Badge Member List Patch")(); Utils.suppressErrors(this.patchAttachment.bind(this), "LC Plugin Certifier Patch")(); + Utils.suppressErrors(this.patchPopoutWindow.bind(this), "BD Popout Window Patch")(); if(bdConfig.haveInstalledDefault){ let alert = Utils.alert("First Installation", "As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.") @@ -161,6 +162,48 @@ Core.prototype.init = async function() { } }; +Core.prototype.patchPopoutWindow = async function() { + let canceled = false + this.cancelPatchPopoutWindow = () => { + canceled = true + } + + window.Lightcord.Api.ensureExported(e => e.default && e.default.getWindow) + .then(popoutModule => { + if(canceled)return + + // Not a good idea to do it like that. + const interceptor = window.Lightcord.DiscordModules.dispatcher._interceptor + window.Lightcord.DiscordModules.dispatcher.setInterceptor(function(action){ + if(action && action.type === "POPOUT_WINDOW_OPEN"){ + const render = action.render + action.render = function(){ + const render1 = render.call(this, ...arguments) + const type1 = render1.type + render1.type = function(props){ + const render2 = type1(props) + console.log(props, render2) + return render2 + } + console.log(render1) + return render1 + } + } + return interceptor.call(this, action) + }) + window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_OPEN", (ev) => { + if(!settingsCookie["lightcord-9"])return + if(canceled)return + Utils.log("POPOUT THEME", "Popout opened, Adding theme") + setImmediate(() => { + console.log(ev) + const window = popoutModule.default.getWindow(ev.key) + console.log(window) + }) + }) + }) +}; + Core.prototype.patchAttributes = async function() { let attribsPatchs = [] this.cancelPatchAttributes = function() { @@ -171,7 +214,7 @@ Core.prototype.patchAttributes = async function() { // TODO: try to patch correctly the user popout on a next update const Anchor = WebpackModules.find(m => m.displayName == "Anchor"); - ensureExported(e => e.default && e.default.displayName === "DiscordTag") + window.Lightcord.Api.ensureExported(e => e.default && e.default.displayName === "DiscordTag") .then(DiscordTag => { let DiscordTagComp = DiscordTag.default DiscordTag.default = function(props){ @@ -282,6 +325,7 @@ Core.prototype.initSettings = function () { settingModule.default.prototype.getPredicateSections = function(){ let result = getPredicateSections.call(this, ...arguments) + if(!result[1])return result if(result[1].section === "My Account"){ // user settings, not guild settings let poped = [] diff --git a/BetterDiscordApp/src/ui/ApiPreview.jsx b/BetterDiscordApp/src/ui/ApiPreview.jsx index 046f3d4..a312457 100644 --- a/BetterDiscordApp/src/ui/ApiPreview.jsx +++ b/BetterDiscordApp/src/ui/ApiPreview.jsx @@ -30,10 +30,13 @@ export default class ApiPreview extends React.PureComponent { These components are here for the plugin devs. They can quickly embed any component below with this panel. +
+ All these components have error handling. If you want none, add `.original` after the component path. + We do not recommend modifying these component by a plugin. Only do this if you know what you are doing.
{ - remote.shell.openExternal("https://github.com/lightcord/lightcord/wiki/Apis") + remote.shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs") }} wrapper={false}> Documentation diff --git a/BetterDiscordApp/src/ui/presenceSettings.jsx b/BetterDiscordApp/src/ui/presenceSettings.jsx index b7c765f..7718c97 100644 --- a/BetterDiscordApp/src/ui/presenceSettings.jsx +++ b/BetterDiscordApp/src/ui/presenceSettings.jsx @@ -572,7 +572,7 @@ class PresenceErrorCatcher extends React.Component { return this.render() } }else{ - emptyClasses = emptyClasses || BDV2.WebpackModules.find(e => e.emptyStateImage) + emptyClasses = emptyClasses || BDV2.WebpackModules.find(e => e.emptyStateImage && e.emptyState) if(!emptyClasses){ Utils.showToast("An error occured. Please check the console for more informations.") return null @@ -584,7 +584,7 @@ class PresenceErrorCatcher extends React.Component { backgroundColor: "var(--background-primary)", padding: "30px 30px", borderRadius: "8px" - }} className="lc-tab-box-shadow"> + }} className={`lc-tab-box-shadow ${emptyClasses.emptyState}`}>
diff --git a/LightcordApi/js/main.js b/LightcordApi/js/main.js index 32afff2..34dbf40 100644 --- a/LightcordApi/js/main.js +++ b/LightcordApi/js/main.js @@ -96,7 +96,52 @@ module.exports = "use strict"; -module.exports = window["Reac" + "tDOM"]; +const selectors_1 = __webpack_require__(/*! ./selectors */ "./src/alias/selectors.ts"); +// bait typescript into thinking this is not reactDOM so no circular dependency. +window.ReactDOM = (window["Reac" + "tDOM"] || // If in Lightcord + (() => { + try { + return window.BdApi.findModule(selectors_1.ReactDOMSelector); + } + catch (e) { + return null; + } + })() || + (() => { + try { + const webpack = __webpack_require__(/*! powercord/webpack */ "powercord/webpack"); + return webpack.ReactDOM; + } + catch (e) { + return null; + } + })() || + (() => { + try { + return window.EDApi.findModule(selectors_1.ReactDOMSelector); + } + catch (e) { + return null; + } + })()); +module.exports = window.ReactDOM; + + +/***/ }), + +/***/ "./src/alias/selectors.ts": +/*!********************************!*\ + !*** ./src/alias/selectors.ts ***! + \********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReactDOMSelector = exports.ReactSelector = void 0; +exports.ReactSelector = mod => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].find(k => !mod[k]); +exports.ReactDOMSelector = mod => mod.findDOMNode; /***/ }), @@ -126,25 +171,27 @@ const cloneNullProto_1 = __webpack_require__(/*! ../modules/cloneNullProto */ ". const Tooltip_1 = __webpack_require__(/*! ./general/Tooltip */ "./src/components/general/Tooltip.ts"); const ColorPicker_1 = __webpack_require__(/*! ./inputs/ColorPicker */ "./src/components/inputs/ColorPicker.tsx"); const AlertBox_1 = __webpack_require__(/*! ./general/AlertBox */ "./src/components/general/AlertBox.tsx"); +const ErrorCatcher_1 = __webpack_require__(/*! ./private/ErrorCatcher */ "./src/components/private/ErrorCatcher.tsx"); +const RadioGroupProxied = ErrorCatcher_1.createProxyErrorCatcherClass(RadioGroup_1.default); exports.default = cloneNullProto_1.default({ inputs: cloneNullProto_1.default({ - Button: Button_1.default, - Switch: Switch_1.default, - Choices: RadioGroup_1.default, - RadioGroup: RadioGroup_1.default, - TextArea: TextArea_1.default, - TextInput: TextInput_1.default, - Dropdown: Dropdown_1.default, - ColorPicker: ColorPicker_1.default + Button: ErrorCatcher_1.createProxyErrorCatcherClass(Button_1.default), + Switch: ErrorCatcher_1.createProxyErrorCatcherClass(Switch_1.default), + Choices: RadioGroupProxied, + RadioGroup: RadioGroupProxied, + TextArea: ErrorCatcher_1.createProxyErrorCatcherClass(TextArea_1.default), + TextInput: ErrorCatcher_1.createProxyErrorCatcherClass(TextInput_1.default), + Dropdown: ErrorCatcher_1.createProxyErrorCatcherClass(Dropdown_1.default), + ColorPicker: ErrorCatcher_1.createProxyErrorCatcherClass(ColorPicker_1.default) }), general: cloneNullProto_1.default({ - Title: Title_1.default, - SettingsTitle: SettingsTitle_1.default, - SettingSubTitle: SettingSubTitle_1.default, - Tabs: Tabs_1.default, - CodeBlock: CodeBlock_1.default, - Tooltip: Tooltip_1.default, - AlertBox: AlertBox_1.default + Title: ErrorCatcher_1.createProxyErrorCatcherClass(Title_1.default), + SettingsTitle: ErrorCatcher_1.createProxyErrorCatcherClass(SettingsTitle_1.default), + SettingSubTitle: ErrorCatcher_1.createProxyErrorCatcherClass(SettingSubTitle_1.default), + Tabs: ErrorCatcher_1.createProxyErrorCatcherClass(Tabs_1.default), + CodeBlock: ErrorCatcher_1.createProxyErrorCatcherClass(CodeBlock_1.default), + Tooltip: ErrorCatcher_1.createProxyErrorCatcherClass(Tooltip_1.default), + AlertBox: ErrorCatcher_1.createProxyErrorCatcherClass(AlertBox_1.default) }) }); @@ -884,10 +931,15 @@ class ColorPicker extends React.PureComponent { /** Preload the component. */ static preload() { if (ColorPicker.prototype.modules[0]) - return; + return; // already loaded if (isFetching) - return; - new ColorPicker({}).render(); + return; // is fetching so don't double preload. + try { // If we caught an error + new ColorPicker({}).render(); + } + catch (e) { + console.error(e); + } } onChange(val) { this.props.onChange(val); @@ -927,9 +979,10 @@ class ColorPicker extends React.PureComponent { return { id: null }; - } + }, + renderHeader: GuildSettingsRoles.prototype.renderHeader }); - const GuildRoleSettings = settings.props.children.type; + const GuildRoleSettings = settings.props.children[1].type; let children = GuildRoleSettings.prototype.renderColorPicker.call({ props: { role: { @@ -941,6 +994,7 @@ class ColorPicker extends React.PureComponent { } }).props.children; children.type(children.props).props.children.type._ctor().then(c => { + ColorPickerModules = null; this.forceUpdate(); resolve(); }); @@ -992,7 +1046,7 @@ ColorPicker.defaultProps = { onChange: noop_1.default }; ColorPicker.help = { - info: "To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#yourcolor')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`", + info: "To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#7289DA')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`", warn: "The component may not appear instantly. The component needs to be loaded, so you could experience 50-300ms loading time depending on your internet connection." }; let AllPreviews; @@ -1563,6 +1617,103 @@ TextInput.help = { let AllPreviews; +/***/ }), + +/***/ "./src/components/private/ErrorCatcher.tsx": +/*!*************************************************!*\ + !*** ./src/components/private/ErrorCatcher.tsx ***! + \*************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createProxyErrorCatcherClass = void 0; +const WebpackLoader_1 = __webpack_require__(/*! ../../modules/WebpackLoader */ "./src/modules/WebpackLoader.ts"); +const DiscordTools_1 = __webpack_require__(/*! ../../modules/DiscordTools */ "./src/modules/DiscordTools.ts"); +const noop_1 = __webpack_require__(/*! ../../modules/noop */ "./src/modules/noop.ts"); +const uuid_1 = __webpack_require__(/*! ../../modules/uuid */ "./src/modules/uuid.ts"); +let ErrorCatcherModules; +class ErrorCatcher extends React.Component { + constructor(props) { + super(props); + this.defaultProps = { + children: null + }; + this.state = { + error: false, + hasSentNotification: false + }; + } + get modules() { + return ErrorCatcherModules || (ErrorCatcherModules = [ + WebpackLoader_1.default.find(e => e.emptyStateImage && e.emptyState) + ]); + } + render() { + if (!this.state.error) { + return this.props.children; + } + else { // try to render a user-friendly interface. + const [emptyClasses] = this.modules; + if (!emptyClasses) { // If we can't, render nothing and show a notification. + if (this.state.hasSentNotification) + return null; // If the notification was already sent, don't send one. + const notification = DiscordTools_1.default.showNotification({ + body: "An error occured. Please check the console for more informations.", + icon: "https://github.com/lightcord.png", + onClick: noop_1.default, + onClose: noop_1.default, + onShow: noop_1.default, + title: "Lightcord Informations" + }); + this.setState({ + hasSentNotification: true + }); + setTimeout(() => { + notification.close(); + }, 2000); + return null; + } + return React.createElement("div", { className: emptyClasses.emptyState }, + React.createElement("div", { className: emptyClasses.emptyStateImage, style: { + marginTop: "20px" + } }), + React.createElement("div", { className: emptyClasses.emptyStateHeader }, "An error occured"), + React.createElement("p", { className: emptyClasses.emptyStateSubtext }, "Please check the console for more informations. Join our \u00ADsupport server for more help.")); + } + } + componentDidCatch(error, errorInfo) { + console.error(errorInfo.componentStack); + this.setState({ + error: true + }); + } +} +exports.default = ErrorCatcher; +function createProxyErrorCatcherClass(Class) { + var _a; + const ClassCopy = (_a = class Proxied extends React.Component { + render() { + return React.createElement(ErrorCatcher, { key: uuid_1.default() }, React.createElement(Class, Object.assign(Object.assign({}, this.props), { key: uuid_1.default() }))); + } + static get original() { + return Class; + } + }, + _a.displayName = Class["displayName"] || Class["name"], + _a); + Object.entries(Object.getOwnPropertyDescriptors(Class)).forEach(value => { + if (value[0] in ClassCopy) + return; + Object.defineProperty(ClassCopy, value[0], value[1]); + }); + return ClassCopy; +} +exports.createProxyErrorCatcherClass = createProxyErrorCatcherClass; + + /***/ }), /***/ "./src/components/private/Notice.tsx": @@ -1690,6 +1841,7 @@ const excludeProperties_1 = __webpack_require__(/*! ./modules/excludeProperties const cloneNullProto_1 = __webpack_require__(/*! ./modules/cloneNullProto */ "./src/modules/cloneNullProto.ts"); const noop_1 = __webpack_require__(/*! ./modules/noop */ "./src/modules/noop.ts"); const Unfreeze_1 = __webpack_require__(/*! ./modules/Unfreeze */ "./src/modules/Unfreeze.ts"); +const environnement_1 = __webpack_require__(/*! ./modules/environnement */ "./src/modules/environnement.ts"); patchers.patch(); const LightcordApi = { WebpackLoader: WebpackLoader_1.default, @@ -1702,12 +1854,119 @@ const LightcordApi = { cloneNullProto: cloneNullProto_1.default, NOOP: noop_1.default, unfreeze: Unfreeze_1.default - } + }, + get isNative() { return environnement_1.isNative; }, + get isImported() { return environnement_1.isImported; } }; exports.default = LightcordApi; Object.assign(window.Lightcord.Api, LightcordApi); +/***/ }), + +/***/ "./src/modules/BDModules.ts": +/*!**********************************!*\ + !*** ./src/modules/BDModules.ts ***! + \**********************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +let req; +setReq(); +function filterDangerous(mods) { + return mods.map(e => { + return protect(e); + }); +} +function protect(exports) { + let theModule = exports.exports; + let mod = theModule.default; + if (!mod) + return exports; + if (mod.remove && mod.set && mod.clear && mod.get && !mod.sort) + return null; + if (!mod.getToken && !mod.getEmail && !mod.showToken) + return exports; + const proxy = new Proxy(mod, { + getOwnPropertyDescriptor: function (obj, prop) { + if (prop === "getToken" || prop === "getEmail" || prop === "showToken") + return undefined; + return Object.getOwnPropertyDescriptor(obj, prop); + }, + get: function (obj, func) { + if (func == "getToken" && obj.getToken) + return () => "mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa"; + if (func == "getEmail" && obj.getEmail) + return () => "puppet11112@gmail.com"; + if (func == "showToken" && obj.showToken) + return () => true; + if (func == "__proto__" && obj.__proto__) + return proxy; + return obj[func]; + } + }); + return Object.assign({}, exports, { exports: Object.assign({}, theModule, { default: proxy }) }); +} +class Webpackloader { + get modules() { + if (req) { + return filterDangerous(Object.values(req.c).filter((e) => e && e.exports)); + } + else { + setReq(); + if (req) { + return filterDangerous(Object.values(req.c).filter((e) => e && e.exports)); + } + else { + return []; + } + } + } + get(ids, modules) { + if (typeof ids === "function") { + return (modules || this.modules).map((mdl) => { + if (mdl && typeof mdl.exports !== "undefined") { + return mdl.exports; + } + else { + return null; + } + }).filter(e => e).filter(ids); + } + else if (Array.isArray(ids)) { + modules = modules || this.modules; + return ids.map(id => this.get(id, modules)); + } + else { + modules = modules || this.modules; + let module = modules.filter(e => !!e).find(e => e.i === ids); + if (!module) + return undefined; + return module.exports; + } + } + get default() { + return this; + } +} +exports.default = new Webpackloader(); +function setReq() { + try { + req = window["webpackJsonp"].push([[], { __extra_id__: (mdl, exports, req) => mdl.exports = req }, [["__extra_id__"]]]); + if (req) { + delete req.m.__extra_id__; + delete req.c.__extra_id__; + } + } + catch (e) { + req = undefined; + } +} + + /***/ }), /***/ "./src/modules/DiscordTools.ts": @@ -1798,6 +2057,7 @@ const EventHandler = function () { class Notice extends events_1.EventEmitter { constructor(data) { super(); + this.nextTickRefresh = false; this.data = data; this.state = { removed: this.removed, @@ -1831,33 +2091,51 @@ class Notice extends events_1.EventEmitter { get id() { return this.data.id; } + update(data) { + for (let key in data) { + if (key === "id") + continue; + this.data[key] = data[key]; + } + if (!this.nextTickRefresh) { + this.nextTickRefresh = true; + process.nextTick(() => { + this.nextTickRefresh = false; + Notices_1.events.emit("noticeUpdate"); + }); + } + } get text() { return this.data.text; } set text(text) { - this.data.text = text; - Notices_1.events.emit("noticeUpdate"); + this.update({ + text + }); } get type() { return this.data.type; } set type(type) { - this.data.type = type; - Notices_1.events.emit("noticeUpdate"); + this.update({ + type + }); } get buttonText() { return this.data.buttonText; } set buttonText(buttonText) { - this.data.buttonText = buttonText; - Notices_1.events.emit("noticeUpdate"); + this.update({ + buttonText + }); } get onClick() { return this.data.onClick; } set onClick(onClick) { - this.data.onClick = onClick; - Notices_1.events.emit("noticeUpdate"); + this.update({ + onClick + }); } remove() { if (this.removed) @@ -2096,7 +2374,7 @@ exports.default = new class Utils { Object.defineProperty(exports, "__esModule", { value: true }); exports.WebpackLoaderError = void 0; -const BDModules = window.BDModules; +const BDModules = window.BDModules || __webpack_require__(/*! ./BDModules */ "./src/modules/BDModules.ts"); exports.default = new class WebpackLoader { constructor() { } get(id) { @@ -2151,7 +2429,7 @@ exports.default = new class WebpackLoader { }; class WebpackLoaderError extends Error { constructor(message = "") { - message += "\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in their discord server."; + message += "\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server."; super(message); this.name = "WebpackLoaderError"; } @@ -2185,6 +2463,23 @@ function cloneNullProto(obj) { exports.default = cloneNullProto; +/***/ }), + +/***/ "./src/modules/environnement.ts": +/*!**************************************!*\ + !*** ./src/modules/environnement.ts ***! + \**************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isImported = exports.isNative = void 0; +exports.isNative = typeof window.BDModules === "undefined"; +exports.isImported = typeof window.BDModules !== "undefined"; + + /***/ }), /***/ "./src/modules/excludeProperties.ts": @@ -2240,6 +2535,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.patch = void 0; const Utils_1 = __webpack_require__(/*! ./Utils */ "./src/modules/Utils.ts"); const Notices_1 = __webpack_require__(/*! ../components/private/Notices */ "./src/components/private/Notices.tsx"); +const environnement_1 = __webpack_require__(/*! ./environnement */ "./src/modules/environnement.ts"); function patch() { /** START NOTICE */ getModule(e => e.default && e.default.displayName === "ConnectedAppView") @@ -2283,6 +2579,62 @@ function patch() { })(); }); /** END NOTICE */ + if (environnement_1.isNative) { + /** START USERPOPOUT PATCH */ + awaitLogin() + .then(async () => { + let UserPopout = await getModule(e => e.default && e.default.displayName === "FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"); + const userModule = await getModule(e => e.default && e.default.getCurrentUser); + const render1 = new UserPopout.default({ userId: userModule.default.getCurrentUser().id, guildId: null, channelId: null, disableUserProfileLink: true }).render(); + const PopoutProps = render1.props; + const render2 = render1.type.render(PopoutProps, null); + const render3 = new render2.type(render2.props).render(); + const UserPopoutComponent = render3.type; + if (!UserPopoutComponent) + throw new Error(`Couldn't find the UserPopoutComponent component.`); + const render = UserPopoutComponent.prototype.render; + UserPopoutComponent.prototype.render = function () { + const returnValue = render.call(this, ...arguments); + try { + returnValue.props.children.props["data-user-id"] = this.props.user.id; + } + catch (e) { + console.error(e); + } + return returnValue; + }; + }); + /** END USERPOPOUT PATCH*/ + /** START USERPROFILE PATCH */ + awaitLogin() + .then(async () => { + let UserProfile = await getModule(e => e.default && e.default.displayName === "UserProfile"); + const userModule = await getModule(e => e.default && e.default.getCurrentUser); + const render1 = new UserProfile.default({ + user: userModule.default.getCurrentUser() + }).render(); + const render2 = new render1.type(render1.props).render(); + const render3 = render2.type.render(render2.props, null); + const render4 = new render3.type(render3.props).render(); + const UserProfileComponent = render4.type; + if (!UserProfileComponent) + throw new Error(`Couldn't find the UserProfileComponent component.`); + const render = UserProfileComponent.prototype.render; + UserProfileComponent.prototype.render = function () { + const returnValue = render.call(this, ...arguments); + console.log(returnValue); + try { + returnValue.props.children.props["data-user-id"] = this.props.user.id; + } + catch (e) { + console.error(e); + } + return returnValue; + }; + }); + /** END USERPROFILE PATCH */ + } + // TODO: Add in app-notifications / confirmations. /** START IN-APP NOTIFICATIONS */ //getModule(e => true) /** END IN-APP NOTIFICATIONS */ @@ -2297,6 +2649,28 @@ function getModule(filter) { }); }); } +let hasCompletedLogin = false; +let loginPromise; +function awaitLogin() { + if (hasCompletedLogin) + return Promise.resolve(); + if (loginPromise) + return loginPromise; + return loginPromise = new Promise((resolve) => { + let isResolved = false; + window.Lightcord.DiscordModules.dispatcher.subscribe("CONNECTION_OPEN", (ev) => { + if (isResolved) + return; + hasCompletedLogin = true; + resolve(); + isResolved = true; + }); + }); +} +window.Lightcord.DiscordModules.dispatcher.subscribe("LOGOUT", (ev) => { + hasCompletedLogin = false; + loginPromise = undefined; +}); /***/ }), @@ -2332,6 +2706,17 @@ module.exports = require("events"); /***/ }), +/***/ "powercord/webpack": +/*!************************************!*\ + !*** external "powercord/webpack" ***! + \************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = require("powercord/webpack"); + +/***/ }), + /***/ "uuid/v1": /*!**************************!*\ !*** external "uuid/v1" ***! @@ -2355,4 +2740,4 @@ module.exports = require("uuid/v4"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2FsaWFzL3JlYWN0LWRvbS50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9jb21wb25lbnRzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvQWxlcnRCb3gudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvQ29kZUJsb2NrLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9nZW5lcmFsL1NldHRpbmdTdWJUaXRsZS50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhbC9TZXR0aW5nc1RpdGxlLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9nZW5lcmFsL1RhYnMudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvVGl0bGUudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvVG9vbHRpcC50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9Ecm9wZG93bi50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL1JhZGlvR3JvdXAudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9Td2l0Y2gudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9UZXh0QXJlYS50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvcHJpdmF0ZS9Ob3RpY2UudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL3ByaXZhdGUvTm90aWNlcy50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL0Rpc2NvcmRUb29scy50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9QbHVnaW5VdGlsaXRpZXMudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvVW5mcmVlemUudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvVXRpbHMudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvV2VicGFja0xvYWRlci50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9jbG9uZU51bGxQcm90by50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9leGNsdWRlUHJvcGVydGllcy50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9ub29wLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL3BhdGNoZXJzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL3V1aWQudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpL2V4dGVybmFsIFwidXVpZC92MVwiIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS9leHRlcm5hbCBcInV1aWQvdjRcIiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7QUNqRkEsaUJBQVMsTUFBTSxDQUFDLE1BQU0sR0FBQyxNQUFNLENBQStCOzs7Ozs7Ozs7Ozs7Ozs7QUNENUQsa0dBQTJDO0FBQzNDLGtHQUFvQztBQUNwQyw4R0FBNEM7QUFDNUMsd0dBQXdDO0FBQ3hDLDJHQUEwQztBQUMxQyx3R0FBd0M7QUFDeEMsaUdBQW1DO0FBQ25DLHlIQUFtRDtBQUNuRCw4RkFBMEM7QUFDMUMsK0hBQXVEO0FBQ3ZELDZHQUEyQztBQUMzQyxpSEFBc0Q7QUFDdEQsc0dBQXVDO0FBQ3ZDLGlIQUE4QztBQUM5QywwR0FBeUM7QUFFekMsa0JBQWUsd0JBQWMsQ0FBQztJQUMxQixNQUFNLEVBQUUsd0JBQWMsQ0FB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QUMsQ0FBQyxFQUFFO0lBQ1IsQ0FBQyxDQUFDO0lBQ0YsaUJBQWlCO0lBRWpCLGlDQUFpQztJQUNqQyxzQkFBc0I7SUFDdEIsK0JBQStCO0FBQ25DLENBQUM7QUFqREQsc0JBaURDO0FBRUQsU0FBUyxTQUFTLENBQUMsTUFBNEI7SUFDM0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7YUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUM7UUFDN0MsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0FBQ04sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDOURELDZEQUFpQztBQUNqQyw2REFBaUM7QUFHakMsSUFBSSxJQUFJLEdBQTJDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDN0QsT0FBTyxNQUFNLEVBQUU7QUFDbkIsQ0FBQyxFQUFFLEVBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxDQUFDO0FBRTVDLGtCQUFlLElBQUk7Ozs7Ozs7Ozs7OztBQ1JuQixtQzs7Ozs7Ozs7Ozs7QUNBQSxvQzs7Ozs7Ozs7Ozs7QUNBQSxvQyIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXgudHNcIik7XG4iLCIvLyBiYWl0IHR5cGVzY3JpcHQgaW50byB0aGlua2luZyB0aGlzIGlzIG5vdCByZWFjdERPTSBzbyBubyBjaXJjdWxhciBkZXBlbmRlbmN5LlxyXG5leHBvcnQgPSB3aW5kb3dbXCJSZWFjXCIrXCJ0RE9NXCJdIGFzIHR5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIikiLCJpbXBvcnQgRGlzY29yZEJ1dHRvbiBmcm9tIFwiLi9pbnB1dHMvQnV0dG9uXCJcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9pbnB1dHMvU3dpdGNoXCJcclxuaW1wb3J0IFJhZGlvR3JvdXAgZnJvbSBcIi4vaW5wdXRzL1JhZGlvR3JvdXBcIlxyXG5pbXBvcnQgVGV4dEFyZWEgZnJvbSBcIi4vaW5wdXRzL1RleHRBcmVhXCJcclxuaW1wb3J0IFRleHRJbnB1dCBmcm9tIFwiLi9pbnB1dHMvVGV4dElucHV0XCJcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2lucHV0cy9Ecm9wZG93blwiXHJcbmltcG9ydCBUaXRsZSBmcm9tIFwiLi9nZW5lcmFsL1RpdGxlXCJcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vZ2VuZXJhbC9TZXR0aW5nc1RpdGxlXCJcclxuaW1wb3J0IFRhYnMsIHsgVGFiIH0gZnJvbSBcIi4vZ2VuZXJhbC9UYWJzXCJcclxuaW1wb3J0IFNldHRpbmdTdWJUaXRsZSBmcm9tIFwiLi9nZW5lcmFsL1NldHRpbmdTdWJUaXRsZVwiXHJcbmltcG9ydCBDb2RlQmxvY2sgZnJvbSBcIi4vZ2VuZXJhbC9Db2RlQmxvY2tcIlxyXG5pbXBvcnQgY2xvbmVOdWxsUHJvdG8gZnJvbSBcIi4uL21vZHVsZXMvY2xvbmVOdWxsUHJvdG9cIlxyXG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi9nZW5lcmFsL1Rvb2x0aXBcIlxyXG5pbXBvcnQgQ29sb3JQaWNrZXIgZnJvbSBcIi4vaW5wdXRzL0NvbG9yUGlja2VyXCJcclxuaW1wb3J0IEFsZXJ0Qm94IGZyb20gXCIuL2dlbmVyYWwvQWxlcnRCb3hcIlxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xvbmVOdWxsUHJvdG8oe1xyXG4gICAgaW5wdXRzOiBjbG9uZU51bGxQcm90byh7XHJcbiAgICAgICAgQnV0dG9uOiBEaXNjb3JkQnV0dG9uLFxyXG4gICAgICAgIFN3aXRjaDogU3dpdGNoLFxyXG4gICAgICAgIENob2ljZXM6IFJhZGlvR3JvdXAsXHJcbiAgICAgICAgUmFkaW9Hcm91cDogUmFkaW9Hcm91cCxcclxuICAgICAgICBUZXh0QXJlYTogVGV4dEFyZWEsXHJcbiAgICAgICAgVGV4dElucHV0OiBUZXh0SW5wdXQsXHJcbiAgICAgICAgRHJvcGRvd246IERyb3Bkb3duLFxyXG4gICAgICAgIENvbG9yUGlja2VyOiBDb2xvclBpY2tlclxyXG4gICAgfSksXHJcbiAgICBnZW5lcmFsOiBjbG9uZU51bGxQcm90byh7XHJcbiAgICAgICAgVGl0bGU6IFRpdGxlLFxyXG4gICAgICAgIFNldHRpbmdzVGl0bGU6IFNldHRpbmdzVGl0bGUsXHJcbiAgICAgICAgU2V0dGluZ1N1YlRpdGxlOiBTZXR0aW5nU3ViVGl0bGUsXHJcbiAgICAgICAgVGFiczogVGFicyxcclxuICAgICAgICBDb2RlQmxvY2s6IENvZGVCbG9jayxcclxuICAgICAgICBUb29sdGlwOiBUb29sdGlwLFxyXG4gICAgICAgIEFsZXJ0Qm94OiBBbGVydEJveFxyXG4gICAgfSlcclxufSkiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCJcclxuXHJcbnR5cGUgQWxlcnRCb3hQcm9wcyA9IHtcclxuICAgIHR5cGU6IFwid2FyblwifFwiaW5mb1wifFwiZGFuZ2VyXCJ8XCJlcnJvclwifFwic3VjY2Vzc1wiLFxyXG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZXxzdHJpbmdcclxufVxyXG5cclxubGV0IEFsZXJ0Qm94TW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbGVydEJveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxBbGVydEJveFByb3BzPiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOkFsZXJ0Qm94UHJvcHMgPSB7XHJcbiAgICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgICAgY2hpbGRyZW46IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBBbGVydEJveE1vZHVsZXMgfHwgKEFsZXJ0Qm94TW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJNYXJrZG93blwiICYmIGUuZGVmYXVsdC5kZWZhdWx0UHJvcHMucGFyc2VyKS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBbXHJcbiAgICAgICAgICAgIE1hcmtkb3duXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgd3JhcFxyXG4gICAgICAgIGxldCBjaGlsZHJlblxyXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLnByb3BzLmNoaWxkcmVuID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgd3JhcCA9IE1hcmtkb3duLnByb3RvdHlwZS5yZW5kZXIuY2FsbCh7XHJcbiAgICAgICAgICAgICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICB9LCBNYXJrZG93bi5kZWZhdWx0UHJvcHMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gd3JhcC5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB3cmFwID0gTWFya2Rvd24ucHJvdG90eXBlLnJlbmRlci5jYWxsKHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiXCJcclxuICAgICAgICAgICAgICAgIH0sIE1hcmtkb3duLmRlZmF1bHRQcm9wcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdyYXAucHJvcHMuY2hpbGRyZW4gPSA8ZGl2IGNsYXNzTmFtZT17XCJsYy1hbGVydC1ib3ggbGMtYWxlcnQtYm94LVwiK3RoaXMucHJvcHMudHlwZX0+XHJcbiAgICAgICAgICAgIDxibG9ja3F1b3RlIGNsYXNzTmFtZT1cImxjLWJsb2NrcXVvdGVcIj5cclxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9ibG9ja3F1b3RlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHJldHVybiB3cmFwXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIioqKkRpc2NvcmQncyoqKiAqKk1hcmtkb3duKiogX2lzXyBbc3VwcG9ydGVkXShodHRwczovL2dvb2dsZS5jb20pIG9yIHlvdSBjYW4ganVzdCBpbnNlcnQgeW91ciBvd24gcmVhY3QgY2hpbGRzLlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIndhcm5cIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBoZWxwID0ge1xyXG4gICAgICAgIGluZm86IFwiWW91IGNhbiBpbnNlcnQgbWFya2Rvd24gKGFzIHN0cmluZykgb3Igbm9ybWFsIHJlYWN0IGNoaWxkc1wiLFxyXG4gICAgICAgIHdhcm46IFwiQWxsIHN0cmluZyB3aWxsIGJlIGludGVycHJldGVkIGFzIG1hcmtkb3duLiBJZiB5b3Ugd2FudCByYXcgc3RyaW5nLCBwYXNzIGFuIGFycmF5IHdpdGggdGhlIHN0cmluZyBpbnNpZGUuXCJcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuXHJcbnR5cGUgQ29kZUJsb2NrUHJvcHMgPSB7XHJcbiAgICBsYW5ndWFnZT86IHN0cmluZyxcclxuICAgIGNvbnRlbnQ6IHN0cmluZ1xyXG59XHJcblxyXG5sZXQgQ29kZUJsb2NrTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2RlQmxvY2sgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8Q29kZUJsb2NrUHJvcHM+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6Q29kZUJsb2NrUHJvcHMgPSB7XHJcbiAgICAgICAgbGFuZ3VhZ2U6IFwicGxhaW50ZXh0XCIsXHJcbiAgICAgICAgY29udGVudDogXCJcIlxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBDb2RlQmxvY2tNb2R1bGVzIHx8IChDb2RlQmxvY2tNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLm1hcmt1cCksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUubWVzc2FnZUNvbnRlbnQpLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmhpZ2hsaWdodCksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUubWFyZ2luQm90dG9tOClcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1lc3NhZ2VNb2R1bGUxLFxyXG4gICAgICAgICAgICBtZXNzYWdlTW9kdWxlMixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyTW9kdWxlMSxcclxuICAgICAgICAgICAgaGlnaHRsaWdodEpTLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUxXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5wcm9wcy5sYW5ndWFnZSA9PT0gXCJwbGFpbnRleHRcIiA/IDxjb2RlIGNsYXNzTmFtZT17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNvbnRlbnR9XHJcbiAgICAgICAgPC9jb2RlPiA6IDxjb2RlIGNsYXNzTmFtZT17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gXHJcbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBoaWdodGxpZ2h0SlMuaGlnaGxpZ2h0KHRoaXMucHJvcHMubGFuZ3VhZ2UsIHRoaXMucHJvcHMuY29udGVudCkudmFsdWV9fSAvPlxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2Ake21lc3NhZ2VNb2R1bGUxLm1hcmt1cH0gJHttZXNzYWdlTW9kdWxlMi5tZXNzYWdlQ29udGVudH1gfT5cclxuICAgICAgICAgICAgPHByZT5cclxuICAgICAgICAgICAgICAgIHtjb2RlfVxyXG4gICAgICAgICAgICA8L3ByZT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e21hcmdpbk1vZHVsZTEubWFyZ2luQm90dG9tOH0+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgQWxsUHJldmlld3MoKXtcclxuICAgICAgICByZXR1cm4gQWxsUHJldmlld3MgfHwgKCgpID0+IHtcclxuICAgICAgICAgICAgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcImNvbnNvbGUubG9nKFxcXCJFeGVtcGxlIGNvZGVcXFwiKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlOiBcImpzXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IFwicGxhaW50ZXh0XCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAuLi5Db2RlQmxvY2sucHJvdG90eXBlLm1vZHVsZXNbM10ubGlzdExhbmd1YWdlcygpLmZpbHRlcihlID0+IGUgIT09IFwianNcIikubWFwKGUgPT4gKHtsYW5ndWFnZTogZX0pKVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG50eXBlIFNldHRpbmdTdWJUaXRsZVByb3BzID0ge1xyXG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZVxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXHJcbn1cclxuXHJcbmxldCBUaXRsZU1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ1N1YlRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFNldHRpbmdTdWJUaXRsZVByb3BzPiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOlNldHRpbmdTdWJUaXRsZVByb3BzID0ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICBjbGFzc05hbWU6IFwiXCJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBUaXRsZU1vZHVsZXMgfHwgKFRpdGxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gdHlwZW9mIGUubWFyZ2luVG9wNjAgPT09IFwic3RyaW5nXCIpLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiaDVcIl0pLFxyXG4gICAgICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5XZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2l6ZTE0XCJdKSxcclxuICAgICAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuV2VicGFja0xvYWRlci5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImNvbG9yU3RhbmRhcmRcIl0pXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIHRpdGxlTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBjb2xvck1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYCR7Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlLnNpemUxNH0gJHt0aXRsZU1vZHVsZS5oNX0gJHttYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tNH1gXHJcbiAgICAgICAgaWYocHJvcHMuY2xhc3NOYW1lKWNsYXNzTmFtZSA9KyBcIiBcIitwcm9wcy5jbGFzc05hbWVcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHtjbGFzc05hbWV9LCBwcm9wcy5jaGlsZHJlbilcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiRXhlbXBsZSB0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IFRpdGxlIGZyb20gXCIuL1RpdGxlXCJcclxuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCJcclxuXHJcbnR5cGUgU2V0dGluZ3NUaXRsZVByb3BzID0ge1xyXG4gICAgY2hpbGRyZW46IFJlYWN0Tm9kZVxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXHJcbn1cclxuXHJcbmxldCBUaXRsZU1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ3NUaXRsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxTZXR0aW5nc1RpdGxlUHJvcHM+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBTZXR0aW5nc1RpdGxlUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFRpdGxlTW9kdWxlcyB8fCAoVGl0bGVNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiB0eXBlb2YgZS5tYXJnaW5Ub3A2MCA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYCR7bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfSAke21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b20yMH1gXHJcbiAgICAgICAgaWYocHJvcHMuY2xhc3NOYW1lKWNsYXNzTmFtZSA9KyBcIiBcIitwcm9wcy5jbGFzc05hbWVcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZSwge2NsYXNzTmFtZX0sIHByb3BzLmNoaWxkcmVuKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6U2V0dGluZ3NUaXRsZVByb3BzID0ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBbXCJcIl0sXHJcbiAgICAgICAgY2xhc3NOYW1lOiBcIlwiXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkV4ZW1wbGUgdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzIiwiaW1wb3J0IHsgUmVhY3ROb2RlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCJcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBUaXRsZSBmcm9tIFwiLi9UaXRsZVwiXHJcblxyXG50eXBlIFRhYnNQcm9wcyA9IHtcclxuICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlLFxyXG4gICAgdGFiczoge2xhYmVsOiBzdHJpbmcsIGlkOiBzdHJpbmd9W10sXHJcbiAgICBhY3RpdmU/OiBzdHJpbmdcclxuICAgIG9uQ2hhbmdlPzogKHRhYjogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8VGFic1Byb3BzLCB7XHJcbiAgICBhY3RpdmU6IHN0cmluZ1xyXG59PiB7XHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOlRhYnNQcm9wcyA9IHtcclxuICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICB0YWJzOiBbe2xhYmVsOiBcIk5vIHRhYnMgd2FzIHBhc3NlZCB0byA8VGFicz4uXCIsIGlkOiBcIm5vbmVcIn1dLFxyXG4gICAgICAgIGFjdGl2ZTogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICBzdHlsZToge31cclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJvcHM6VGFic1Byb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IHRoaXMucHJvcHMuYWN0aXZlIHx8IG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGFic0VsZW1lbnRzOlRhYltdID0gW11cclxuICAgIFxyXG4gICAgZ2V0IHRhYnMoKTpUYWJzW1wicHJvcHNcIl1bXCJ0YWJzXCJde1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRhYnMgfHwgW11cclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUYWIodGFiOnN0cmluZyl7XHJcbiAgICAgICAgaWYodGFiID09PSB0aGlzLnN0YXRlLmFjdGl2ZSlyZXR1cm5cclxuICAgICAgICBpZih0aGlzLnByb3BzLm9uQ2hhbmdlKXRoaXMucHJvcHMub25DaGFuZ2UodGFiKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6IHRhYlxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy50YWJzRWxlbWVudHMuZm9yRWFjaChlID0+IGUuc2V0QWN0aXZlKHRhYiA9PT0gZS5wcm9wcy5pZCkpXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIiBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFibmF2XCIgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLnRhYnMubWFwKHRhYiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiLCB7VGFiQ29udGFpbmVyOiB0aGlzLCB0aXRsZTogdGFiLmxhYmVsLCBpZDogdGFiLmlkLCBrZXk6IGJ0b2EodGFiLmxhYmVsK1wiOlwiK3RhYi5pZCl9KVxyXG4gICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH0gICBcclxuXHJcbiAgICBpc0FjdGl2ZSh0YWIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAoPGRpdiBzdHlsZT17e21hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWJhY2tncm91bmQtcHJpbWFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRpdGxlPlByZXZpZXcgdGFiczwvVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSwgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiQWN0aXZlIHRhYlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlVuYWN0aXZlIHRhYlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IFwiMVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKHRhYklkKSA9PiB7fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzXHJcblxyXG5leHBvcnQgY2xhc3MgVGFiIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PHtcclxuICAgIFRhYkNvbnRhaW5lcjogVGFicywgXHJcbiAgICB0aXRsZTogc3RyaW5nLCBcclxuICAgIGlkOiBzdHJpbmdcclxufSwge1xyXG4gICAgYWN0aXZlOiBib29sZWFuXHJcbn0+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBwcm9wcy5UYWJDb250YWluZXIuaXNBY3RpdmUocHJvcHMuaWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByb3BzLlRhYkNvbnRhaW5lci50YWJzRWxlbWVudHMucHVzaCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZShpc0FjdGl2ZTpib29sZWFuKXtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgYWN0aXZlOiAhIWlzQWN0aXZlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYGxjLW5hdkl0ZW1gXHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmUpe1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtQWN0aXZlYFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gYCBsYy1uYXZJdGVtSW5hY3RpdmVgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0gb25DbGljaz17KCk9PntcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5UYWJDb250YWluZXIuY2hhbmdlVGFiKHRoaXMucHJvcHMuaWQpXHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxyXG5cclxudHlwZSBUaXRsZVByb3BzID0ge1xyXG4gICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUsXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcclxufVxyXG5cclxubGV0IFRpdGxlTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaXRsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUaXRsZVByb3BzPiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogVGl0bGVQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVGl0bGVNb2R1bGVzIHx8IChUaXRsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IHR5cGVvZiBlLmNvbG9yU3RhbmRhcmQgPT09IFwic3RyaW5nXCIpLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiB0eXBlb2YgZS5zaXplMzIgPT09IFwic3RyaW5nXCIpLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiB0eXBlb2YgZS5oMiA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICB0aXRsZU1vZHVsZVxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gYCR7Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZH0gJHtzaXplTW9kdWxlLnNpemUxNH0gJHt0aXRsZU1vZHVsZS5oMn0gJHt0aXRsZU1vZHVsZS5kZWZhdWx0Q29sb3J9ICR7dGl0bGVNb2R1bGUuZGVmYXVsdE1hcmdpbmgyfWBcclxuICAgICAgICBpZihwcm9wcy5jbGFzc05hbWUpY2xhc3NOYW1lICs9IFwiIFwiK3Byb3BzLmNsYXNzTmFtZVxyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWV9LCBwcm9wcy5jaGlsZHJlbilcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpUaXRsZVByb3BzID0ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgQWxsUHJldmlld3MoKXtcclxuICAgICAgICByZXR1cm4gQWxsUHJldmlld3MgfHwgKCgpID0+IHtcclxuICAgICAgICAgICAgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJFeGVtcGxlIHRpdGxlXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxyXG5pbXBvcnQgZXhjbHVkZVByb3BlcnRpZXMgZnJvbSBcIi4uLy4uL21vZHVsZXMvZXhjbHVkZVByb3BlcnRpZXNcIlxyXG5cclxudHlwZSBUb29sdGlwRGF0YSA9IHtcclxuICAgIG9uQ2xpY2soKTp2b2lkXHJcbiAgICBvbk1vdXNlRW50ZXIoKTp2b2lkXHJcbiAgICBvbk1vdXNlTGVhdmUoKTp2b2lkXHJcbiAgICBvbkNvbnRleHRNZW51KCk6dm9pZFxyXG4gICAgXCJhcmlhLWxhYmVsXCI6IHN0cmluZ1xyXG59XHJcbnR5cGUgVG9vbHRpcFByb3BzID0ge1xyXG4gICAgY2hpbGRyZW46UmVhY3ROb2RlLFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcG9zaXRpb24/OiBUb29sdGlwUG9zaXRpb24sXHJcbiAgICBjb2xvcj86IFRvb2x0aXBDb2xvclxyXG59XHJcblxyXG5sZXQgVG9vbHRpcE1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9vbHRpcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUb29sdGlwUHJvcHM+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBUb29sdGlwUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFRvb2x0aXBNb2R1bGVzIHx8IChUb29sdGlwTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJUb29sdGlwXCIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBUb29sdGlwXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSBleGNsdWRlUHJvcGVydGllcyh0aGlzLnByb3BzLCBbXCJjaGlsZHJlblwiXSlcclxuXHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcC5kZWZhdWx0LCBwcm9wcywgKGRhdGE6VG9vbHRpcERhdGEpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiZml0LWNvbnRlbnRcIixcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiZml0LWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6VG9vbHRpcFByb3BzID0ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgIHRleHQ6IFwiTm8gdGV4dCB3YXMgcGFzc2VkIHRvIFRvb2x0aXBcIixcclxuICAgICAgICBwb3NpdGlvbjogXCJ0b3BcIixcclxuICAgICAgICBjb2xvcjogXCJicmFuZFwiXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIFwiSG92ZXIgdGhpcyBidXR0b24gdG8gc2VlIHRoZSB0b29sdGlwXCIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiRXhhbXBsZSBUb29sdGlwIFRleHRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICBsZXQgY29sb3JzID0gW11cclxuICAgICAgICAgICAgVG9vbHRpcC5Db2xvcnMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKGNvbG9ycylcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9ucyA9IFtdXHJcbiAgICAgICAgICAgIFRvb2x0aXAuUG9zaXRpb25zLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHBcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2gocG9zaXRpb25zKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIFBvc2l0aW9uczpUb29sdGlwUG9zaXRpb25bXSA9IFtcInRvcFwiLCBcImxlZnRcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiXVxyXG4gICAgc3RhdGljIENvbG9yczpUb29sdGlwQ29sb3JbXSA9IFtcImJsYWNrXCIsIFwiZ3JleVwiLCBcImJyYW5kXCIsIFwiZ3JlZW5cIiwgXCJ5ZWxsb3dcIiwgXCJyZWRcIl1cclxufVxyXG5sZXQgQWxsUHJldmlld3NcclxuXHJcbmV4cG9ydCB0eXBlIFRvb2x0aXBQb3NpdGlvbiA9IFwidG9wXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCJcclxuZXhwb3J0IHR5cGUgVG9vbHRpcENvbG9yID0gXCJibGFja1wiIHwgXCJncmV5XCIgfCBcImJyYW5kXCIgfCBcImdyZWVuXCIgfCBcInllbGxvd1wiIHwgXCJyZWRcIiIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgeyBNb3VzZUV2ZW50SGFuZGxlciwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCJcclxuXHJcbmxldCBCdXR0b25Nb2R1bGVzXHJcblxyXG50eXBlIEJ1dHRvblByb3BzID0ge1xyXG4gICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUsXHJcbiAgICBvbkNsaWNrPzogTW91c2VFdmVudEhhbmRsZXIsXHJcbiAgICBjb2xvcj86IEJ1dHRvbkNvbG9yLFxyXG4gICAgd3JhcHBlcj86IGJvb2xlYW4sXHJcbiAgICBsb29rPzogQnV0dG9uTG9vayxcclxuICAgIHNpemU/OiBCdXR0b25TaXplLFxyXG4gICAgaG92ZXJDb2xvcj86IEJ1dHRvbkhvdmVycyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxCdXR0b25Qcm9wcywge2hvdmVyOiBib29sZWFufT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6QnV0dG9uUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBob3ZlcjogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIENvbG9yczpCdXR0b25Db2xvcltdID0gW1wiYnJhbmRcIiwgXCJncmV5XCIsIFwicmVkXCIsIFwiZ3JlZW5cIiwgXCJ5ZWxsb3dcIiwgXCJwcmltYXJ5XCIsIFwibGlua1wiLCBcIndoaXRlXCIsIFwiYmxhY2tcIiwgXCJ0cmFuc3BhcmVudFwiXVxyXG4gICAgc3RhdGljIExvb2tzOkJ1dHRvbkxvb2tbXSA9IFtcImZpbGxlZFwiLCBcImludmVydGVkXCIsIFwib3V0bGluZWRcIiwgXCJnaG9zdFwiLCBcImxpbmtcIiwgXCJibGFua1wiXVxyXG4gICAgc3RhdGljIFNpemVzOkJ1dHRvblNpemVbXSA9IFtcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIiwgXCJ4bGFyZ2VcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJpY29uXCIsIFwibm9uZVwiXVxyXG4gICAgc3RhdGljIEhvdmVyQ29sb3JzOiBCdXR0b25Ib3ZlcnNbXSA9IFtcImRlZmF1bHRcIiwgLi4uQnV0dG9uLkNvbG9yc11cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpeyAvLyBjYWNoaW5nIG1vZHVsZXNcclxuICAgICAgICByZXR1cm4gQnV0dG9uTW9kdWxlcyB8fCAoQnV0dG9uTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIl9ob3Jpem9udGFsXCJdKSxcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImNvbG9yVHJhbnNwYXJlbnRcIl0pLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYnV0dG9uV3JhcHBlclwiXSksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJCdXR0b25Db2xvcnNcIl0pLFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgZmxleE1vZHVsZSxcclxuICAgICAgICAgICAgZXVoTW9kdWxlMSxcclxuICAgICAgICAgICAgYnV0dG9uTW9kdWxlLFxyXG4gICAgICAgICAgICBjb2xvcnNNb2R1bGUsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHM6QnV0dG9uUHJvcHMgPSB7fVxyXG4gICAgICAgIGlmKHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICBpZihcImNvbG9yXCIgaW4gdGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5jb2xvciA9IHRoaXMucHJvcHMuY29sb3JcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihcImNoaWxkcmVuXCIgaW4gdGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihcIm9uQ2xpY2tcIiBpbiB0aGlzLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLm9uQ2xpY2sgPSB0aGlzLnByb3BzLm9uQ2xpY2tcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihcIndyYXBwZXJcIiBpbiB0aGlzLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLndyYXBwZXIgPSAhIXRoaXMucHJvcHMud3JhcHBlclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwibG9va1wiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMubG9vayA9IHRoaXMucHJvcHMubG9va1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwic2l6ZVwiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwiaG92ZXJDb2xvclwiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuaG92ZXJDb2xvciA9IHRoaXMucHJvcHMuaG92ZXJDb2xvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwiZGlzYWJsZWRcIiBpbiB0aGlzLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmRpc2FibGVkID0gdGhpcy5wcm9wcy5kaXNhYmxlZFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmRpc2FibGVkID0gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMuY29sb3Ipe1xyXG4gICAgICAgICAgICBwcm9wcy5jb2xvciA9IHByb3BzLmNvbG9yLnRvTG93ZXJDYXNlKCkgYXMgQnV0dG9uQ29sb3JcclxuICAgICAgICAgICAgaWYoIUJ1dHRvbi5Db2xvcnMuaW5jbHVkZXMocHJvcHMuY29sb3IpKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNvbG9yID0gQnV0dG9uLkNvbG9yc1swXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHByb3BzLmNvbG9yID0gQnV0dG9uLkNvbG9yc1swXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMubG9vayl7XHJcbiAgICAgICAgICAgIHByb3BzLmxvb2sgPSBwcm9wcy5sb29rLnRvTG93ZXJDYXNlKCkgYXMgQnV0dG9uTG9va1xyXG4gICAgICAgICAgICBpZighQnV0dG9uLkxvb2tzLmluY2x1ZGVzKHByb3BzLmxvb2spKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmxvb2sgPSBCdXR0b24uTG9va3NbMF1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBwcm9wcy5sb29rID0gQnV0dG9uLkxvb2tzWzBdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihwcm9wcy5zaXplKXtcclxuICAgICAgICAgICAgcHJvcHMuc2l6ZSA9IHByb3BzLnNpemUudG9Mb3dlckNhc2UoKSBhcyBCdXR0b25TaXplXHJcbiAgICAgICAgICAgIGlmKCFCdXR0b24uU2l6ZXMuaW5jbHVkZXMocHJvcHMuc2l6ZSkpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuc2l6ZSA9IEJ1dHRvbi5TaXplc1swXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHByb3BzLnNpemUgPSBCdXR0b24uU2l6ZXNbMF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHByb3BzLmhvdmVyQ29sb3Ipe1xyXG4gICAgICAgICAgICBwcm9wcy5ob3ZlckNvbG9yID0gcHJvcHMuaG92ZXJDb2xvci50b0xvd2VyQ2FzZSgpIGFzIEJ1dHRvbkhvdmVyc1xyXG4gICAgICAgICAgICBpZighQnV0dG9uLkhvdmVyQ29sb3JzLmluY2x1ZGVzKHByb3BzLmhvdmVyQ29sb3IpKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmhvdmVyQ29sb3IgPSBCdXR0b24uSG92ZXJDb2xvcnNbMF1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBwcm9wcy5ob3ZlckNvbG9yID0gQnV0dG9uLkhvdmVyQ29sb3JzWzBdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYnV0dG9uU2l6ZSA9IHByb3BzLnNpemUgPyBjb2xvcnNNb2R1bGUuQnV0dG9uU2l6ZXNbcHJvcHMuc2l6ZS50b1VwcGVyQ2FzZSgpXSB8fCBcIlwiIDogXCJcIlxyXG4gICAgICAgIGlmKGJ1dHRvblNpemUpYnV0dG9uU2l6ZSA9IFwiIFwiICsgYnV0dG9uU2l6ZVxyXG5cclxuICAgICAgICBsZXQgaG92ZXJDb2xvciA9IHByb3BzLmhvdmVyQ29sb3IgPyBjb2xvcnNNb2R1bGUuQnV0dG9uSG92ZXJzW3Byb3BzLmhvdmVyQ29sb3IudG9VcHBlckNhc2UoKV0gfHwgXCJcIiA6IFwiXCJcclxuICAgICAgICBpZihob3ZlckNvbG9yKWhvdmVyQ29sb3IgPSBcIiBcIiArIGhvdmVyQ29sb3JcclxuXHJcbiAgICAgICAgcHJvcHMub25DbGljayA9IHR5cGVvZiBwcm9wcy5vbkNsaWNrID09PSBcImZ1bmN0aW9uXCIgPyBwcm9wcy5vbkNsaWNrIDogKCkgPT4ge31cclxuICAgICAgICBpZih0eXBlb2YgcHJvcHMud3JhcHBlciAhPT0gXCJib29sZWFuXCIpcHJvcHMud3JhcHBlciA9IHRydWVcclxuXHJcbiAgICAgICAgbGV0IGhvdmVyID0gdGhpcy5zdGF0ZS5ob3ZlciA/IGV1aE1vZHVsZTEuaGFzSG92ZXIgOiBcIlwiXHJcbiAgICAgICAgaWYoaG92ZXIpaG92ZXIgPSBcIiBcIiArIGhvdmVyXHJcblxyXG4gICAgICAgIGxldCBidXR0b24gPSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtmbGV4TW9kdWxlLmZsZXhDaGlsZH0gJHtldWhNb2R1bGUxLmJ1dHRvbn0gJHtjb2xvcnNNb2R1bGUuQnV0dG9uTG9va3NbcHJvcHMubG9vay50b1VwcGVyQ2FzZSgpXX0gJHtjb2xvcnNNb2R1bGUuQnV0dG9uQ29sb3JzW3Byb3BzLmNvbG9yLnRvVXBwZXJDYXNlKCldfSR7YnV0dG9uU2l6ZX0ke2hvdmVyQ29sb3J9JHtob3Zlcn0gJHtldWhNb2R1bGUxLmdyb3d9YH0gXHJcbiAgICAgICAgICAgIHN0eWxlPXt7ZmxleDogXCIwIDEgYXV0b1wifX0gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSBvbk1vdXNlRW50ZXI9eyhldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoIWhvdmVyQ29sb3IpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtob3ZlcjogdHJ1ZX0pXHJcbiAgICAgICAgICAgIH19IG9uTW91c2VMZWF2ZT17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighaG92ZXJDb2xvcilyZXR1cm5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2hvdmVyOiBmYWxzZX0pXHJcbiAgICAgICAgICAgIH19IGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtldWhNb2R1bGUxLmNvbnRlbnRzfT57cHJvcHMuY2hpbGRyZW59PC9kaXY+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIGlmKHByb3BzLndyYXBwZXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2J1dHRvbk1vZHVsZS5idXR0b25XcmFwcGVyfT5cclxuICAgICAgICAgICAgICAgIHtidXR0b259XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnV0dG9uXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIGxldCBjb2xvcnMgPSBbXVxyXG4gICAgICAgICAgICBmb3IobGV0IGNvbG9yIG9mIEJ1dHRvbi5Db2xvcnMpe1xyXG4gICAgICAgICAgICAgICAgY29sb3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKGNvbG9ycylcclxuICAgICAgICAgICAgbGV0IGxvb2tzID0gW11cclxuICAgICAgICAgICAgZm9yKGxldCBsb29rIG9mIEJ1dHRvbi5Mb29rcyl7XHJcbiAgICAgICAgICAgICAgICBsb29rcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBsb29rOiBsb29rXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2gobG9va3MpXHJcbiAgICAgICAgICAgIGxldCBzaXplcyA9IFtdXHJcbiAgICAgICAgICAgIGZvcihsZXQgc2l6ZSBvZiBCdXR0b24uU2l6ZXMpe1xyXG4gICAgICAgICAgICAgICAgc2l6ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKHNpemVzKVxyXG4gICAgICAgICAgICBsZXQgaG92ZXJzID0gW11cclxuICAgICAgICAgICAgZm9yKGxldCBob3ZlciBvZiBCdXR0b24uSG92ZXJDb2xvcnMpe1xyXG4gICAgICAgICAgICAgICAgaG92ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6IGhvdmVyXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goaG92ZXJzKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7Y2hpbGRyZW46IFwiVGVzdCBCdXR0b25cIn1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7b25DbGljazogKCkgPT4ge319XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe3dyYXBwZXI6IGZhbHNlfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tkaXNhYmxlZDogZmFsc2V9LCB7ZGlzYWJsZWQ6IHRydWV9XSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3c1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJicmFuZFwiIHwgXCJncmV5XCIgfCBcInJlZFwiIHwgXCJncmVlblwiIHwgXCJ5ZWxsb3dcIiB8IFwicHJpbWFyeVwiIHwgXCJsaW5rXCIgfCBcIndoaXRlXCIgfCBcImJsYWNrXCIgfCBcInRyYW5zcGFyZW50XCJcclxuZXhwb3J0IHR5cGUgQnV0dG9uTG9vayA9IFwiZmlsbGVkXCIgfCBcImludmVydGVkXCIgfCBcIm91dGxpbmVkXCIgfCBcImdob3N0XCIgfCBcImxpbmtcIiB8IFwiYmxhbmtcIlxyXG5leHBvcnQgdHlwZSBCdXR0b25TaXplID0gXCJub25lXCIgfCBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIiB8IFwibWluXCIgfCBcIm1heFwiIHwgXCJpY29uXCJcclxuZXhwb3J0IHR5cGUgQnV0dG9uSG92ZXJzID0gXCJkZWZhdWx0XCIgfCBCdXR0b25Db2xvciIsImltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4uL2dlbmVyYWwvVG9vbHRpcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBkZWZhdWx0Q29sb3I6IDEwMDcwNzA5LFxyXG4gICAgYmFzZUNvbG9yczogW1xyXG4gICAgICAgIDE3NTIyMjAsIFxyXG4gICAgICAgIDMwNjY5OTMsIFxyXG4gICAgICAgIDM0NDcwMDMsIFxyXG4gICAgICAgIDEwMTgxMDQ2LCBcclxuICAgICAgICAxNTI3NzY2NywgXHJcbiAgICAgICAgMTU4NDQzNjcsIFxyXG4gICAgICAgIDE1MTA1NTcwLCBcclxuICAgICAgICAxNTE1ODMzMiwgXHJcbiAgICAgICAgOTgwNzI3MCwgXHJcbiAgICAgICAgNjMyMzU5NSwgXHJcbiAgICAgICAgMTE0Njk4NiwgXHJcbiAgICAgICAgMjA2NzI3NiwgXHJcbiAgICAgICAgMjEyMzQxMiwgXHJcbiAgICAgICAgNzQxOTUzMCwgXHJcbiAgICAgICAgMTEzNDI5MzUsIFxyXG4gICAgICAgIDEyNzQ1NzQyLCBcclxuICAgICAgICAxMTAyNzIwMCwgXHJcbiAgICAgICAgMTAwMzg1NjIsIFxyXG4gICAgICAgIDk5MzYwMzEsIFxyXG4gICAgICAgIDU1MzMzMDZcclxuICAgIF1cclxufVxyXG5cclxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xyXG4gICAgZGVmYXVsdENvbG9yPzogbnVtYmVyLFxyXG4gICAgY3VzdG9tQ29sb3I/OiBudW1iZXIsXHJcbiAgICBiYXNlQ29sb3JzPzogbnVtYmVyW10sXHJcbiAgICB2YWx1ZT86IHN0cmluZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzogKGNvbG9yOm51bWJlcikgPT4gdm9pZFxyXG59XHJcblxyXG5sZXQgQ29sb3JQaWNrZXJNb2R1bGVzXHJcbmxldCBpc0ZldGNoaW5nID0gbnVsbFxyXG5cclxuLyoqXHJcbiAqIFRoaXMgY29tcG9uZW5udCBuZWVkcyB0byBiZSBsb2FkZWQuIEFzIGEgcmVzdWx0LCB5b3UgbWF5IGV4cGVyaWVuY2UgMTAwLTMwMG1zIGxvYWRpbmcgdGhlIGZpcnN0IHRpbWUuXHJcbiAqIFJlbmRlciB3aWxsIHJldHVybiBgbnVsbGAgYmVmb3JlIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yUGlja2VyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxDb2xvclBpY2tlclByb3BzLCB7dmFsdWU/OnN0cmluZyxsYXN0Q29sb3I6YW55fT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6Q29sb3JQaWNrZXJQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RDb2xvcjogdGhpcy5wcm9wcy52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFByZWxvYWQgdGhlIGNvbXBvbmVudC4gKi9cclxuICAgIHN0YXRpYyBwcmVsb2FkKCl7XHJcbiAgICAgICAgaWYoQ29sb3JQaWNrZXIucHJvdG90eXBlLm1vZHVsZXNbMF0pcmV0dXJuXHJcbiAgICAgICAgaWYoaXNGZXRjaGluZylyZXR1cm5cclxuICAgICAgICBuZXcgQ29sb3JQaWNrZXIoe30pLnJlbmRlcigpXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbClcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpDb2xvclBpY2tlclByb3BzID0ge1xyXG4gICAgICAgIGRlZmF1bHRDb2xvcjogQ29uc3RhbnRzLmRlZmF1bHRDb2xvcixcclxuICAgICAgICBjdXN0b21Db2xvcjogbnVsbCxcclxuICAgICAgICBiYXNlQ29sb3JzOiBDb25zdGFudHMuYmFzZUNvbG9ycyxcclxuICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgb25DaGFuZ2U6IE5PT1BcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBDb2xvclBpY2tlck1vZHVsZXMgfHwgKENvbG9yUGlja2VyTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJDb2xvclBpY2tlclwiKVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQ29sb3JQaWNrZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBDb2xvclBpY2tlckNvbXBvbmVudFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgaWYoIUNvbG9yUGlja2VyQ29tcG9uZW50KXtcclxuICAgICAgICAgICAgaWYoaXNGZXRjaGluZyl7IC8vIHN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbG9yIHBpY2tlclxyXG4gICAgICAgICAgICAgICAgaXNGZXRjaGluZy50aGVuKCgpID0+IHRoaXMuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQ29sb3JQaWNrZXJNb2R1bGVzID0gbnVsbFxyXG4gICAgICAgICAgICBsZXQgcmVzb2x2ZVxyXG4gICAgICAgICAgICBpc0ZldGNoaW5nID0gbmV3IFByb21pc2UocmVzID0+IChyZXNvbHZlID0gcmVzKSlcclxuICAgICAgICAgICAgY29uc3QgR3VpbGRTZXR0aW5nc1JvbGVzID0gbmV3IChXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZS5pbmNsdWRlcyhcIkd1aWxkU2V0dGluZ3NSb2xlc1wiKSkuZGVmYXVsdCkoKS5yZW5kZXIoKS50eXBlXHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gR3VpbGRTZXR0aW5nc1JvbGVzLnByb3RvdHlwZS5yZW5kZXJSb2xlU2V0dGluZ3MuY2FsbCh7XHJcbiAgICAgICAgICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGd1aWxkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT3duZXI6ICgpID0+IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXNlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXRTZWxlY3RlZFJvbGUoKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY29uc3QgR3VpbGRSb2xlU2V0dGluZ3MgPSBzZXR0aW5ncy5wcm9wcy5jaGlsZHJlbi50eXBlXHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IEd1aWxkUm9sZVNldHRpbmdzLnByb3RvdHlwZS5yZW5kZXJDb2xvclBpY2tlci5jYWxsKHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IDBcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlcnlvbmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUoY2hpbGRyZW4ucHJvcHMpLnByb3BzLmNoaWxkcmVuLnR5cGUuX2N0b3IoKS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8Q29sb3JQaWNrZXJDb21wb25lbnQuZGVmYXVsdCBjb2xvcnM9e3RoaXMucHJvcHMuYmFzZUNvbG9yc30gZGVmYXVsdENvbG9yPXt0aGlzLnByb3BzLmRlZmF1bHRDb2xvcn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IFxyXG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IGN1c3RvbUNvbG9yPXt0aGlzLnByb3BzLmN1c3RvbUNvbG9yfT5cclxuICAgICAgICA8L0NvbG9yUGlja2VyQ29tcG9uZW50LmRlZmF1bHQ+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5sYXN0Q29sb3IgIT09IHRoaXMucHJvcHMudmFsdWUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBsYXN0Q29sb3I6IHRoaXMucHJvcHMudmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2xvclBpY2tlcigpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdLCBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFV0aWxzLkhleENvbG9yVG9EZWNpbWFsKFwiIzcyODlEQVwiKVxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKGNvbG9yKSA9PiB7fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGhlbHAgPSB7XHJcbiAgICAgICAgaW5mbzogXCJUbyBjb252ZXJ0IGhleCBjb2xvcnMgdG8gZGVjaW1hbCwgeW91IGNhbiBkbyBgTGlnaHRjb3JkLkFwaS5VdGlscy5IZXhDb2xvclRvRGVjaW1hbCgnI3lvdXJjb2xvcicpYCBhbmQgZ28gYmFjayB3aXRoIGBMaWdodGNvcmQuQXBpLlV0aWxzLkRlY2ltYWxDb2xvclRvSGV4KDc1MDYzOTQpYFwiLFxyXG4gICAgICAgIHdhcm46IFwiVGhlIGNvbXBvbmVudCBtYXkgbm90IGFwcGVhciBpbnN0YW50bHkuIFRoZSBjb21wb25lbnQgbmVlZHMgdG8gYmUgbG9hZGVkLCBzbyB5b3UgY291bGQgZXhwZXJpZW5jZSA1MC0zMDBtcyBsb2FkaW5nIHRpbWUgZGVwZW5kaW5nIG9uIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi5cIlxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IHsgUmVhY3ROb2RlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCJcclxuXHJcbnR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGVycm9yPzogc3RyaW5nLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxyXG4gICAgICAgIGxhYmVsOiBzdHJpbmdcclxuICAgIH1bXSxcclxuICAgIHZhbHVlUmVuZGVyZXI/OiAoZGF0YSkgPT4gUmVhY3ROb2RlLFxyXG4gICAgb3B0aW9uUmVuZGVyZXI/OiAoZGF0YSkgPT4gUmVhY3ROb2RlLFxyXG4gICAgbXVsdGlWYWx1ZVJlbmRlcmVyPzogKGRhdGEpID0+IFJlYWN0Tm9kZVxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcclxuICAgIHZhbHVlPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW4sXHJcbiAgICBjbGVhcmFibGU/OiBib29sZWFuLFxyXG4gICAgc3R5bGVPdmVycmlkZXM/OiBDU1NQcm9wZXJ0aWVzLFxyXG4gICAgbGlnaHRUaGVtZUNvbG9yT3ZlcnJpZGVzPzogdGhlbWVPdmVycmlkZSxcclxuICAgIGRhcmtUaGVtZUNvbG9yT3ZlcnJpZGVzPzogdGhlbWVPdmVycmlkZSxcclxuICAgIGlzTXVsdGk/OiBib29sZWFuXHJcbn1cclxuXHJcbnR5cGUgdGhlbWVPdmVycmlkZSA9IHtcclxuICAgIG5ldXRyYWwwOiBzdHJpbmcsXHJcbiAgICBuZXV0cmFsNTogc3RyaW5nLFxyXG4gICAgbmV1dHJhbDEwOiBzdHJpbmcsXHJcbiAgICBuZXV0cmFsMjA6IHN0cmluZyxcclxuICAgIG5ldXRyYWwzMDogc3RyaW5nLFxyXG4gICAgcHJpbWFyeTogc3RyaW5nLFxyXG4gICAgcHJpbWFyeTI1OiBzdHJpbmcsXHJcbiAgICBwcmltYXJ5NTA6IHN0cmluZyxcclxuICAgIHNlbGVjdGVkT3B0aW9uQmFja2dyb3VuZDogc3RyaW5nLFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgbWVudUJhY2tncm91bmQ6IHN0cmluZyxcclxuICAgIG1lbnVCb3JkZXI6IHN0cmluZyxcclxuICAgIHNjcm9sbEJhclRodW1iOiBzdHJpbmcsXHJcbiAgICBtdWx0aU9wdGlvbkJhY2tncm91bmQ6IHN0cmluZ1xyXG59XHJcblxyXG5sZXQgRHJvcGRvd25Nb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PERyb3Bkb3duUHJvcHMsIHt2YWx1ZTogc3RyaW5nfG51bGx9PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpEcm9wZG93blByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpEcm9wZG93blByb3BzID0ge1xyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICBvcHRpb25zOiBbe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIFwibGFiZWxcIjogXCJObyBvcHRpb25zIC0gTm8gb3B0aW9ucyB3YXMgcGFzc2VkIHRvIERyb3Bkb3duLiBJZiB5b3UgbWVhbnQgdG8gcHV0IGFuIGVtcHR5IGRyb3Bkb3duLCBpbnB1dCBhbiBlbXB0eSBhcnJheS5cIlxyXG4gICAgICAgIH1dLFxyXG4gICAgICAgIHZhbHVlUmVuZGVyZXI6IG51bGwsXHJcbiAgICAgICAgbXVsdGlWYWx1ZVJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIG9wdGlvblJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIG9uQ2hhbmdlOiBOT09QLFxyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcclxuICAgICAgICBjbGVhcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIHN0eWxlT3ZlcnJpZGVzOiBudWxsLFxyXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvck92ZXJyaWRlczogbnVsbCxcclxuICAgICAgICBkYXJrVGhlbWVDb2xvck92ZXJyaWRlczogbnVsbCxcclxuICAgICAgICBpc011bHRpOiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIERyb3Bkb3duTW9kdWxlcyB8fCAoRHJvcGRvd25Nb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlNlbGVjdFRlbXBXcmFwcGVyXCIpLmRlZmF1bHRcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIERyb3Bkb3duQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gPERyb3Bkb3duQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfS8+XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJlZFwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJPcHRpb24gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdGlvbjJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiT3B0aW9uIDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHRpb24zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9wdGlvbiAzXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBjbGVhcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaXNNdWx0aTogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgaXNNdWx0aTogdHJ1ZVxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuXHJcblxyXG50eXBlIFJhZGlvR3JvdXBQcm9wcyA9IHtcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgY29sb3I/OiBzdHJpbmcsXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXHJcbiAgICAgICAgZGVzYz86IHN0cmluZ1xyXG4gICAgfVtdLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcclxuICAgIHZhbHVlPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgc2l6ZT86IFwic21hbGxcInxcIm1lZGl1bVwiLFxyXG4gICAgaXRlbVR5cGU/OiBcImJhclwifFwicGFuZWxcIixcclxuICAgIGluZm9DbGFzc05hbWU/OiBzdHJpbmdcclxufVxyXG5cclxubGV0IFJhZGlvR3JvdXBNb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaW9Hcm91cCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxSYWRpb0dyb3VwUHJvcHMsIHt2YWx1ZT86IHN0cmluZ30+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6UmFkaW9Hcm91cFByb3BzID0ge1xyXG4gICAgICAgIG9wdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgbmFtZTogXCJObyBvcHRpb25zXCIsXHJcbiAgICAgICAgICAgIGRlc2M6IFwiTm8gb3B0aW9ucyB3YXMgcGFzc2VkIHRvIENob2ljZXMuIElmIHlvdSBtZWFudCB0byBkaXNwbGF5IG5vIG9wdGlvbnMgYXQgYWxsLCBwbGVhc2UgcGFzcyBhbiBlbXB0eSBhcnJheS5cIixcclxuICAgICAgICAgICAgY29sb3I6IFwiI2YwNDc0N1wiXHJcbiAgICAgICAgfV0sXHJcbiAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgaXRlbVR5cGU6IFwiYmFyXCIsXHJcbiAgICAgICAgaW5mb0NsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IocHJvcHM6UmFkaW9Hcm91cFByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGV2KXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2LnZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogZXYudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFJhZGlvR3JvdXBNb2R1bGUgfHwgKFJhZGlvR3JvdXBNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiUmFkaW9Hcm91cFwiKS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBSYWRpb0dyb3VwQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIDxSYWRpb0dyb3VwQ29tcG9uZW50IG9wdGlvbnM9e3Byb3BzLm9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfSBcclxuICAgICAgICAgICAgc2l6ZT17UmFkaW9Hcm91cENvbXBvbmVudC5TaXplc1twcm9wcy5zaXplLnRvVXBwZXJDYXNlKCldfSBpdGVtVHlwZT17UmFkaW9Hcm91cENvbXBvbmVudC5JdGVtVHlwZXNbcHJvcHMuaXRlbVR5cGUudG9VcHBlckNhc2UoKV19IFxyXG4gICAgICAgICAgICBpbmZvQ2xhc3NOYW1lPXtwcm9wcy5pbmZvQ2xhc3NOYW1lfS8+XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCk6c3RyaW5nfG51bGx7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk9wdGlvbiAxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFwiZGVzY3JpcHRpb24gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdGlvbjJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJPcHRpb24gMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcImRlc2NyaXB0aW9uIDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHRpb24zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiT3B0aW9uIDNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXCJkZXNjcmlwdGlvbiAzXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogXCJiYXJcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogXCJwYW5lbFwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB1dWlkIGZyb20gXCIuLi8uLi9tb2R1bGVzL3V1aWRcIlxyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ub29wXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuXHJcbnR5cGUgU3dpdGNoUHJvcHMgPSB7XHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIG9uQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQsXHJcbiAgICB2YWx1ZT86IGJvb2xlYW4sXHJcbiAgICBmaWxsPzogc3RyaW5nLFxyXG4gICAgdGhlbWU/OiBcImRlZmF1bHRcInxcImNsZWFyXCIsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogXCJkZWZhdWx0XCJ8XCJtaW5pXCIsXHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcclxufVxyXG5cclxubGV0IFN3aXRjaE1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFN3aXRjaFByb3BzLCB7dmFsdWU6IGJvb2xlYW59PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpTd2l0Y2hQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gU3dpdGNoTW9kdWxlcyB8fCAoU3dpdGNoTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJTd2l0Y2hcIikuZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgU3dpdGNoQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuICg8U3dpdGNoQ29tcG9uZW50IGlkPXtwcm9wcy5pZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlIHx8IGZhbHNlfSBmaWxsPXtwcm9wcy5maWxsfSBcclxuICAgICAgICAgICAgdGhlbWU9e1N3aXRjaENvbXBvbmVudC5UaGVtZXNbcHJvcHMudGhlbWUudG9VcHBlckNhc2UoKV19IGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0gY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9IFxyXG4gICAgICAgICAgICBzaXplPXtTd2l0Y2hDb21wb25lbnQuU2l6ZXNbcHJvcHMuc2l6ZS50b1VwcGVyQ2FzZSgpXX0gc3R5bGU9e3Byb3BzLnN0eWxlfS8+KVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKCF0aGlzLnN0YXRlLnZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogIXRoaXMuc3RhdGUudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YWx1ZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgZmlsbDogbnVsbCxcclxuICAgICAgICB0aGVtZTogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBzaXplOiBcImRlZmF1bHRcIixcclxuICAgICAgICBzdHlsZToge31cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe29uQ2hhbmdlOiAodmFsdWUpID0+IHt9fV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIHRoZW1lOiBcImRlZmF1bHRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0aGVtZTogXCJjbGVhclwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctc3dpdGNoXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiBudWxsXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtaW5pXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge31cclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGVscCA9IHtcclxuICAgICAgICBlcnJvcjogXCJUaGUgYGNsZWFyYCBvcHRpb24gZG9lc24ndCB3b3JrIHdlbGwgb24gbGlnaHQgdGhlbWUuXCJcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG50eXBlIFRleHRBcmVhUHJvcHMgPSB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OiBib29sZWFuLFxyXG4gICAgcmVzaXplYWJsZT86IGJvb2xlYW4sXHJcbiAgICBmbGV4PzogYm9vbGVhbixcclxuICAgIGF1dG9zaXplPzogZmFsc2UsXHJcbiAgICByb3dzPzogbnVtYmVyLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBlcnJvcj86IHN0cmluZyxcclxuICAgIG1heExlbmd0aD86IG51bWJlcixcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldiwgbmFtZTogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2LCBuYW1lOiBzdHJpbmcpID0+IHZvaWQsXHJcbiAgICBvbktleURvd24/OiAoZXYpID0+IHZvaWRcclxufVxyXG5cclxubGV0IFRleHRBcmVhTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0QXJlYSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUZXh0QXJlYVByb3BzLCB7dmFsdWU6IHN0cmluZ30+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOlRleHRBcmVhUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5vbkZvY3VzID0gdGhpcy5vbkZvY3VzLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uQmx1ciA9IHRoaXMub25CbHVyLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IHRoaXMub25LZXlEb3duLmJpbmQodGhpcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IFwiXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVGV4dEFyZWFNb2R1bGVzIHx8IChUZXh0QXJlYU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVGV4dEFyZWFcIikuZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUsIG5hbWUpe1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUsIG5hbWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzKGV2LCBuYW1lKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uRm9jdXMoZXYsIG5hbWUpXHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKGV2LCBuYW1lKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQmx1cihldiwgbmFtZSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgb25LZXlEb3duKGV2KXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uS2V5RG93bihldilcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gPFRleHRBcmVhQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IG9uRm9jdXM9e3RoaXMub25Gb2N1c30gb25CbHVyPXt0aGlzLm9uQmx1cn0gb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9Lz5cclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsdWUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZSB8fCBcIlwiXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpUZXh0QXJlYVByb3BzID0ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLFxyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgcmVzaXplYWJsZTogZmFsc2UsXHJcbiAgICAgICAgZmxleDogZmFsc2UsXHJcbiAgICAgICAgYXV0b3NpemU6IGZhbHNlLFxyXG4gICAgICAgIHJvd3M6IDMsXHJcbiAgICAgICAgdmFsdWU6IFwiXCIsXHJcbiAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiBudWxsLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICBvbkZvY3VzOiBOT09QLFxyXG4gICAgICAgIG9uQmx1cjogTk9PUCxcclxuICAgICAgICBvbktleURvd246IE5PT1BcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXQgQWxsUHJldmlld3MoKXtcclxuICAgICAgICByZXR1cm4gQWxsUHJldmlld3MgfHwgKCgpID0+IHtcclxuICAgICAgICAgICAgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImFwaS1wcmV2aWV3LXRleHRhcmVhXCJcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG51bGxcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICByZXNpemVhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICByZXNpemVhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBmbGV4OiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBmbGV4OiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBhdXRvc2l6ZTogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgYXV0b3NpemU6IHRydWVcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIHJvd3M6IDNcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgcm93czogMlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICByb3dzOiAxXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiRXhhbXBsZSBlcnJvclwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IDEwMFxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZTogXCJcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctdGV4dGFyZWFcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBoZWxwID0ge1xyXG4gICAgICAgIHdhcm46IFwiVGhpcyBzaG91bGQgYmUgdXNlZCBmb3IgbXVsdGkgbGluZSBpbnB1dHMuXCJcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiBcImRlZmF1bHRcInxcIm1pbmlcIlxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXHJcbiAgICB2YWx1ZT86IHN0cmluZyxcclxuICAgIGVycm9yPzogc3RyaW5nLFxyXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyLFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgaW5wdXRDbGFzc05hbWU/OiBzdHJpbmdcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpbnB1dDogVGV4dElucHV0KSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldiwgbmFtZTogc3RyaW5nLCBpbnB1dDogVGV4dElucHV0KSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2LCBuYW1lOiBzdHJpbmcsIGlucHV0OiBUZXh0SW5wdXQpID0+IHZvaWRcclxufVxyXG5cclxubGV0IFRleHRJbnB1dE1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxUZXh0SW5wdXRQcm9wcywge3ZhbHVlOiBzdHJpbmd9PiB7XHJcbiAgICBoYXNTZXQ6IGJvb2xlYW5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0SW5wdXRQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uRm9jdXMgPSB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMub25CbHVyID0gdGhpcy5vbkJsdXIuYmluZCh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUgfHwgXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOlRleHRJbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG5hbWU6IFwiXCIsXHJcbiAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxyXG4gICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgIG1heExlbmd0aDogOTk5LFxyXG4gICAgICAgIGNsYXNzTmFtZTogXCJcIixcclxuICAgICAgICBpbnB1dENsYXNzTmFtZTogXCJcIixcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICBvbkZvY3VzOiBOT09QLFxyXG4gICAgICAgIG9uQmx1cjogTk9PUFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFRleHRJbnB1dE1vZHVsZXMgfHwgKFRleHRJbnB1dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVGV4dElucHV0XCIpLmRlZmF1bHRcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlLCBuYW1lKXtcclxuICAgICAgICB0aGlzLmhhc1NldCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSwgbmFtZSwgdGhpcylcclxuICAgICAgICBpZih0aGlzLmhhc1NldClyZXR1cm4gLy8gcHJldmVudCBldmVudCBpZiB0aGUgb25DaGFuZ2UgaGFzIGNoYW5nZWQgdGhlIHZhbHVlLlxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cyhldiwgbmFtZSl7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkZvY3VzKGV2LCBuYW1lLCB0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cihldiwgbmFtZSl7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoZXYsIG5hbWUsIHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgVGV4dEFyZWFDb21wb25lbnRcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGxldCBwcm9wcyA9IHRoaXMucHJvcHNcclxuICAgICAgICByZXR1cm4gPFRleHRBcmVhQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IG9uRm9jdXM9e3RoaXMub25Gb2N1c30gb25CbHVyPXt0aGlzLm9uQmx1cn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IC8+XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWUgfHwgXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKHZhbHVlOnN0cmluZyl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgdGhpcy5oYXNTZXQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiYXBpLXByZXZpZXctdGV4dGlucHV0XCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcImRlZmF1bHRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1pbmlcIlxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJFeGFtcGxlIGVycm9yXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IDk5OVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJcIlxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGlucHV0Q2xhc3NOYW1lOiBcIlwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctdGV4dGlucHV0XCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge31cclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGVscCA9IHtcclxuICAgICAgICB3YXJuOiBcIlRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIHNpbmdsZSBsaW5lIGlucHV0cy5cIlxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgeyBub3RpY2UsIG5vdGljZXMsIGV2ZW50cyB9IGZyb20gXCIuL05vdGljZXNcIlxyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ub29wXCJcclxuXHJcbmxldCBOb3RpY2VNb2R1bGVzXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Tm90aWNlOm5vdGljZSA9IHtcclxuICAgIHRleHQ6IFwiXCIsXHJcbiAgICBpZDogXCJ1bmtub3duIGlkXCIsXHJcbiAgICBvbkNsaWNrOiBOT09QLFxyXG4gICAgYnV0dG9uVGV4dDogbnVsbCxcclxuICAgIHR5cGU6IFwiZGVmYXVsdFwiXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm90aWNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PG5vdGljZT4ge1xyXG4gICAgc3RhdGljIGRpc3BsYXlOYW1lID0gXCJMaWdodGNvcmROb3RpY2VcIlxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpub3RpY2UgPSBkZWZhdWx0Tm90aWNlXHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gTm90aWNlTW9kdWxlcyB8fCAoTm90aWNlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5ub3RpY2VJbmZvKVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IFtcclxuICAgICAgICAgICAgbm90aWNlQ2xhc3Nlc1xyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm90aWNlQ2xhc3Nlc1tcIm5vdGljZVwiK3RoaXMucHJvcHMudHlwZS5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpK3RoaXMucHJvcHMudHlwZS5zbGljZSgxKV1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgaWYoIWNsYXNzTmFtZSl7XHJcbiAgICAgICAgICAgIG5vdGljZXMucG9wKClcclxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMucHJvcHMuYnV0dG9uVGV4dCA/IDxidXR0b24gY2xhc3NOYW1lPXtub3RpY2VDbGFzc2VzLmJ1dHRvbn0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBub3RpY2VzLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpXHJcbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICAgICAgfX0+e3RoaXMucHJvcHMuYnV0dG9uVGV4dH08L2J1dHRvbj4gOiBudWxsXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bm90aWNlQ2xhc3Nlcy5kaXNtaXNzfSByb2xlPVwiYnV0dG9uXCIgdGFiSW5kZXg9ezB9IG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vdGljZXMucG9wKClcclxuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICAgICAgICAgIH19IC8+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRleHR9XHJcbiAgICAgICAgICAgIHtidXR0b259XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgTm90aWNlIGZyb20gXCIuL05vdGljZVwiXHJcbmltcG9ydCB1dWlkIGZyb20gXCIuLi8uLi9tb2R1bGVzL3V1aWRcIlxyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCJcclxuXHJcbmV4cG9ydCBjb25zdCBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vdGljZXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e2NvbnRhaW5lcjogYW55fT4ge1xyXG4gICAgc3RhdGljIGRpc3BsYXlOYW1lID0gXCJMaWdodGNvcmROb3RpY2VzXCJcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7fVxyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFJlYWRvbmx5PHsgY29udGFpbmVyOiBhbnkgfT4pe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLm5vdGljZUhhbmRsZXIgPSB0aGlzLm5vdGljZUhhbmRsZXIuYmluZCh0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG5vdGljZUhhbmRsZXIoKXtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsTW91bnQoKXtcclxuICAgICAgICBldmVudHMub24oXCJub3RpY2VVcGRhdGVcIiwgdGhpcy5ub3RpY2VIYW5kbGVyKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCl7XHJcbiAgICAgICAgZXZlbnRzLm9mZihcIm5vdGljZVVwZGF0ZVwiLCB0aGlzLm5vdGljZUhhbmRsZXIpXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuaGFzTm90aWNlKXJldHVybiBudWxsXHJcbiAgICAgICAgY29uc3Qgbm90aWNlID0gbm90aWNlc1swXVxyXG4gICAgICAgIHJldHVybiA8Tm90aWNlIHsuLi5ub3RpY2V9PjwvTm90aWNlPlxyXG4gICAgfVxyXG5cclxuICAgIGdldCBoYXNOb3RpY2UoKXtcclxuICAgICAgICByZXR1cm4gbm90aWNlcy5sZW5ndGggPiAwXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBub3RpY2VzOm5vdGljZVtdID0gW11cclxuXHJcbmV4cG9ydCB0eXBlIG5vdGljZVdpdGhvdXRJRCA9IHtcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIGJ1dHRvblRleHQ/OiBzdHJpbmcsXHJcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcclxuICAgIHR5cGU6IFwiZGVmYXVsdFwifFwiaW5mb1wifFwic3VjY2Vzc1wifFwiZGFuZ2VyXCJ8XCJzdHJlYW1lck1vZGVcInxcImRvd25sb2FkXCJ8XCJub3RpZmljYXRpb25cInxcInByZW1pdW1cInxcInJpY2hQcmVzZW5jZVwifFwicHJlbWl1bVRpZXIxXCJ8XCJwcmVtaXVtVGllcjJcInxcImZhY2Vib29rXCJ8XCJicmFuZFwifFwic3VydmV5XCJ8XCJzcG90aWZ5XCJcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgbm90aWNlID0ge1xyXG4gICAgaWQ6IHN0cmluZ1xyXG59ICYgbm90aWNlV2l0aG91dElEIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IENvbXBvbmVudHMgZnJvbSBcIi4vY29tcG9uZW50cy9jb21wb25lbnRzXCJcclxuaW1wb3J0IHV1aWQgZnJvbSBcIi4vbW9kdWxlcy91dWlkXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL21vZHVsZXMvVXRpbHNcIlxyXG5pbXBvcnQgRGlzY29yZFRvb2xzIGZyb20gXCIuL21vZHVsZXMvRGlzY29yZFRvb2xzXCJcclxuaW1wb3J0ICogYXMgcGF0Y2hlcnMgZnJvbSBcIi4vbW9kdWxlcy9wYXRjaGVyc1wiXHJcbmltcG9ydCBleGNsdWRlUHJvcGVydGllcyBmcm9tIFwiLi9tb2R1bGVzL2V4Y2x1ZGVQcm9wZXJ0aWVzXCJcclxuaW1wb3J0IGNsb25lTnVsbFByb3RvIGZyb20gXCIuL21vZHVsZXMvY2xvbmVOdWxsUHJvdG9cIlxyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgdW5mcmVlemUgZnJvbSBcIi4vbW9kdWxlcy9VbmZyZWV6ZVwiXHJcbnBhdGNoZXJzLnBhdGNoKClcclxuXHJcbmNvbnN0IExpZ2h0Y29yZEFwaSA9IHtcclxuICAgIFdlYnBhY2tMb2FkZXI6IFdlYnBhY2tMb2FkZXIsXHJcbiAgICBDb21wb25lbnRzOiBDb21wb25lbnRzLFxyXG4gICAgdXVpZDogdXVpZCxcclxuICAgIFV0aWxzOiBVdGlscyxcclxuICAgIERpc2NvcmRUb29sczogRGlzY29yZFRvb2xzLFxyXG4gICAgXzoge1xyXG4gICAgICAgIGV4Y2x1ZGVQcm9wZXJ0aWVzOiBleGNsdWRlUHJvcGVydGllcyxcclxuICAgICAgICBjbG9uZU51bGxQcm90bzogY2xvbmVOdWxsUHJvdG8sXHJcbiAgICAgICAgTk9PUDogTk9PUCxcclxuICAgICAgICB1bmZyZWV6ZTogdW5mcmVlemVcclxuICAgIH1cclxufVxyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgdmFyIFJlYWN0OnR5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKVxyXG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICAgICAgTGlnaHRjb3JkOiBMaWdodGNvcmRHbG9iYWwsXHJcbiAgICAgICAgQkRNb2R1bGVzOiB7XHJcbiAgICAgICAgICAgIG1vZHVsZXM6YW55W10sXHJcbiAgICAgICAgICAgIGdldChmaWx0ZXI6KG1vZDphbnkpPT5ib29sZWFuLCBtb2R1bGVzPzphbnlbXSk6YW55W10sXHJcbiAgICAgICAgICAgIGdldChpZDpudW1iZXIsIG1vZHVsZXM/OmFueVtdKTphbnksXHJcbiAgICAgICAgICAgIGdldChpZHM6IFtudW1iZXJ8KChtb2Q6YW55KT0+Ym9vbGVhbildLCBtb2R1bGVzPzphbnlbXSk6YW55XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIExpZ2h0Y29yZDpMaWdodGNvcmRHbG9iYWxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlnaHRjb3JkQXBpXHJcblxyXG5PYmplY3QuYXNzaWduKHdpbmRvdy5MaWdodGNvcmQuQXBpLCBMaWdodGNvcmRBcGkpXHJcblxyXG4vKipcclxuICogVGhlIG1haW4gTGlnaHRjb3JkIGV4cG9ydHMuIENhbiBiZSBhY2Nlc3NlZCB3aXRoIGB3aW5kb3cuTGlnaHRjb3JkYFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBMaWdodGNvcmRHbG9iYWwge1xyXG4gICAgRGlzY29yZE1vZHVsZXM6IHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJbnRlcm5hbCBEaXNjb3JkJ3MgZGlzcGF0Y2hlciAtIGNhbiBiZSB1c2VkIHRvIHN1YnNjcmliZSB0byBnYXRld2F5IGV2ZW50cyAvIGNsaWVudCBldmVudHMuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZGlzcGF0Y2hlcjogaW1wb3J0KFwiLi90eXBlcy9EaXNjb3JkRGlzcGF0Y2hlclR5cGVzXCIpLmRlZmF1bHQsXHJcbiAgICAgICAgY29uc3RhbnRzOiBpbXBvcnQoXCIuL3R5cGVzL0Rpc2NvcmRDb25zdGFudHNUeXBlc1wiKS5kZWZhdWx0XHJcbiAgICB9LFxyXG4gICAgU2V0dGluZ3M6IHtcclxuICAgICAgICBkZXZNb2RlOiBib29sZWFuLFxyXG4gICAgICAgIGNhbGxSaW5naW5nQmVhdDogYm9vbGVhblxyXG4gICAgfSxcclxuICAgIEFwaTogTGlnaHRjb3JkQXBpR2xvYmFsLFxyXG4gICAgQmV0dGVyRGlzY29yZDoge1xyXG4gICAgICAgIEJkQXBpOiB0eXBlb2YgaW1wb3J0KFwiQGJhbmRhZ2VkYmQvYmRhcGlcIikuQmRBcGksXHJcbiAgICAgICAgW21vZDpzdHJpbmddOmFueVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGhlIG1haW4gQXBpLiBDYW4gYmUgYWNjZXNzZWQgd2l0aCBgd2luZG93LkxpZ2h0Y29yZC5BcGlgXHJcbiAqL1xyXG50eXBlIExpZ2h0Y29yZEFwaUdsb2JhbCA9IGxpZ2h0Y29yZEFwaU1haW5FeHBvcnRzICYgdHlwZW9mIExpZ2h0Y29yZEFwaVxyXG5cclxudHlwZSBsaWdodGNvcmRBcGlNYWluRXhwb3J0cyA9IHtcclxuICAgIC8qKlxyXG4gICAgICogV2FpdHMgdW50aWwgdGhlIGZpcnN0IG1vZHVsZSB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgZ2V0cyBleHBvcnRlZFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBtb2R1bGUgdG8gbWF0Y2guXHJcbiAgICAgKi9cclxuICAgIGVuc3VyZUV4cG9ydGVkKGZpbHRlcjogKG1vZDphbnkpID0+IGJvb2xlYW4pOlByb21pc2U8YW55PixcclxuICAgIC8qKlxyXG4gICAgICogUmVjcmVhdGUgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBgX19wcm90b19fYCBhbmQgYHByb3RvdHlwZWAgcHJvcGVydGllcyAtIHVzZWZ1bGwgZm9yIGJldHRlciBmb3JtYXR0aW5nIGluIGNvbnNvbGUuXHJcbiAgICAgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gcmVjcmVhdGVcclxuICAgICAqL1xyXG4gICAgY2xvbmVOdWxsUHJvdG88T2JqID0gYW55PihvYmo6T2JqKTpPYmpcclxufSIsImltcG9ydCB7IG5vdGljZXMsIG5vdGljZVdpdGhvdXRJRCwgbm90aWNlLCBldmVudHMgYXMgbm90aWNlRXZlbnRzIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcHJpdmF0ZS9Ob3RpY2VzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9VdGlsc1wiO1xyXG5pbXBvcnQgdXVpZCBmcm9tIFwiLi91dWlkXCI7XHJcbmltcG9ydCBjbG9uZU51bGxQcm90byBmcm9tIFwiLi9jbG9uZU51bGxQcm90b1wiO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiZXZlbnRzXCI7XHJcbmltcG9ydCB7IGRlZmF1bHROb3RpY2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9wcml2YXRlL05vdGljZVwiO1xyXG5pbXBvcnQgZXhjbHVkZVByb3BlcnRpZXMgZnJvbSBcIi4vZXhjbHVkZVByb3BlcnRpZXNcIjtcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4vbm9vcFwiO1xyXG5pbXBvcnQgV2VicGFja0xvYWRlciwgeyBXZWJwYWNrTG9hZGVyRXJyb3IgfSBmcm9tIFwiLi9XZWJwYWNrTG9hZGVyXCI7XHJcblxyXG5sZXQgc291bmRNb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc2NvcmRUb29scyB7XHJcbiAgICBzaG93Tm90aWNlKGRhdGE6Tm90aWNlRGF0YSk6Tm90aWNle1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBkYXRhLnRleHQgIT09IFwic3RyaW5nXCIpdGhyb3cgbmV3IEVycm9yKGBUaGlzIG5vdGljZSBpcyBub3QgdmFsaWQuIEdpdmVuOiAke1V0aWxzLmZvcm1hdEpTT2JqZWN0KGRhdGEpfWApXHJcbiAgICAgICAgbGV0IG5ld0RhdGEgPSBjbG9uZU51bGxQcm90byhPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Tm90aWNlLCBkYXRhKSkgYXMgbm90aWNlXHJcbiAgICAgICAgbmV3RGF0YS5pZCA9IHV1aWQoKVxyXG4gICAgICAgIG5vdGljZXMucHVzaChuZXdEYXRhKVxyXG4gICAgICAgIG5vdGljZUV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICAgICAgY29uc3Qgbm90aWNlID0gbmV3IE5vdGljZShuZXdEYXRhKVxyXG4gICAgICAgIHJldHVybiBub3RpY2VcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90aWNlcygpOk5vdGljZVtde1xyXG4gICAgICAgIHJldHVybiBub3RpY2VzLm1hcChkYXRhID0+IG5ldyBOb3RpY2UoZGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBRdWlja2x5IHNlbmQgbm90aWZpY2F0aW9uIChFdmVuIHdoZW4gbm8gZm9jdXNlZC4pXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgbm90aWZpY2F0aW9uLiBCZSBzdXJlIHRvIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgZXhjZXB0IGZ1bmN0aW9ucyBjYXVzZSB0aGV5J3JlIG9wdGlvbmFsLlxyXG4gICAgICogTm90aWZpY2F0aW9ucyBoYXZlIGEgdGltZW91dCBvZiAzLTUgc2Vjb25kcy5cclxuICAgICAqIFRoZXkgbG9vayBsaWtlIHRoaXM6IGh0dHBzOi8vaS5pbWd1ci5jb20vanp1eEtLdS5wbmdcclxuICAgICAqL1xyXG4gICAgc2hvd05vdGlmaWNhdGlvbihkYXRhOk5vdGlmaWNhdGlvbkRhdGEpOk5vdGlmaWNhdGlvbntcclxuICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBuZXcgd2luZG93Lk5vdGlmaWNhdGlvbihkYXRhLnRpdGxlLCBleGNsdWRlUHJvcGVydGllcyhkYXRhLCBbXHJcbiAgICAgICAgICAgIFwidGl0bGVcIixcclxuICAgICAgICAgICAgXCJvbkNsaWNrXCIsXHJcbiAgICAgICAgICAgIFwib25DbG9zZVwiLFxyXG4gICAgICAgICAgICBcIm9uU2hvd1wiXHJcbiAgICAgICAgXSkpXHJcbiAgICAgICAgbm90aWZpY2F0aW9uLm9uY2xpY2sgPSBkYXRhLm9uQ2xpY2sgfHwgTk9PUFxyXG4gICAgICAgIG5vdGlmaWNhdGlvbi5vbnNob3cgPSBkYXRhLm9uU2hvdyB8fCBOT09QXHJcbiAgICAgICAgbm90aWZpY2F0aW9uLm9uY2xvc2UgPSBkYXRhLm9uQ2xvc2UgfHwgTk9PUFxyXG4gICAgICAgIHJldHVybiBub3RpZmljYXRpb25cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTb3VuZChzb3VuZDpTb3VuZCl7XHJcbiAgICAgICAgc291bmRNb2R1bGUgPSBzb3VuZE1vZHVsZSB8fCBXZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiY3JlYXRlU291bmRcIl0pXHJcbiAgICAgICAgaWYoIXNvdW5kTW9kdWxlKXRocm93IG5ldyBXZWJwYWNrTG9hZGVyRXJyb3IoXCJDb3VsZG4ndCBmaW5kIHNvdW5kTW9kdWxlIGhlcmUuXCIpXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZCA9IHNvdW5kTW9kdWxlLmNyZWF0ZVNvdW5kKHNvdW5kKVxyXG4gICAgICAgIHJldHVybiBjcmVhdGVkXHJcbiAgICB9XHJcblxyXG4gICAgcGxheVNvdW5kKHNvdW5kOlNvdW5kKXtcclxuICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5jcmVhdGVTb3VuZChzb3VuZClcclxuICAgICAgICBjcmVhdGVkLnBsYXkoKVxyXG4gICAgICAgIHJldHVybiBjcmVhdGVkXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNvdW5kID0gXCJjYWxsX2NhbGxpbmdcInxcImNhbGxfcmluZ2luZ1wifFwiY2FsbF9yaW5naW5nX2JlYXRcInxcImRkci1kb3duXCJ8XCJkZHItbGVmdFwifFwiZGRyLXJpZ2h0XCJ8XCJkZHItdXBcInxcImRlYWZlblwifFwiZGlzY29kb1wifFwiZGlzY29ubmVjdFwifFwiaHVtYW5fbWFuXCJ8XCJtZW50aW9uMVwifFwibWVudGlvbjJcInxcIm1lbnRpb24zXCJ8XCJtZXNzYWdlMVwifFwibWVzc2FnZTJcInxcIm1lc3NhZ2UzXCJ8XCJtdXRlXCJ8XCJvdmVybGF5dW5sb2NrXCJ8XCJwdHRfc3RhcnRcInxcInB0dF9zdG9wXCJ8XCJyZWNvbm5lY3RcInxcInJvYm90X21hblwifFwic3RyZWFtX2VuZGVkXCJ8XCJzdHJlYW1fc3RhcnRlZFwifFwic3RyZWFtX3VzZXJfam9pbmVkXCJ8XCJzdHJlYW1fdXNlcl9sZWZ0XCJ8XCJ1bmRlYWZlblwifFwidW5tdXRlXCJ8XCJ1c2VyX2pvaW5cInxcInVzZXJfbGVhdmVcInxcInVzZXJfbW92ZWRcIlxyXG5cclxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uRGF0YSA9IHtcclxuICAgIHRpdGxlOiBzdHJpbmcsXHJcbiAgICBib2R5OiBzdHJpbmcsXHJcbiAgICBpY29uOiBzdHJpbmcsXHJcbiAgICBvblNob3c/OiAoKSA9PiB2b2lkLFxyXG4gICAgb25DbGljaz86ICgpID0+IHZvaWQsXHJcbiAgICBvbkNsb3NlPzogKCkgPT4gdm9pZFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBOb3RpY2VEYXRhID0gbm90aWNlV2l0aG91dElEXHJcblxyXG5jb25zdCBFdmVudEhhbmRsZXIgPSBmdW5jdGlvbigpe1xyXG4gICAgaWYodGhpcy5yZW1vdmVkICE9PSB0aGlzLnN0YXRlLnJlbW92ZWQpe1xyXG4gICAgICAgIGlmKHRoaXMucmVtb3ZlZCl7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcInJlbW92ZWRcIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnNob3dpbmcgIT09IHRoaXMuc3RhdGUuc2hvd2luZyl7XHJcbiAgICAgICAgaWYodGhpcy5zaG93aW5nKXtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwic2hvd2luZ1wiLCB0cnVlKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzaG93aW5nXCIsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuaW5kZXggIT09IHRoaXMuc3RhdGUuaW5kZXgpe1xyXG4gICAgICAgIHRoaXMuZW1pdChcImluZGV4XCIsIHRoaXMuaW5kZXgpXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBBIG5vdGljZSBpbnRlcmZhY2UgZm9yIG1vZGlmeWluZyBpdCBhbmQgc3Vic2NyaWJpbmcgdG8gZXZlbnRzLiAqL1xyXG5leHBvcnQgY2xhc3MgTm90aWNlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGRhdGEpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHJlbW92ZWQ6IHRoaXMucmVtb3ZlZCxcclxuICAgICAgICAgICAgc2hvd2luZzogdGhpcy5zaG93aW5nLFxyXG4gICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGV2ZW50RnVuYyA9IEV2ZW50SGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICAgICAgbm90aWNlRXZlbnRzLm9uKFwibm90aWNlVXBkYXRlXCIsIGV2ZW50RnVuYylcclxuICAgICAgICB0aGlzLm9uKFwicmVtb3ZlZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGljZUV2ZW50cy5vZmYoXCJub3RpY2VVcGRhdGVcIiwgZXZlbnRGdW5jKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVtIHRoZSBub3RpY2UgaXMgcmVtb3ZlZC5cclxuICAgICAqL1xyXG4gICAgb24oZXZlbnQ6IFwicmVtb3ZlZFwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6dGhpc1xyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBub3RpY2UgaXMgdmlzaWJsZSBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIG9uKGV2ZW50OiBcInNob3dpbmdcIiwgbGlzdGVuZXI6IChpc1Nob3dpbmc6Ym9vbGVhbikgPT4gdm9pZCk6dGhpc1xyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBub3RpY2UgcXVldWUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgb24oZXZlbnQ6IFwiaW5kZXhcIiwgbGlzdGVuZXI6IChpbmRleDpudW1iZXIpID0+IHZvaWQpOnRoaXNcclxuICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczphbnlbXSkgPT4gdm9pZCl7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLm9uKGV2ZW50LCBsaXN0ZW5lcilcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW0gdGhlIG5vdGljZSBpcyByZW1vdmVkLlxyXG4gICAgICovXHJcbiAgICBvbmNlKGV2ZW50OiBcInJlbW92ZWRcIiwgbGlzdGVuZXI6ICgpID0+IHZvaWQpOnRoaXNcclxuICAgIC8qKlxyXG4gICAgICogV2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgbm90aWNlIGlzIHZpc2libGUgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBvbmNlKGV2ZW50OiBcInNob3dpbmdcIiwgbGlzdGVuZXI6IChpc1Nob3dpbmc6Ym9vbGVhbikgPT4gdm9pZCk6dGhpc1xyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBub3RpY2UgcXVldWUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgb25jZShldmVudDogXCJpbmRleFwiLCBsaXN0ZW5lcjogKGluZGV4Om51bWJlcikgPT4gdm9pZCk6dGhpc1xyXG4gICAgb25jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6YW55W10pID0+IHZvaWQpe1xyXG4gICAgICAgIHJldHVybiBzdXBlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcilcclxuICAgIH1cclxuXHJcbiAgICBvZmYoZXZlbnQ6IFwicmVtb3ZlZFwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6dGhpc1xyXG4gICAgb2ZmKGV2ZW50OiBcInNob3dpbmdcIiwgbGlzdGVuZXI6IChpc1Nob3dpbmc6Ym9vbGVhbikgPT4gdm9pZCk6dGhpc1xyXG4gICAgb2ZmKGV2ZW50OiBcImluZGV4XCIsIGxpc3RlbmVyOiAoaW5kZXg6bnVtYmVyKSA9PiB2b2lkKTp0aGlzXHJcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOmFueVtdKSA9PiB2b2lkKXtcclxuICAgICAgICByZXR1cm4gc3VwZXIub2ZmKGV2ZW50LCBsaXN0ZW5lcilcclxuICAgIH1cclxuXHJcbiAgICBzdGF0ZTp7XHJcbiAgICAgICAgcmVtb3ZlZDpib29sZWFuLFxyXG4gICAgICAgIHNob3dpbmc6Ym9vbGVhbixcclxuICAgICAgICBpbmRleDpudW1iZXJcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVtb3ZlZCgpOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuICFub3RpY2VzLmZpbmQoZSA9PiBlLmlkID09PSB0aGlzLmlkKVxyXG4gICAgfVxyXG4gICAgZ2V0IHNob3dpbmcoKTpib29sZWFue1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSAwXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGluZGV4KCk6bnVtYmVye1xyXG4gICAgICAgIHJldHVybiBub3RpY2VzLmZpbmRJbmRleChlID0+IGUuaWQgPT09IHRoaXMuaWQpXHJcbiAgICB9XHJcbiAgICBnZXQgaWQoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmlkXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRleHQoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnRleHRcclxuICAgIH1cclxuICAgIHNldCB0ZXh0KHRleHQpe1xyXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0ID0gdGV4dFxyXG4gICAgICAgIG5vdGljZUV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHR5cGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnR5cGVcclxuICAgIH1cclxuICAgIHNldCB0eXBlKHR5cGUpe1xyXG4gICAgICAgIHRoaXMuZGF0YS50eXBlID0gdHlwZVxyXG4gICAgICAgIG5vdGljZUV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJ1dHRvblRleHQoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmJ1dHRvblRleHRcclxuICAgIH1cclxuICAgIHNldCBidXR0b25UZXh0KGJ1dHRvblRleHQ6c3RyaW5nKXtcclxuICAgICAgICB0aGlzLmRhdGEuYnV0dG9uVGV4dCA9IGJ1dHRvblRleHRcclxuICAgICAgICBub3RpY2VFdmVudHMuZW1pdChcIm5vdGljZVVwZGF0ZVwiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBvbkNsaWNrKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vbkNsaWNrXHJcbiAgICB9XHJcbiAgICBzZXQgb25DbGljayhvbkNsaWNrKXtcclxuICAgICAgICB0aGlzLmRhdGEub25DbGljayA9IG9uQ2xpY2tcclxuICAgICAgICBub3RpY2VFdmVudHMuZW1pdChcIm5vdGljZVVwZGF0ZVwiKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZSgpe1xyXG4gICAgICAgIGlmKHRoaXMucmVtb3ZlZClyZXR1cm5cclxuICAgICAgICBub3RpY2VzLnNwbGljZSh0aGlzLmluZGV4LCAxKVxyXG4gICAgICAgIG5vdGljZUV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICB9XHJcbiAgICBkYXRhOm5vdGljZVxyXG59IiwiaW1wb3J0IGNvbXBvbmVudHMgZnJvbSBcIi4uL2NvbXBvbmVudHMvY29tcG9uZW50c1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9VdGlsc1wiXHJcbmltcG9ydCB7IENvbXBvbmVudFByb3BzIH0gZnJvbSBcInJlYWN0XCJcclxuaW1wb3J0IHV1aWQgZnJvbSBcIi4vdXVpZFwiXHJcbmltcG9ydCBUZXh0SW5wdXQgZnJvbSBcIi4uL2NvbXBvbmVudHMvaW5wdXRzL1RleHRJbnB1dFwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luVXRpbGl0aWVzIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG5cclxuICAgIHJlbmRlclNldHRpbmdzKHNldHRpbmdzOlNldHRpbmdJdGVtW10pe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMucmVuZGVyU2V0dGluZ3NUb1JlYWN0KHNldHRpbmdzKVxyXG4gICAgICAgIGxldCBlbGVtID0gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7a2V5OiB1dWlkKCl9LCBpdGVtcylcclxuICAgICAgICByZXR1cm4gVXRpbHMuUmVhY3RUb0hUTUxFbGVtZW50KGVsZW0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2V0dGluZ3NUb1JlYWN0KHNldHRpbmdzOlNldHRpbmdJdGVtW10pe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdXHJcbiAgICAgICAgc2V0dGluZ3MuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBpdGVtICE9PSBcIm9iamVjdFwiKXJldHVybiBpdGVtcy5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICAgIGlmKGl0ZW0ucHJvcHMgJiYgXCJjaGlsZHJlblwiIGluIGl0ZW0ucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoaXRlbS5wcm9wcy5jaGlsZHJlbikpaXRlbS5wcm9wcy5jaGlsZHJlbiA9IFtpdGVtLnByb3BzLmNoaWxkcmVuXVxyXG4gICAgICAgICAgICAgICAgaXRlbS5wcm9wcy5jaGlsZHJlbiA9IHRoaXMucmVuZGVyU2V0dGluZ3NUb1JlYWN0KGl0ZW0ucHJvcHMuY2hpbGRyZW4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIWl0ZW0ucHJvcHMpaXRlbS5wcm9wcyA9IHt9XHJcbiAgICAgICAgICAgIGl0ZW0ucHJvcHMua2V5ID0gdXVpZCgpXHJcbiAgICAgICAgICAgIGxldCBjb21wb25lbnQgPSBVdGlscy5nZXROZXN0ZWRQcm9wcyhjb21wb25lbnRzLCBpdGVtLmNvbXBvbmVudClcclxuICAgICAgICAgICAgaWYoIWNvbXBvbmVudCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2FybmluZyA9IG5ldyBUZXh0SW5wdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBgV2FybmluZzogTm8gY29tcG9uZW50IHdhcyBmb3VuZCBmb3I6IFwiJHtpdGVtLmNvbXBvbmVudH1cIi4gUGxlYXNlIGNvcnJlY3QgeW91ciBjb2RlLmAsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGBXYXJuaW5nOiBObyBjb21wb25lbnQgd2FzIGZvdW5kIGZvcjogXCIke2l0ZW0uY29tcG9uZW50fVwiLiBQbGVhc2UgY29ycmVjdCB5b3VyIGNvZGUuYFxyXG4gICAgICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2god2FybmluZylcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIE9iamVjdC5jcmVhdGUoaXRlbS5wcm9wcykpKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcbn1cclxuXHJcbnR5cGUgU2V0dGluZ0l0ZW0gPSB7XHJcbiAgICBjb21wb25lbnQ6IHN0cmluZyxcclxuICAgIHByb3BzOiBDb21wb25lbnRQcm9wczxhbnk+XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmZyZWV6ZShvKSB7XHJcbiAgICB2YXIgb28gPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAobyBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgb28gPSBbXTtcclxuICAgICAgICB2YXIgY2xvbmUgPSBmdW5jdGlvbih2KSB7XHJcbiAgICAgICAgICAgIG9vLnB1c2godilcclxuICAgICAgICB9O1xyXG4gICAgICAgIG8uZm9yRWFjaChjbG9uZSk7XHJcbiAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpIHtcclxuICAgICAgICBvbyA9IG5ldyBTdHJpbmcobykudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG8gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICBvbyA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIG8pIHtcclxuICAgICAgICAgICAgb29bcHJvcGVydHldID0gb1twcm9wZXJ0eV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9vO1xyXG59XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICAgIGludGVyZmFjZSBPYmplY3RDb25zdHJ1Y3RvciB7XHJcbiAgICAgICAgdW5mcmVlemU6IDxUIGV4dGVuZHMgYW55PihvYmo6IFJlYWRvbmx5PFQ+KSA9PiBUXHJcbiAgICB9XHJcbn1cclxuT2JqZWN0LnVuZnJlZXplID0gdW5mcmVlemUiLCJpbXBvcnQgeyBSZWFjdEVsZW1lbnQgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IFJlYWN0RE9NID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKVxyXG5pbXBvcnQgUGx1Z2luVXRpbGl0aWVzIGZyb20gXCIuL1BsdWdpblV0aWxpdGllc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFV0aWxzIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG5cclxuICAgIFJlYWN0VG9IVE1MRWxlbWVudChSZWFjdEVsZW1lbnQ6IFJlYWN0RWxlbWVudCl7ICAgIFxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKFJlYWN0RWxlbWVudCwgZWxlbWVudClcclxuICAgICAgICByZXR1cm4gZWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBQbHVnaW5VdGlscygpe3JldHVybiBQbHVnaW5VdGlsaXRpZXN9XHJcblxyXG4gICAgZ2V0TmVzdGVkUHJvcHMob2JqOmFueSwgcGF0aDogc3RyaW5nKXtcclxuICAgICAgICBsZXQgc2VnbWVudHMgPSBwYXRoLnNwbGl0KFwiLlwiKVxyXG4gICAgICAgIGZvcihsZXQgc2VnIG9mIHNlZ21lbnRzKXtcclxuICAgICAgICAgICAgb2JqID0gb2JqICYmIChzZWcgaW4gb2JqKSA/IG9ialtzZWddIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmpcclxuICAgIH1cclxuXHJcbiAgICBEZWNpbWFsQ29sb3JUb0hleChjb2xvcjpudW1iZXIpOnN0cmluZ3tcclxuICAgICAgICByZXR1cm4gXCIjXCIrY29sb3IudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcclxuICAgIH1cclxuXHJcbiAgICBIZXhDb2xvclRvRGVjaW1hbChjb2xvcjpzdHJpbmcpOm51bWJlcntcclxuICAgICAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UoL1sjO10vZywgXCJcIilcclxuICAgICAgICBsZXQgcmVzID0gcGFyc2VJbnQoY29sb3IsIDE2KVxyXG4gICAgICAgIGlmKGlzTmFOKHJlcykpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbG9yOiAke2NvbG9yfWApXHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZURhKGNsYXNzTmFtZTpzdHJpbmcpOnN0cmluZ3tcclxuICAgICAgICBpZighY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhZS5zdGFydHNXaXRoKFwiZGEtXCIpKS5qb2luKFwiIFwiKVxyXG4gICAgfVxyXG5cclxuICAgIEZpbmRSZWFjdChkb206RWxlbWVudCwgdHJhdmVyc2VVcDpudW1iZXIgPSAwKTpSZWFjdC5Db21wb25lbnR8UmVhY3QuUHVyZUNvbXBvbmVudHtcclxuICAgICAgICAvLyB0YWtlbiBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI5MzIxNzQyL3JlYWN0LWdldHRpbmctYS1jb21wb25lbnQtZnJvbS1hLWRvbS1lbGVtZW50LWZvci1kZWJ1Z2dpbmcjMzkxNjUxMzdcclxuICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhkb20pLmZpbmQoa2V5PT5rZXkuc3RhcnRzV2l0aChcIl9fcmVhY3RJbnRlcm5hbEluc3RhbmNlJFwiKSk7XHJcbiAgICAgICAgY29uc3QgZG9tRmliZXIgPSBkb21ba2V5XTtcclxuICAgICAgICBpZiAoZG9tRmliZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBcclxuICAgICAgICAvLyByZWFjdCA8MTZcclxuICAgICAgICBpZiAoZG9tRmliZXIuX2N1cnJlbnRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGxldCBjb21wRmliZXIgPSBkb21GaWJlci5fY3VycmVudEVsZW1lbnQuX293bmVyO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYXZlcnNlVXA7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29tcEZpYmVyID0gY29tcEZpYmVyLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbXBGaWJlci5faW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgLy8gcmVhY3QgMTYrXHJcbiAgICAgICAgY29uc3QgR2V0Q29tcEZpYmVyID0gZmliZXI9PntcclxuICAgICAgICAgICAgLy9yZXR1cm4gZmliZXIuX2RlYnVnT3duZXI7IC8vIHRoaXMgYWxzbyB3b3JrcywgYnV0IGlzIF9fREVWX18gb25seVxyXG4gICAgICAgICAgICBsZXQgcGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XHJcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgcGFyZW50RmliZXIudHlwZSA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50RmliZXI7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgY29tcEZpYmVyID0gR2V0Q29tcEZpYmVyKGRvbUZpYmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYXZlcnNlVXA7IGkrKykge1xyXG4gICAgICAgICAgICBjb21wRmliZXIgPSBHZXRDb21wRmliZXIoY29tcEZpYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBGaWJlci5zdGF0ZU5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQ2xhc3MoY2xhc3NOYW1lczpzdHJpbmcsIGNsYXNzTmFtZTpzdHJpbmcpOmJvb2xlYW57XHJcbiAgICAgICAgaWYoIWNsYXNzTmFtZXMgfHwgIWNsYXNzTmFtZSlyZXR1cm4gZmFsc2VcclxuICAgICAgICBjb25zdCBjbGFzc25hbWVzID0gY2xhc3NOYW1lcy5zcGxpdChcIiBcIilcclxuICAgICAgICBmb3IobGV0IGNsYXNzbmFtZSBvZiB0aGlzLnJlbW92ZURhKGNsYXNzTmFtZSkuc3BsaXQoXCIgXCIpKXtcclxuICAgICAgICAgICAgaWYoIWNsYXNzbmFtZXMuaW5jbHVkZXMoY2xhc3NuYW1lKSlyZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXRKU09iamVjdChvYmo6YW55KTpzdHJpbmd7XHJcbiAgICAgICAgaWYoW1wic3RyaW5nXCIsIFwibnVtYmVyXCIsIFwiYm9vbGVhblwiLCBcImJpZ2ludFwiLCBcInVuZGVmaW5lZFwiXS5pbmNsdWRlcyh0eXBlb2Ygb2JqKSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKVxyXG4gICAgICAgIGlmKG9iaiA9PT0gbnVsbClyZXR1cm4gXCJudWxsXCJcclxuICAgICAgICBpZih0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpcmV0dXJuIFN0cmluZyhvYmopXHJcbiAgICAgICAgaWYodHlwZW9mIG9iaiA9PT0gXCJzeW1ib2xcIilyZXR1cm4gU3RyaW5nKG9iailcclxuXHJcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShvYmopKXtcclxuICAgICAgICAgICAgaWYoIW9iai5sZW5ndGgpcmV0dXJuIFwiW11cIlxyXG4gICAgICAgICAgICByZXR1cm4gYFtcXG4gICAgJHtvYmoubWFwKGUgPT4gdGhpcy5mb3JtYXRKU09iamVjdChlKSkuam9pbihcIixcXG4gICAgXCIpfVxcbl1gXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgICAgICAgIGlmKGtleXMubGVuZ3RoID09PSAwKXJldHVybiBcInt9XCJcclxuICAgICAgICAgICAgcmV0dXJuIGB7XFxuICAgICR7a2V5cy5tYXAoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvcmlnaW5hbCA9IGtleVxyXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIilrZXkgPSBcIltcIitTdHJpbmcoa2V5KStcIl1cIlxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiKWtleSA9IFN0cmluZyhrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpc05hTihwYXJzZUludChrZXlbMF0pKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZvcm1hdEpTT2JqZWN0KGtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL1teXFx3XFxkXyRdL2cudGVzdChrZXkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IHRoaXMuZm9ybWF0SlNPYmplY3Qoa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7dGhpcy5mb3JtYXRKU09iamVjdChvYmpbb3JpZ2luYWxdKX1gXHJcbiAgICAgICAgICAgIH0pfVxcbn1gXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiY29uc3QgQkRNb2R1bGVzID0gd2luZG93LkJETW9kdWxlc1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFdlYnBhY2tMb2FkZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcblxyXG4gICAgZ2V0KGlkOiBudW1iZXIpOmFueXtcclxuICAgICAgICByZXR1cm4gQkRNb2R1bGVzLmdldChpZClcclxuICAgIH1cclxuICAgIGZpbmQoZmlsdGVyOiAobW9kOmFueSkgPT4gYm9vbGVhbik6YW55e1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBCRE1vZHVsZXMuZ2V0KGZpbHRlcilbMF1cclxuICAgICAgICBpZighcmVzdWx0KXtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGZpbHRlciwgXCJjb3VsZG4ndCBmaW5kIHRoZSBtb2R1bGUuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgIH1cclxuICAgIGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHM6KHN0cmluZ3xudW1iZXIpW10pOmFueXtcclxuICAgICAgICByZXR1cm4gQkRNb2R1bGVzLmdldCgobW9kKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKG1vZC5fX2VzTW9kdWxlICYmIChcImRlZmF1bHRcIiBpbiBtb2QpKXtcclxuICAgICAgICAgICAgICAgIGxldCBkb2VzTWF0Y2ggPSB0cnVlXHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLmRlZmF1bHQsIHByb3ApKWRvZXNNYXRjaCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihkb2VzTWF0Y2gpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIHByb3ApKXJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfSlbMF1cclxuICAgIH1cclxuICAgIGZpbHRlcihmaWx0ZXI6IChtb2Q6YW55KSA9PiBib29sZWFuKTphbnlbXXtcclxuICAgICAgICByZXR1cm4gQkRNb2R1bGVzLmdldChmaWx0ZXIpXHJcbiAgICB9XHJcbiAgICBmaWx0ZXJCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHM6KHN0cmluZ3xudW1iZXIpW10pOmFueXtcclxuICAgICAgICByZXR1cm4gQkRNb2R1bGVzLmdldCgobW9kKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKG1vZC5fX2VzTW9kdWxlICYmIChcImRlZmF1bHRcIiBpbiBtb2QpKXtcclxuICAgICAgICAgICAgICAgIGxldCBkb2VzTWF0Y2ggPSB0cnVlXHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLmRlZmF1bHQsIHByb3ApKWRvZXNNYXRjaCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihkb2VzTWF0Y2gpcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIHByb3ApKXJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdlYnBhY2tMb2FkZXJFcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6c3RyaW5nID0gXCJcIil7XHJcbiAgICAgICAgbWVzc2FnZSArPSBcIlxcblxcdFRoaXMgZXJyb3IgaXMgcmVsYXRlZCB0byBMaWdodGNvcmQgbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFdlYnBhY2tNb2R1bGUuIFxcblxcdFBsZWFzZSBzaG93IHRoaXMgZXJyb3IgYW5kIGEgZmV3IGxpbmVzIG9mIGxvZ3MgYWJvdmUgdGhpcyBlcnJvci4gXFxuXFx0T3BlbiBhbiBpc3N1ZSBvbiBodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZCBvciBpbiB0aGVpciBkaXNjb3JkIHNlcnZlci5cIlxyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJXZWJwYWNrTG9hZGVyRXJyb3JcIlxyXG4gICAgfVxyXG59IiwiLyoqXHJcbiAqIFJlY3JlYXRlIHRoZSBnaXZlbiBvYmplY3Qgd2l0aG91dCB0aGUgX19wcm90b19fLiBVc2VmdWwgZm9yIGJldHRlciBmb3JtYXR0aW5nIHdoZW4gb3V0cHV0IGluIGNvbnNvbGUuXHJcbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZWNyZWF0ZVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmVOdWxsUHJvdG88T2JqPWFueT4ob2JqOk9iaik6T2Jqe1xyXG4gICAgbGV0IG8gPSBPYmplY3QuY3JlYXRlKG51bGwpXHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgb1trXSA9IG9ialtrXVxyXG4gICAgfSlcclxuICAgIHJldHVybiBvXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleGNsdWRlUHJvcGVydGllczxPYmogPSBhbnk+KG9iajpPYmosIHByb3BzOihrZXlvZiBPYmopW10pOlBhcnRpYWw8T2JqPntcclxuICAgIGxldCBuZXdPYmogPSB7fVxyXG5cclxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoaykgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmluY2x1ZGVzKGsgYXMga2V5b2YgT2JqKSlyZXR1cm5cclxuICAgICAgICBuZXdPYmpba10gPSBvYmpba11cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIG5ld09ialxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTk9PUCgpe30iLCJpbXBvcnQgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIlxyXG5pbXBvcnQgTm90aWNlcywgeyBub3RpY2VzIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcHJpdmF0ZS9Ob3RpY2VzXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaCgpe1xyXG4gICAgLyoqIFNUQVJUIE5PVElDRSAqL1xyXG4gICAgZ2V0TW9kdWxlKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJDb25uZWN0ZWRBcHBWaWV3XCIpXHJcbiAgICAudGhlbihhc3luYyAobW9kKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXBwQ2xhc3NlcyA9IGF3YWl0IGdldE1vZHVsZShlID0+IGUuaGFzTm90aWNlKTtcclxuICAgICAgICBjb25zdCBidWlsZFJlbmRlciA9IG9yaWdpbmFsID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbmRlcigpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld2NoaWxkcmVuID0gW11cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShjaGlsZHJlbikpY2hpbGRyZW4gPSBbY2hpbGRyZW5dXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG5ld2NoaWxkcmVuLnB1c2goY2hpbGRyZW5bMF0pXHJcbiAgICAgICAgICAgICAgICBuZXdjaGlsZHJlbi5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWNlcywge2NvbnRhaW5lcjogdGhpc30pKVxyXG4gICAgICAgICAgICAgICAgbmV3Y2hpbGRyZW4ucHVzaChjaGlsZHJlblsxXSlcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuID0gbmV3Y2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bMl0ucHJvcHMuY2hpbGRyZW5bMF0ucHJvcHMucmVuZGVyID0gYnVpbGRSZW5kZXJDaGFubmVsU2lkZWJhcihyZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblsyXS5wcm9wcy5jaGlsZHJlblswXS5wcm9wcy5yZW5kZXIpXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ1aWxkUmVuZGVyQ2hhbm5lbFNpZGViYXIgPSBvcmlnaW5hbCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZW5kZXJDaGFubmVsU2lkZWJhcigpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzTm90aWNlID0gbm90aWNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICBpZighaGFzTm90aWNlKXJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYoIVV0aWxzLmhhc0NsYXNzKHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSwgYXBwQ2xhc3Nlcy5oYXNOb3RpY2UpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgXCIrVXRpbHMucmVtb3ZlRGEoYXBwQ2xhc3Nlcy5oYXNOb3RpY2UpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbW9kLmRlZmF1bHQucHJvdG90eXBlLnJlbmRlciA9IGJ1aWxkUmVuZGVyKG1vZC5kZWZhdWx0LnByb3RvdHlwZS5yZW5kZXIpO1xyXG4gICAgICAgIChhc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShhcHBDbGFzc2VzLmJhc2UpKVxyXG4gICAgICAgICAgICBpZighYmFzZSl0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJhc2UgaGVyZWApXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSBVdGlscy5GaW5kUmVhY3QoYmFzZSkgYXMgYW55XHJcbiAgICAgICAgICAgIGVsZW0ucmVuZGVyID0gYnVpbGRSZW5kZXIoZWxlbS5yZW5kZXIpXHJcbiAgICAgICAgICAgIGVsZW0uZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH0pKClcclxuICAgIH0pXHJcbiAgICAvKiogRU5EIE5PVElDRSAqL1xyXG5cclxuICAgIC8qKiBTVEFSVCBJTi1BUFAgTk9USUZJQ0FUSU9OUyAqL1xyXG4gICAgLy9nZXRNb2R1bGUoZSA9PiB0cnVlKVxyXG4gICAgLyoqIEVORCBJTi1BUFAgTk9USUZJQ0FUSU9OUyAqL1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNb2R1bGUoZmlsdGVyOiAobW9kOmFueSkgPT4gYm9vbGVhbik6UHJvbWlzZTxhbnk+e1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZmlsdGVyKVxyXG4gICAgICAgIC50aGVuKHJlc29sdmUpXHJcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbTElHSFRDT1JEXVwiLCBlcnIsIGZpbHRlcilcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufSIsImltcG9ydCAqIGFzIHV1aWR2MSBmcm9tIFwidXVpZC92MVwiXHJcbmltcG9ydCAqIGFzIHV1aWR2NCBmcm9tIFwidXVpZC92NFwiXHJcblxyXG50eXBlIHV1aWRGdW5jID0gKCkgPT4gc3RyaW5nXHJcbmxldCB1dWlkOnV1aWRGdW5jICYge3YxOiB1dWlkRnVuYywgdjQ6IHV1aWRGdW5jfSA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24oKXtcclxuICAgIHJldHVybiB1dWlkdjQoKVxyXG59LCB7djE6ICgpID0+IHV1aWR2MSgpLCB2NDogKCkgPT4gdXVpZHY0KCl9KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXVpZCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dWlkL3YxXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV1aWQvdjRcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2FsaWFzL3JlYWN0LWRvbS50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvYWxpYXMvc2VsZWN0b3JzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2NvbXBvbmVudHMudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhbC9BbGVydEJveC50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhbC9Db2RlQmxvY2sudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvU2V0dGluZ1N1YlRpdGxlLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9nZW5lcmFsL1NldHRpbmdzVGl0bGUudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2dlbmVyYWwvVGFicy50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhbC9UaXRsZS50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhbC9Ub29sdGlwLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9CdXR0b24udHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL2lucHV0cy9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvUmFkaW9Hcm91cC50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL1N3aXRjaC50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvaW5wdXRzL1RleHRBcmVhLnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9pbnB1dHMvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvY29tcG9uZW50cy9wcml2YXRlL0Vycm9yQ2F0Y2hlci50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2NvbXBvbmVudHMvcHJpdmF0ZS9Ob3RpY2UudHN4Iiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9jb21wb25lbnRzL3ByaXZhdGUvTm90aWNlcy50c3giLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL0JETW9kdWxlcy50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9EaXNjb3JkVG9vbHMudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvUGx1Z2luVXRpbGl0aWVzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL1VuZnJlZXplLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL1V0aWxzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL1dlYnBhY2tMb2FkZXIudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvY2xvbmVOdWxsUHJvdG8udHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpLy4vc3JjL21vZHVsZXMvZW52aXJvbm5lbWVudC50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9leGNsdWRlUHJvcGVydGllcy50cyIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvLi9zcmMvbW9kdWxlcy9ub29wLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL3BhdGNoZXJzLnRzIiwid2VicGFjazovL0xpZ2h0Y29yZEFwaS8uL3NyYy9tb2R1bGVzL3V1aWQudHMiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpL2V4dGVybmFsIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpL2V4dGVybmFsIFwicG93ZXJjb3JkL3dlYnBhY2tcIiIsIndlYnBhY2s6Ly9MaWdodGNvcmRBcGkvZXh0ZXJuYWwgXCJ1dWlkL3YxXCIiLCJ3ZWJwYWNrOi8vTGlnaHRjb3JkQXBpL2V4dGVybmFsIFwidXVpZC92NFwiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7OztBQ2xGQSx1RkFBOEM7QUFFOUMs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QUEsb0MiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LnRzXCIpO1xuIiwiaW1wb3J0IHsgUmVhY3RET01TZWxlY3RvciB9IGZyb20gXCIuL3NlbGVjdG9yc1wiXHJcblxyXG4vLyBiYWl0IHR5cGVzY3JpcHQgaW50byB0aGlua2luZyB0aGlzIGlzIG5vdCByZWFjdERPTSBzbyBubyBjaXJjdWxhciBkZXBlbmRlbmN5LlxyXG53aW5kb3cuUmVhY3RET00gPSAod2luZG93W1wiUmVhY1wiK1widERPTVwiXSB8fCAvLyBJZiBpbiBMaWdodGNvcmRcclxuICAgICgoKT0+eyAvLyBJZiBpbiBTdGFuZGFyZCBCZXR0ZXJEaXNjb3JkXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICByZXR1cm4gd2luZG93LkJkQXBpLmZpbmRNb2R1bGUoUmVhY3RET01TZWxlY3RvciBhcyBhbnkpXHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH0pKCkgfHxcclxuICAgICgoKT0+eyAvLyBJZiBpbiBQb3dlcmNvcmRcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHdlYnBhY2sgPSByZXF1aXJlKFwicG93ZXJjb3JkL3dlYnBhY2tcIilcclxuICAgICAgICAgICAgcmV0dXJuIHdlYnBhY2suUmVhY3RET01cclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfSkoKSB8fCBcclxuICAgICgoKT0+eyAvLyBJZiBpbiBFbmhhbmNlZERpc2NvcmRcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuRURBcGkuZmluZE1vZHVsZShSZWFjdERPTVNlbGVjdG9yIGFzIGFueSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfSkoKSkgYXMgdHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKVxyXG5cclxuZXhwb3J0ID0gKHdpbmRvdy5SZWFjdERPTSBhcyBhbnkpIiwiZXhwb3J0IGNvbnN0IFJlYWN0U2VsZWN0b3IgPSBtb2QgPT4gIVtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0uZmluZChrID0+ICFtb2Rba10pXHJcbmV4cG9ydCBjb25zdCBSZWFjdERPTVNlbGVjdG9yID0gbW9kID0+IG1vZC5maW5kRE9NTm9kZSIsImltcG9ydCBEaXNjb3JkQnV0dG9uIGZyb20gXCIuL2lucHV0cy9CdXR0b25cIlxyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL2lucHV0cy9Td2l0Y2hcIlxyXG5pbXBvcnQgUmFkaW9Hcm91cCBmcm9tIFwiLi9pbnB1dHMvUmFkaW9Hcm91cFwiXHJcbmltcG9ydCBUZXh0QXJlYSBmcm9tIFwiLi9pbnB1dHMvVGV4dEFyZWFcIlxyXG5pbXBvcnQgVGV4dElucHV0IGZyb20gXCIuL2lucHV0cy9UZXh0SW5wdXRcIlxyXG5pbXBvcnQgRHJvcGRvd24gZnJvbSBcIi4vaW5wdXRzL0Ryb3Bkb3duXCJcclxuaW1wb3J0IFRpdGxlIGZyb20gXCIuL2dlbmVyYWwvVGl0bGVcIlxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9nZW5lcmFsL1NldHRpbmdzVGl0bGVcIlxyXG5pbXBvcnQgVGFicywgeyBUYWIgfSBmcm9tIFwiLi9nZW5lcmFsL1RhYnNcIlxyXG5pbXBvcnQgU2V0dGluZ1N1YlRpdGxlIGZyb20gXCIuL2dlbmVyYWwvU2V0dGluZ1N1YlRpdGxlXCJcclxuaW1wb3J0IENvZGVCbG9jayBmcm9tIFwiLi9nZW5lcmFsL0NvZGVCbG9ja1wiXHJcbmltcG9ydCBjbG9uZU51bGxQcm90byBmcm9tIFwiLi4vbW9kdWxlcy9jbG9uZU51bGxQcm90b1wiXHJcbmltcG9ydCBUb29sdGlwIGZyb20gXCIuL2dlbmVyYWwvVG9vbHRpcFwiXHJcbmltcG9ydCBDb2xvclBpY2tlciBmcm9tIFwiLi9pbnB1dHMvQ29sb3JQaWNrZXJcIlxyXG5pbXBvcnQgQWxlcnRCb3ggZnJvbSBcIi4vZ2VuZXJhbC9BbGVydEJveFwiXHJcbmltcG9ydCB7IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MgfSBmcm9tIFwiLi9wcml2YXRlL0Vycm9yQ2F0Y2hlclwiXHJcblxyXG5jb25zdCBSYWRpb0dyb3VwUHJveGllZCA9IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoUmFkaW9Hcm91cClcclxuZXhwb3J0IGRlZmF1bHQgY2xvbmVOdWxsUHJvdG8oe1xyXG4gICAgaW5wdXRzOiBjbG9uZU51bGxQcm90byh7XHJcbiAgICAgICAgQnV0dG9uOiBjcmVhdGVQcm94eUVycm9yQ2F0Y2hlckNsYXNzKERpc2NvcmRCdXR0b24pLFxyXG4gICAgICAgIFN3aXRjaDogY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyhTd2l0Y2gpLFxyXG4gICAgICAgIENob2ljZXM6IFJhZGlvR3JvdXBQcm94aWVkLFxyXG4gICAgICAgIFJhZGlvR3JvdXA6IFJhZGlvR3JvdXBQcm94aWVkLFxyXG4gICAgICAgIFRleHRBcmVhOiBjcmVhdGVQcm94eUVycm9yQ2F0Y2hlckNsYXNzKFRleHRBcmVhKSxcclxuICAgICAgICBUZXh0SW5wdXQ6IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoVGV4dElucHV0KSxcclxuICAgICAgICBEcm9wZG93bjogY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyhEcm9wZG93biksXHJcbiAgICAgICAgQ29sb3JQaWNrZXI6IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoQ29sb3JQaWNrZXIpXHJcbiAgICB9KSxcclxuICAgIGdlbmVyYWw6IGNsb25lTnVsbFByb3RvKHtcclxuICAgICAgICBUaXRsZTogY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyhUaXRsZSksXHJcbiAgICAgICAgU2V0dGluZ3NUaXRsZTogY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyhTZXR0aW5nc1RpdGxlKSxcclxuICAgICAgICBTZXR0aW5nU3ViVGl0bGU6IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoU2V0dGluZ1N1YlRpdGxlKSxcclxuICAgICAgICBUYWJzOiBjcmVhdGVQcm94eUVycm9yQ2F0Y2hlckNsYXNzKFRhYnMpLFxyXG4gICAgICAgIENvZGVCbG9jazogY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyhDb2RlQmxvY2spLFxyXG4gICAgICAgIFRvb2x0aXA6IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoVG9vbHRpcCksXHJcbiAgICAgICAgQWxlcnRCb3g6IGNyZWF0ZVByb3h5RXJyb3JDYXRjaGVyQ2xhc3MoQWxlcnRCb3gpXHJcbiAgICB9KVxyXG59KSIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxyXG5cclxudHlwZSBBbGVydEJveFByb3BzID0ge1xyXG4gICAgdHlwZTogXCJ3YXJuXCJ8XCJpbmZvXCJ8XCJkYW5nZXJcInxcImVycm9yXCJ8XCJzdWNjZXNzXCIsXHJcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlfHN0cmluZ1xyXG59XHJcblxyXG5sZXQgQWxlcnRCb3hNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFsZXJ0Qm94IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEFsZXJ0Qm94UHJvcHM+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6QWxlcnRCb3hQcm9wcyA9IHtcclxuICAgICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgICBjaGlsZHJlbjogbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsZXJ0Qm94TW9kdWxlcyB8fCAoQWxlcnRCb3hNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIk1hcmtkb3duXCIgJiYgZS5kZWZhdWx0LmRlZmF1bHRQcm9wcy5wYXJzZXIpLmRlZmF1bHRcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IFtcclxuICAgICAgICAgICAgTWFya2Rvd25cclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGxldCB3cmFwXHJcbiAgICAgICAgbGV0IGNoaWxkcmVuXHJcbiAgICAgICAgaWYodHlwZW9mIHRoaXMucHJvcHMuY2hpbGRyZW4gPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICB3cmFwID0gTWFya2Rvd24ucHJvdG90eXBlLnJlbmRlci5jYWxsKHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIH0sIE1hcmtkb3duLmRlZmF1bHRQcm9wcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSB3cmFwLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHdyYXAgPSBNYXJrZG93bi5wcm90b3R5cGUucmVuZGVyLmNhbGwoe1xyXG4gICAgICAgICAgICAgICAgcHJvcHM6IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJcIlxyXG4gICAgICAgICAgICAgICAgfSwgTWFya2Rvd24uZGVmYXVsdFByb3BzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgd3JhcC5wcm9wcy5jaGlsZHJlbiA9IDxkaXYgY2xhc3NOYW1lPXtcImxjLWFsZXJ0LWJveCBsYy1hbGVydC1ib3gtXCIrdGhpcy5wcm9wcy50eXBlfT5cclxuICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3NOYW1lPVwibGMtYmxvY2txdW90ZVwiPlxyXG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxyXG4gICAgICAgICAgICA8L2Jsb2NrcXVvdGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgcmV0dXJuIHdyYXBcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiKioqRGlzY29yZCdzKioqICoqTWFya2Rvd24qKiBfaXNfIFtzdXBwb3J0ZWRdKGh0dHBzOi8vZ29vZ2xlLmNvbSkgb3IgeW91IGNhbiBqdXN0IGluc2VydCB5b3VyIG93biByZWFjdCBjaGlsZHMuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSwgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwid2FyblwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGhlbHAgPSB7XHJcbiAgICAgICAgaW5mbzogXCJZb3UgY2FuIGluc2VydCBtYXJrZG93biAoYXMgc3RyaW5nKSBvciBub3JtYWwgcmVhY3QgY2hpbGRzXCIsXHJcbiAgICAgICAgd2FybjogXCJBbGwgc3RyaW5nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgbWFya2Rvd24uIElmIHlvdSB3YW50IHJhdyBzdHJpbmcsIHBhc3MgYW4gYXJyYXkgd2l0aCB0aGUgc3RyaW5nIGluc2lkZS5cIlxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5cclxudHlwZSBDb2RlQmxvY2tQcm9wcyA9IHtcclxuICAgIGxhbmd1YWdlPzogc3RyaW5nLFxyXG4gICAgY29udGVudDogc3RyaW5nXHJcbn1cclxuXHJcbmxldCBDb2RlQmxvY2tNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvZGVCbG9jayBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxDb2RlQmxvY2tQcm9wcz4ge1xyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpDb2RlQmxvY2tQcm9wcyA9IHtcclxuICAgICAgICBsYW5ndWFnZTogXCJwbGFpbnRleHRcIixcclxuICAgICAgICBjb250ZW50OiBcIlwiXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIENvZGVCbG9ja01vZHVsZXMgfHwgKENvZGVCbG9ja01vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUubWFya3VwKSxcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5tZXNzYWdlQ29udGVudCksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuaGlnaGxpZ2h0KSxcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5tYXJnaW5Cb3R0b204KVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWVzc2FnZU1vZHVsZTEsXHJcbiAgICAgICAgICAgIG1lc3NhZ2VNb2R1bGUyLFxyXG4gICAgICAgICAgICBzY3JvbGxiYXJNb2R1bGUxLFxyXG4gICAgICAgICAgICBoaWdodGxpZ2h0SlMsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTFcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLnByb3BzLmxhbmd1YWdlID09PSBcInBsYWludGV4dFwiID8gPGNvZGUgY2xhc3NOYW1lPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMuY29udGVudH1cclxuICAgICAgICA8L2NvZGU+IDogPGNvZGUgY2xhc3NOYW1lPXtgJHtzY3JvbGxiYXJNb2R1bGUxLnNjcm9sbGJhckdob3N0SGFpcmxpbmV9IGhsanNgfSBcclxuICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19IC8+XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17YCR7bWVzc2FnZU1vZHVsZTEubWFya3VwfSAke21lc3NhZ2VNb2R1bGUyLm1lc3NhZ2VDb250ZW50fWB9PlxyXG4gICAgICAgICAgICA8cHJlPlxyXG4gICAgICAgICAgICAgICAge2NvZGV9XHJcbiAgICAgICAgICAgIDwvcHJlPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlMS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiY29uc29sZS5sb2coXFxcIkV4ZW1wbGUgY29kZVxcXCIpXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IFwianNcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogXCJwbGFpbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC4uLkNvZGVCbG9jay5wcm90b3R5cGUubW9kdWxlc1szXS5saXN0TGFuZ3VhZ2VzKCkuZmlsdGVyKGUgPT4gZSAhPT0gXCJqc1wiKS5tYXAoZSA9PiAoe2xhbmd1YWdlOiBlfSkpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuXHJcbnR5cGUgU2V0dGluZ1N1YlRpdGxlUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcclxufVxyXG5cclxubGV0IFRpdGxlTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5nU3ViVGl0bGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8U2V0dGluZ1N1YlRpdGxlUHJvcHM+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6U2V0dGluZ1N1YlRpdGxlUHJvcHMgPSB7XHJcbiAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgIGNsYXNzTmFtZTogXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFRpdGxlTW9kdWxlcyB8fCAoVGl0bGVNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiB0eXBlb2YgZS5tYXJnaW5Ub3A2MCA9PT0gXCJzdHJpbmdcIiksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJoNVwiXSksXHJcbiAgICAgICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLldlYnBhY2tMb2FkZXIuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzaXplMTRcIl0pLFxyXG4gICAgICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5XZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiY29sb3JTdGFuZGFyZFwiXSlcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgdGl0bGVNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgJHtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkfSAke3NpemVNb2R1bGUuc2l6ZTE0fSAke3RpdGxlTW9kdWxlLmg1fSAke21hcmdpbk1vZHVsZS5tYXJnaW5Cb3R0b200fWBcclxuICAgICAgICBpZihwcm9wcy5jbGFzc05hbWUpY2xhc3NOYW1lID0rIFwiIFwiK3Byb3BzLmNsYXNzTmFtZVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwge2NsYXNzTmFtZX0sIHByb3BzLmNoaWxkcmVuKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgQWxsUHJldmlld3MoKXtcclxuICAgICAgICByZXR1cm4gQWxsUHJldmlld3MgfHwgKCgpID0+IHtcclxuICAgICAgICAgICAgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJFeGVtcGxlIHRpdGxlXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgVGl0bGUgZnJvbSBcIi4vVGl0bGVcIlxyXG5pbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxyXG5cclxudHlwZSBTZXR0aW5nc1RpdGxlUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcclxufVxyXG5cclxubGV0IFRpdGxlTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXR0aW5nc1RpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFNldHRpbmdzVGl0bGVQcm9wcz4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFNldHRpbmdzVGl0bGVQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVGl0bGVNb2R1bGVzIHx8IChUaXRsZU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IHR5cGVvZiBlLm1hcmdpblRvcDYwID09PSBcInN0cmluZ1wiKVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgJHttYXJnaW5Nb2R1bGUubWFyZ2luVG9wNjB9ICR7bWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfWBcclxuICAgICAgICBpZihwcm9wcy5jbGFzc05hbWUpY2xhc3NOYW1lID0rIFwiIFwiK3Byb3BzLmNsYXNzTmFtZVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlLCB7Y2xhc3NOYW1lfSwgcHJvcHMuY2hpbGRyZW4pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpTZXR0aW5nc1RpdGxlUHJvcHMgPSB7XHJcbiAgICAgICAgY2hpbGRyZW46IFtcIlwiXSxcclxuICAgICAgICBjbGFzc05hbWU6IFwiXCJcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiRXhlbXBsZSB0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgeyBSZWFjdE5vZGUsIENTU1Byb3BlcnRpZXMgfSBmcm9tIFwicmVhY3RcIlxyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ub29wXCJcclxuaW1wb3J0IFRpdGxlIGZyb20gXCIuL1RpdGxlXCJcclxuXHJcbnR5cGUgVGFic1Byb3BzID0ge1xyXG4gICAgY2hpbGRyZW4/OiBSZWFjdE5vZGUsXHJcbiAgICB0YWJzOiB7bGFiZWw6IHN0cmluZywgaWQ6IHN0cmluZ31bXSxcclxuICAgIGFjdGl2ZT86IHN0cmluZ1xyXG4gICAgb25DaGFuZ2U/OiAodGFiOiBzdHJpbmcpID0+IHZvaWQsXHJcbiAgICBzdHlsZT86IENTU1Byb3BlcnRpZXNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFicyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUYWJzUHJvcHMsIHtcclxuICAgIGFjdGl2ZTogc3RyaW5nXHJcbn0+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6VGFic1Byb3BzID0ge1xyXG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgIHRhYnM6IFt7bGFiZWw6IFwiTm8gdGFicyB3YXMgcGFzc2VkIHRvIDxUYWJzPi5cIiwgaWQ6IFwibm9uZVwifV0sXHJcbiAgICAgICAgYWN0aXZlOiBudWxsLFxyXG4gICAgICAgIG9uQ2hhbmdlOiBOT09QLFxyXG4gICAgICAgIHN0eWxlOiB7fVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpUYWJzUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGhpcy5wcm9wcy5hY3RpdmUgfHwgbnVsbFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0YWJzRWxlbWVudHM6VGFiW10gPSBbXVxyXG4gICAgXHJcbiAgICBnZXQgdGFicygpOlRhYnNbXCJwcm9wc1wiXVtcInRhYnNcIl17XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudGFicyB8fCBbXVxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRhYih0YWI6c3RyaW5nKXtcclxuICAgICAgICBpZih0YWIgPT09IHRoaXMuc3RhdGUuYWN0aXZlKXJldHVyblxyXG4gICAgICAgIGlmKHRoaXMucHJvcHMub25DaGFuZ2UpdGhpcy5wcm9wcy5vbkNoYW5nZSh0YWIpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogdGFiXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLnRhYnNFbGVtZW50cy5mb3JFYWNoKGUgPT4gZS5zZXRBY3RpdmUodGFiID09PSBlLnByb3BzLmlkKSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICByZXR1cm4gKDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiV3JhcHBlclwiIHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAge3RoaXMudGFicy5tYXAodGFiID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWIsIHtUYWJDb250YWluZXI6IHRoaXMsIHRpdGxlOiB0YWIubGFiZWwsIGlkOiB0YWIuaWQsIGtleTogYnRvYSh0YWIubGFiZWwrXCI6XCIrdGFiLmlkKX0pXHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGMtdGFiXCI+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfSAgIFxyXG5cclxuICAgIGlzQWN0aXZlKHRhYil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuYWN0aXZlID09PSB0YWJcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46ICg8ZGl2IHN0eWxlPXt7bWFyZ2luVG9wOiBcIjIwcHhcIiwgbWFyZ2luQm90dG9tOiBcIjIwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT1cImxjLXRhYi1ib3gtc2hhZG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGl0bGU+UHJldmlldyB0YWJzPC9UaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdLCBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJBY3RpdmUgdGFiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiVW5hY3RpdmUgdGFiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSwgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogXCIxXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSwgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAodGFiSWQpID0+IHt9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3NcclxuXHJcbmV4cG9ydCBjbGFzcyBUYWIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e1xyXG4gICAgVGFiQ29udGFpbmVyOiBUYWJzLCBcclxuICAgIHRpdGxlOiBzdHJpbmcsIFxyXG4gICAgaWQ6IHN0cmluZ1xyXG59LCB7XHJcbiAgICBhY3RpdmU6IGJvb2xlYW5cclxufT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IHByb3BzLlRhYkNvbnRhaW5lci5pc0FjdGl2ZShwcm9wcy5pZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvcHMuVGFiQ29udGFpbmVyLnRhYnNFbGVtZW50cy5wdXNoKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKGlzQWN0aXZlOmJvb2xlYW4pe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLlRhYkNvbnRhaW5lci5jaGFuZ2VUYWIodGhpcy5wcm9wcy5pZClcclxuICAgICAgICB9fT5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiXHJcblxyXG50eXBlIFRpdGxlUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSxcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xyXG59XHJcblxyXG5sZXQgVGl0bGVNb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFRpdGxlUHJvcHM+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBUaXRsZVByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBUaXRsZU1vZHVsZXMgfHwgKFRpdGxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gdHlwZW9mIGUuY29sb3JTdGFuZGFyZCA9PT0gXCJzdHJpbmdcIiksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IHR5cGVvZiBlLnNpemUzMiA9PT0gXCJzdHJpbmdcIiksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IHR5cGVvZiBlLmgyID09PSBcInN0cmluZ1wiKVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIHRpdGxlTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcblxyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgJHtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkfSAke3NpemVNb2R1bGUuc2l6ZTE0fSAke3RpdGxlTW9kdWxlLmgyfSAke3RpdGxlTW9kdWxlLmRlZmF1bHRDb2xvcn0gJHt0aXRsZU1vZHVsZS5kZWZhdWx0TWFyZ2luaDJ9YFxyXG4gICAgICAgIGlmKHByb3BzLmNsYXNzTmFtZSljbGFzc05hbWUgKz0gXCIgXCIrcHJvcHMuY2xhc3NOYW1lXHJcblxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZX0sIHByb3BzLmNoaWxkcmVuKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOlRpdGxlUHJvcHMgPSB7XHJcbiAgICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAgICAgY2xhc3NOYW1lOiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkV4ZW1wbGUgdGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiXHJcbmltcG9ydCBleGNsdWRlUHJvcGVydGllcyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9leGNsdWRlUHJvcGVydGllc1wiXHJcblxyXG50eXBlIFRvb2x0aXBEYXRhID0ge1xyXG4gICAgb25DbGljaygpOnZvaWRcclxuICAgIG9uTW91c2VFbnRlcigpOnZvaWRcclxuICAgIG9uTW91c2VMZWF2ZSgpOnZvaWRcclxuICAgIG9uQ29udGV4dE1lbnUoKTp2b2lkXHJcbiAgICBcImFyaWEtbGFiZWxcIjogc3RyaW5nXHJcbn1cclxudHlwZSBUb29sdGlwUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbjpSZWFjdE5vZGUsXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBwb3NpdGlvbj86IFRvb2x0aXBQb3NpdGlvbixcclxuICAgIGNvbG9yPzogVG9vbHRpcENvbG9yXHJcbn1cclxuXHJcbmxldCBUb29sdGlwTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb29sdGlwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFRvb2x0aXBQcm9wcz4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6IFRvb2x0aXBQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVG9vbHRpcE1vZHVsZXMgfHwgKFRvb2x0aXBNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlRvb2x0aXBcIilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFRvb2x0aXBcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGxldCBwcm9wcyA9IGV4Y2x1ZGVQcm9wZXJ0aWVzKHRoaXMucHJvcHMsIFtcImNoaWxkcmVuXCJdKVxyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwLmRlZmF1bHQsIHByb3BzLCAoZGF0YTpUb29sdGlwRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICAuLi5kYXRhLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCJmaXQtY29udGVudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCJmaXQtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpUb29sdGlwUHJvcHMgPSB7XHJcbiAgICAgICAgY2hpbGRyZW46IG51bGwsXHJcbiAgICAgICAgdGV4dDogXCJObyB0ZXh0IHdhcyBwYXNzZWQgdG8gVG9vbHRpcFwiLFxyXG4gICAgICAgIHBvc2l0aW9uOiBcInRvcFwiLFxyXG4gICAgICAgIGNvbG9yOiBcImJyYW5kXCJcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFJlYWN0LmNyZWF0ZUVsZW1lbnQod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInllbGxvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXI6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgXCJIb3ZlciB0aGlzIGJ1dHRvbiB0byBzZWUgdGhlIHRvb2x0aXBcIilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJFeGFtcGxlIFRvb2x0aXAgVGV4dFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgIGxldCBjb2xvcnMgPSBbXVxyXG4gICAgICAgICAgICBUb29sdGlwLkNvbG9ycy5mb3JFYWNoKGNvbG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goY29sb3JzKVxyXG4gICAgICAgICAgICBsZXQgcG9zaXRpb25zID0gW11cclxuICAgICAgICAgICAgVG9vbHRpcC5Qb3NpdGlvbnMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogcFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChwb3NpdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgUG9zaXRpb25zOlRvb2x0aXBQb3NpdGlvbltdID0gW1widG9wXCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCJdXHJcbiAgICBzdGF0aWMgQ29sb3JzOlRvb2x0aXBDb2xvcltdID0gW1wiYmxhY2tcIiwgXCJncmV5XCIsIFwiYnJhbmRcIiwgXCJncmVlblwiLCBcInllbGxvd1wiLCBcInJlZFwiXVxyXG59XHJcbmxldCBBbGxQcmV2aWV3c1xyXG5cclxuZXhwb3J0IHR5cGUgVG9vbHRpcFBvc2l0aW9uID0gXCJ0b3BcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIlxyXG5leHBvcnQgdHlwZSBUb29sdGlwQ29sb3IgPSBcImJsYWNrXCIgfCBcImdyZXlcIiB8IFwiYnJhbmRcIiB8IFwiZ3JlZW5cIiB8IFwieWVsbG93XCIgfCBcInJlZFwiIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB7IE1vdXNlRXZlbnRIYW5kbGVyLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIlxyXG5cclxubGV0IEJ1dHRvbk1vZHVsZXNcclxuXHJcbnR5cGUgQnV0dG9uUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZSxcclxuICAgIG9uQ2xpY2s/OiBNb3VzZUV2ZW50SGFuZGxlcixcclxuICAgIGNvbG9yPzogQnV0dG9uQ29sb3IsXHJcbiAgICB3cmFwcGVyPzogYm9vbGVhbixcclxuICAgIGxvb2s/OiBCdXR0b25Mb29rLFxyXG4gICAgc2l6ZT86IEJ1dHRvblNpemUsXHJcbiAgICBob3ZlckNvbG9yPzogQnV0dG9uSG92ZXJzLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEJ1dHRvblByb3BzLCB7aG92ZXI6IGJvb2xlYW59PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpCdXR0b25Qcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGhvdmVyOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgQ29sb3JzOkJ1dHRvbkNvbG9yW10gPSBbXCJicmFuZFwiLCBcImdyZXlcIiwgXCJyZWRcIiwgXCJncmVlblwiLCBcInllbGxvd1wiLCBcInByaW1hcnlcIiwgXCJsaW5rXCIsIFwid2hpdGVcIiwgXCJibGFja1wiLCBcInRyYW5zcGFyZW50XCJdXHJcbiAgICBzdGF0aWMgTG9va3M6QnV0dG9uTG9va1tdID0gW1wiZmlsbGVkXCIsIFwiaW52ZXJ0ZWRcIiwgXCJvdXRsaW5lZFwiLCBcImdob3N0XCIsIFwibGlua1wiLCBcImJsYW5rXCJdXHJcbiAgICBzdGF0aWMgU2l6ZXM6QnV0dG9uU2l6ZVtdID0gW1wic21hbGxcIiwgXCJtZWRpdW1cIiwgXCJsYXJnZVwiLCBcInhsYXJnZVwiLCBcIm1pblwiLCBcIm1heFwiLCBcImljb25cIiwgXCJub25lXCJdXHJcbiAgICBzdGF0aWMgSG92ZXJDb2xvcnM6IEJ1dHRvbkhvdmVyc1tdID0gW1wiZGVmYXVsdFwiLCAuLi5CdXR0b24uQ29sb3JzXVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7IC8vIGNhY2hpbmcgbW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBCdXR0b25Nb2R1bGVzIHx8IChCdXR0b25Nb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiX2hvcml6b250YWxcIl0pLFxyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiY29sb3JUcmFuc3BhcmVudFwiXSksXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJidXR0b25XcmFwcGVyXCJdKSxcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkJ1dHRvbkNvbG9yc1wiXSksXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBmbGV4TW9kdWxlLFxyXG4gICAgICAgICAgICBldWhNb2R1bGUxLFxyXG4gICAgICAgICAgICBidXR0b25Nb2R1bGUsXHJcbiAgICAgICAgICAgIGNvbG9yc01vZHVsZSxcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGxldCBwcm9wczpCdXR0b25Qcm9wcyA9IHt9XHJcbiAgICAgICAgaWYodGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgIGlmKFwiY29sb3JcIiBpbiB0aGlzLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNvbG9yID0gdGhpcy5wcm9wcy5jb2xvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwiY2hpbGRyZW5cIiBpbiB0aGlzLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwib25DbGlja1wiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DbGljayA9IHRoaXMucHJvcHMub25DbGlja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKFwid3JhcHBlclwiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMud3JhcHBlciA9ICEhdGhpcy5wcm9wcy53cmFwcGVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoXCJsb29rXCIgaW4gdGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5sb29rID0gdGhpcy5wcm9wcy5sb29rXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoXCJzaXplXCIgaW4gdGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5zaXplID0gdGhpcy5wcm9wcy5zaXplXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoXCJob3ZlckNvbG9yXCIgaW4gdGhpcy5wcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5ob3ZlckNvbG9yID0gdGhpcy5wcm9wcy5ob3ZlckNvbG9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoXCJkaXNhYmxlZFwiIGluIHRoaXMucHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZWQgPSB0aGlzLnByb3BzLmRpc2FibGVkXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihwcm9wcy5jb2xvcil7XHJcbiAgICAgICAgICAgIHByb3BzLmNvbG9yID0gcHJvcHMuY29sb3IudG9Mb3dlckNhc2UoKSBhcyBCdXR0b25Db2xvclxyXG4gICAgICAgICAgICBpZighQnV0dG9uLkNvbG9ycy5pbmNsdWRlcyhwcm9wcy5jb2xvcikpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuY29sb3IgPSBCdXR0b24uQ29sb3JzWzBdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcHJvcHMuY29sb3IgPSBCdXR0b24uQ29sb3JzWzBdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihwcm9wcy5sb29rKXtcclxuICAgICAgICAgICAgcHJvcHMubG9vayA9IHByb3BzLmxvb2sudG9Mb3dlckNhc2UoKSBhcyBCdXR0b25Mb29rXHJcbiAgICAgICAgICAgIGlmKCFCdXR0b24uTG9va3MuaW5jbHVkZXMocHJvcHMubG9vaykpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMubG9vayA9IEJ1dHRvbi5Mb29rc1swXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHByb3BzLmxvb2sgPSBCdXR0b24uTG9va3NbMF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHByb3BzLnNpemUpe1xyXG4gICAgICAgICAgICBwcm9wcy5zaXplID0gcHJvcHMuc2l6ZS50b0xvd2VyQ2FzZSgpIGFzIEJ1dHRvblNpemVcclxuICAgICAgICAgICAgaWYoIUJ1dHRvbi5TaXplcy5pbmNsdWRlcyhwcm9wcy5zaXplKSl7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5zaXplID0gQnV0dG9uLlNpemVzWzBdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgcHJvcHMuc2l6ZSA9IEJ1dHRvbi5TaXplc1swXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMuaG92ZXJDb2xvcil7XHJcbiAgICAgICAgICAgIHByb3BzLmhvdmVyQ29sb3IgPSBwcm9wcy5ob3ZlckNvbG9yLnRvTG93ZXJDYXNlKCkgYXMgQnV0dG9uSG92ZXJzXHJcbiAgICAgICAgICAgIGlmKCFCdXR0b24uSG92ZXJDb2xvcnMuaW5jbHVkZXMocHJvcHMuaG92ZXJDb2xvcikpe1xyXG4gICAgICAgICAgICAgICAgcHJvcHMuaG92ZXJDb2xvciA9IEJ1dHRvbi5Ib3ZlckNvbG9yc1swXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHByb3BzLmhvdmVyQ29sb3IgPSBCdXR0b24uSG92ZXJDb2xvcnNbMF1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBidXR0b25TaXplID0gcHJvcHMuc2l6ZSA/IGNvbG9yc01vZHVsZS5CdXR0b25TaXplc1twcm9wcy5zaXplLnRvVXBwZXJDYXNlKCldIHx8IFwiXCIgOiBcIlwiXHJcbiAgICAgICAgaWYoYnV0dG9uU2l6ZSlidXR0b25TaXplID0gXCIgXCIgKyBidXR0b25TaXplXHJcblxyXG4gICAgICAgIGxldCBob3ZlckNvbG9yID0gcHJvcHMuaG92ZXJDb2xvciA/IGNvbG9yc01vZHVsZS5CdXR0b25Ib3ZlcnNbcHJvcHMuaG92ZXJDb2xvci50b1VwcGVyQ2FzZSgpXSB8fCBcIlwiIDogXCJcIlxyXG4gICAgICAgIGlmKGhvdmVyQ29sb3IpaG92ZXJDb2xvciA9IFwiIFwiICsgaG92ZXJDb2xvclxyXG5cclxuICAgICAgICBwcm9wcy5vbkNsaWNrID0gdHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BzLm9uQ2xpY2sgOiAoKSA9PiB7fVxyXG4gICAgICAgIGlmKHR5cGVvZiBwcm9wcy53cmFwcGVyICE9PSBcImJvb2xlYW5cIilwcm9wcy53cmFwcGVyID0gdHJ1ZVxyXG5cclxuICAgICAgICBsZXQgaG92ZXIgPSB0aGlzLnN0YXRlLmhvdmVyID8gZXVoTW9kdWxlMS5oYXNIb3ZlciA6IFwiXCJcclxuICAgICAgICBpZihob3Zlcilob3ZlciA9IFwiIFwiICsgaG92ZXJcclxuXHJcbiAgICAgICAgbGV0IGJ1dHRvbiA9IDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake2ZsZXhNb2R1bGUuZmxleENoaWxkfSAke2V1aE1vZHVsZTEuYnV0dG9ufSAke2NvbG9yc01vZHVsZS5CdXR0b25Mb29rc1twcm9wcy5sb29rLnRvVXBwZXJDYXNlKCldfSAke2NvbG9yc01vZHVsZS5CdXR0b25Db2xvcnNbcHJvcHMuY29sb3IudG9VcHBlckNhc2UoKV19JHtidXR0b25TaXplfSR7aG92ZXJDb2xvcn0ke2hvdmVyfSAke2V1aE1vZHVsZTEuZ3Jvd31gfSBcclxuICAgICAgICAgICAgc3R5bGU9e3tmbGV4OiBcIjAgMSBhdXRvXCJ9fSBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9IG9uTW91c2VFbnRlcj17KGV2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighaG92ZXJDb2xvcilyZXR1cm5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2hvdmVyOiB0cnVlfSlcclxuICAgICAgICAgICAgfX0gb25Nb3VzZUxlYXZlPXsoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCFob3ZlckNvbG9yKXJldHVyblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aG92ZXI6IGZhbHNlfSlcclxuICAgICAgICAgICAgfX0gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2V1aE1vZHVsZTEuY29udGVudHN9Pntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgaWYocHJvcHMud3JhcHBlcil7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17YnV0dG9uTW9kdWxlLmJ1dHRvbldyYXBwZXJ9PlxyXG4gICAgICAgICAgICAgICAge2J1dHRvbn1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBidXR0b25cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgbGV0IGNvbG9ycyA9IFtdXHJcbiAgICAgICAgICAgIGZvcihsZXQgY29sb3Igb2YgQnV0dG9uLkNvbG9ycyl7XHJcbiAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goY29sb3JzKVxyXG4gICAgICAgICAgICBsZXQgbG9va3MgPSBbXVxyXG4gICAgICAgICAgICBmb3IobGV0IGxvb2sgb2YgQnV0dG9uLkxvb2tzKXtcclxuICAgICAgICAgICAgICAgIGxvb2tzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvb2s6IGxvb2tcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChsb29rcylcclxuICAgICAgICAgICAgbGV0IHNpemVzID0gW11cclxuICAgICAgICAgICAgZm9yKGxldCBzaXplIG9mIEJ1dHRvbi5TaXplcyl7XHJcbiAgICAgICAgICAgICAgICBzaXplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goc2l6ZXMpXHJcbiAgICAgICAgICAgIGxldCBob3ZlcnMgPSBbXVxyXG4gICAgICAgICAgICBmb3IobGV0IGhvdmVyIG9mIEJ1dHRvbi5Ib3ZlckNvbG9ycyl7XHJcbiAgICAgICAgICAgICAgICBob3ZlcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogaG92ZXJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChob3ZlcnMpXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tjaGlsZHJlbjogXCJUZXN0IEJ1dHRvblwifV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tvbkNsaWNrOiAoKSA9PiB7fX1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7d3JhcHBlcjogZmFsc2V9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe2Rpc2FibGVkOiBmYWxzZX0sIHtkaXNhYmxlZDogdHJ1ZX1dKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzXHJcblxyXG5cclxuZXhwb3J0IHR5cGUgQnV0dG9uQ29sb3IgPSBcImJyYW5kXCIgfCBcImdyZXlcIiB8IFwicmVkXCIgfCBcImdyZWVuXCIgfCBcInllbGxvd1wiIHwgXCJwcmltYXJ5XCIgfCBcImxpbmtcIiB8IFwid2hpdGVcIiB8IFwiYmxhY2tcIiB8IFwidHJhbnNwYXJlbnRcIlxyXG5leHBvcnQgdHlwZSBCdXR0b25Mb29rID0gXCJmaWxsZWRcIiB8IFwiaW52ZXJ0ZWRcIiB8IFwib3V0bGluZWRcIiB8IFwiZ2hvc3RcIiB8IFwibGlua1wiIHwgXCJibGFua1wiXHJcbmV4cG9ydCB0eXBlIEJ1dHRvblNpemUgPSBcIm5vbmVcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCIgfCBcInhsYXJnZVwiIHwgXCJtaW5cIiB8IFwibWF4XCIgfCBcImljb25cIlxyXG5leHBvcnQgdHlwZSBCdXR0b25Ib3ZlcnMgPSBcImRlZmF1bHRcIiB8IEJ1dHRvbkNvbG9yIiwiaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBXZWJwYWNrTG9hZGVyIGZyb20gXCIuLi8uLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgVG9vbHRpcCBmcm9tIFwiLi4vZ2VuZXJhbC9Ub29sdGlwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuaW1wb3J0IHsgY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzcyB9IGZyb20gXCIuLi9wcml2YXRlL0Vycm9yQ2F0Y2hlclwiXHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBkZWZhdWx0Q29sb3I6IDEwMDcwNzA5LFxyXG4gICAgYmFzZUNvbG9yczogW1xyXG4gICAgICAgIDE3NTIyMjAsIFxyXG4gICAgICAgIDMwNjY5OTMsIFxyXG4gICAgICAgIDM0NDcwMDMsIFxyXG4gICAgICAgIDEwMTgxMDQ2LCBcclxuICAgICAgICAxNTI3NzY2NywgXHJcbiAgICAgICAgMTU4NDQzNjcsIFxyXG4gICAgICAgIDE1MTA1NTcwLCBcclxuICAgICAgICAxNTE1ODMzMiwgXHJcbiAgICAgICAgOTgwNzI3MCwgXHJcbiAgICAgICAgNjMyMzU5NSwgXHJcbiAgICAgICAgMTE0Njk4NiwgXHJcbiAgICAgICAgMjA2NzI3NiwgXHJcbiAgICAgICAgMjEyMzQxMiwgXHJcbiAgICAgICAgNzQxOTUzMCwgXHJcbiAgICAgICAgMTEzNDI5MzUsIFxyXG4gICAgICAgIDEyNzQ1NzQyLCBcclxuICAgICAgICAxMTAyNzIwMCwgXHJcbiAgICAgICAgMTAwMzg1NjIsIFxyXG4gICAgICAgIDk5MzYwMzEsIFxyXG4gICAgICAgIDU1MzMzMDZcclxuICAgIF1cclxufVxyXG5cclxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xyXG4gICAgZGVmYXVsdENvbG9yPzogbnVtYmVyLFxyXG4gICAgY3VzdG9tQ29sb3I/OiBudW1iZXIsXHJcbiAgICBiYXNlQ29sb3JzPzogbnVtYmVyW10sXHJcbiAgICB2YWx1ZT86IHN0cmluZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhbixcclxuICAgIG9uQ2hhbmdlPzogKGNvbG9yOm51bWJlcikgPT4gdm9pZFxyXG59XHJcblxyXG5sZXQgQ29sb3JQaWNrZXJNb2R1bGVzXHJcbmxldCBpc0ZldGNoaW5nID0gbnVsbFxyXG5cclxuLyoqXHJcbiAqIFRoaXMgY29tcG9uZW5udCBuZWVkcyB0byBiZSBsb2FkZWQuIEFzIGEgcmVzdWx0LCB5b3UgbWF5IGV4cGVyaWVuY2UgMTAwLTMwMG1zIGxvYWRpbmcgdGhlIGZpcnN0IHRpbWUuXHJcbiAqIFJlbmRlciB3aWxsIHJldHVybiBgbnVsbGAgYmVmb3JlIGxvYWRlZC5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbG9yUGlja2VyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxDb2xvclBpY2tlclByb3BzLCB7dmFsdWU/OnN0cmluZyxsYXN0Q29sb3I6YW55fT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHM6Q29sb3JQaWNrZXJQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IG51bGwsXHJcbiAgICAgICAgICAgIGxhc3RDb2xvcjogdGhpcy5wcm9wcy52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFByZWxvYWQgdGhlIGNvbXBvbmVudC4gKi9cclxuICAgIHN0YXRpYyBwcmVsb2FkKCl7XHJcbiAgICAgICAgaWYoQ29sb3JQaWNrZXIucHJvdG90eXBlLm1vZHVsZXNbMF0pcmV0dXJuIC8vIGFscmVhZHkgbG9hZGVkXHJcbiAgICAgICAgaWYoaXNGZXRjaGluZylyZXR1cm4gLy8gaXMgZmV0Y2hpbmcgc28gZG9uJ3QgZG91YmxlIHByZWxvYWQuXHJcbiAgICAgICAgdHJ5eyAvLyBJZiB3ZSBjYXVnaHQgYW4gZXJyb3JcclxuICAgICAgICAgICAgbmV3IENvbG9yUGlja2VyKHt9KS5yZW5kZXIoKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWwpe1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOkNvbG9yUGlja2VyUHJvcHMgPSB7XHJcbiAgICAgICAgZGVmYXVsdENvbG9yOiBDb25zdGFudHMuZGVmYXVsdENvbG9yLFxyXG4gICAgICAgIGN1c3RvbUNvbG9yOiBudWxsLFxyXG4gICAgICAgIGJhc2VDb2xvcnM6IENvbnN0YW50cy5iYXNlQ29sb3JzLFxyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIENvbG9yUGlja2VyTW9kdWxlcyB8fCAoQ29sb3JQaWNrZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkNvbG9yUGlja2VyXCIpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJDb2xvclBpY2tlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIENvbG9yUGlja2VyQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBpZighQ29sb3JQaWNrZXJDb21wb25lbnQpe1xyXG4gICAgICAgICAgICBpZihpc0ZldGNoaW5nKXsgLy8gc3VwcG9ydCBmb3IgbXVsdGlwbGUgY29sb3IgcGlja2VyXHJcbiAgICAgICAgICAgICAgICBpc0ZldGNoaW5nLnRoZW4oKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBDb2xvclBpY2tlck1vZHVsZXMgPSBudWxsXHJcbiAgICAgICAgICAgIGxldCByZXNvbHZlXHJcbiAgICAgICAgICAgIGlzRmV0Y2hpbmcgPSBuZXcgUHJvbWlzZShyZXMgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgICAgICBjb25zdCBHdWlsZFNldHRpbmdzUm9sZXMgPSBuZXcgKFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lLmluY2x1ZGVzKFwiR3VpbGRTZXR0aW5nc1JvbGVzXCIpKS5kZWZhdWx0KSgpLnJlbmRlcigpLnR5cGVcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBHdWlsZFNldHRpbmdzUm9sZXMucHJvdG90eXBlLnJlbmRlclJvbGVTZXR0aW5ncy5jYWxsKHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPd25lcjogKCkgPT4gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRVc2VyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldFNlbGVjdGVkUm9sZSgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHJlbmRlckhlYWRlcjogR3VpbGRTZXR0aW5nc1JvbGVzLnByb3RvdHlwZS5yZW5kZXJIZWFkZXJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY29uc3QgR3VpbGRSb2xlU2V0dGluZ3MgPSBzZXR0aW5ncy5wcm9wcy5jaGlsZHJlblsxXS50eXBlXHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IEd1aWxkUm9sZVNldHRpbmdzLnByb3RvdHlwZS5yZW5kZXJDb2xvclBpY2tlci5jYWxsKHtcclxuICAgICAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IDBcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlcnlvbmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUoY2hpbGRyZW4ucHJvcHMpLnByb3BzLmNoaWxkcmVuLnR5cGUuX2N0b3IoKS50aGVuKGMgPT4ge1xyXG4gICAgICAgICAgICAgICAgQ29sb3JQaWNrZXJNb2R1bGVzID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8Q29sb3JQaWNrZXJDb21wb25lbnQuZGVmYXVsdCBjb2xvcnM9e3RoaXMucHJvcHMuYmFzZUNvbG9yc30gZGVmYXVsdENvbG9yPXt0aGlzLnByb3BzLmRlZmF1bHRDb2xvcn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IFxyXG4gICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5wcm9wcy5kaXNhYmxlZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IGN1c3RvbUNvbG9yPXt0aGlzLnByb3BzLmN1c3RvbUNvbG9yfT5cclxuICAgICAgICA8L0NvbG9yUGlja2VyQ29tcG9uZW50LmRlZmF1bHQ+XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5sYXN0Q29sb3IgIT09IHRoaXMucHJvcHMudmFsdWUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBsYXN0Q29sb3I6IHRoaXMucHJvcHMudmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2xvclBpY2tlcigpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdLCBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFV0aWxzLkhleENvbG9yVG9EZWNpbWFsKFwiIzcyODlEQVwiKVxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF0sIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogKGNvbG9yKSA9PiB7fVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGhlbHAgPSB7XHJcbiAgICAgICAgaW5mbzogXCJUbyBjb252ZXJ0IGhleCBjb2xvcnMgdG8gZGVjaW1hbCwgeW91IGNhbiBkbyBgTGlnaHRjb3JkLkFwaS5VdGlscy5IZXhDb2xvclRvRGVjaW1hbCgnIzcyODlEQScpYCBhbmQgZ28gYmFjayB3aXRoIGBMaWdodGNvcmQuQXBpLlV0aWxzLkRlY2ltYWxDb2xvclRvSGV4KDc1MDYzOTQpYFwiLFxyXG4gICAgICAgIHdhcm46IFwiVGhlIGNvbXBvbmVudCBtYXkgbm90IGFwcGVhciBpbnN0YW50bHkuIFRoZSBjb21wb25lbnQgbmVlZHMgdG8gYmUgbG9hZGVkLCBzbyB5b3UgY291bGQgZXhwZXJpZW5jZSA1MC0zMDBtcyBsb2FkaW5nIHRpbWUgZGVwZW5kaW5nIG9uIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi5cIlxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IHsgUmVhY3ROb2RlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSBcInJlYWN0XCJcclxuXHJcbnR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGVycm9yPzogc3RyaW5nLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxyXG4gICAgICAgIGxhYmVsOiBzdHJpbmdcclxuICAgIH1bXSxcclxuICAgIHZhbHVlUmVuZGVyZXI/OiAoZGF0YSkgPT4gUmVhY3ROb2RlLFxyXG4gICAgb3B0aW9uUmVuZGVyZXI/OiAoZGF0YSkgPT4gUmVhY3ROb2RlLFxyXG4gICAgbXVsdGlWYWx1ZVJlbmRlcmVyPzogKGRhdGEpID0+IFJlYWN0Tm9kZVxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcclxuICAgIHZhbHVlPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW4sXHJcbiAgICBjbGVhcmFibGU/OiBib29sZWFuLFxyXG4gICAgc3R5bGVPdmVycmlkZXM/OiBDU1NQcm9wZXJ0aWVzLFxyXG4gICAgbGlnaHRUaGVtZUNvbG9yT3ZlcnJpZGVzPzogdGhlbWVPdmVycmlkZSxcclxuICAgIGRhcmtUaGVtZUNvbG9yT3ZlcnJpZGVzPzogdGhlbWVPdmVycmlkZSxcclxuICAgIGlzTXVsdGk/OiBib29sZWFuXHJcbn1cclxuXHJcbnR5cGUgdGhlbWVPdmVycmlkZSA9IHtcclxuICAgIG5ldXRyYWwwOiBzdHJpbmcsXHJcbiAgICBuZXV0cmFsNTogc3RyaW5nLFxyXG4gICAgbmV1dHJhbDEwOiBzdHJpbmcsXHJcbiAgICBuZXV0cmFsMjA6IHN0cmluZyxcclxuICAgIG5ldXRyYWwzMDogc3RyaW5nLFxyXG4gICAgcHJpbWFyeTogc3RyaW5nLFxyXG4gICAgcHJpbWFyeTI1OiBzdHJpbmcsXHJcbiAgICBwcmltYXJ5NTA6IHN0cmluZyxcclxuICAgIHNlbGVjdGVkT3B0aW9uQmFja2dyb3VuZDogc3RyaW5nLFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgbWVudUJhY2tncm91bmQ6IHN0cmluZyxcclxuICAgIG1lbnVCb3JkZXI6IHN0cmluZyxcclxuICAgIHNjcm9sbEJhclRodW1iOiBzdHJpbmcsXHJcbiAgICBtdWx0aU9wdGlvbkJhY2tncm91bmQ6IHN0cmluZ1xyXG59XHJcblxyXG5sZXQgRHJvcGRvd25Nb2R1bGVzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PERyb3Bkb3duUHJvcHMsIHt2YWx1ZTogc3RyaW5nfG51bGx9PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpEcm9wZG93blByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IG51bGxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpEcm9wZG93blByb3BzID0ge1xyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgICBvcHRpb25zOiBbe1xyXG4gICAgICAgICAgICB2YWx1ZTogXCJub25lXCIsXHJcbiAgICAgICAgICAgIFwibGFiZWxcIjogXCJObyBvcHRpb25zIC0gTm8gb3B0aW9ucyB3YXMgcGFzc2VkIHRvIERyb3Bkb3duLiBJZiB5b3UgbWVhbnQgdG8gcHV0IGFuIGVtcHR5IGRyb3Bkb3duLCBpbnB1dCBhbiBlbXB0eSBhcnJheS5cIlxyXG4gICAgICAgIH1dLFxyXG4gICAgICAgIHZhbHVlUmVuZGVyZXI6IG51bGwsXHJcbiAgICAgICAgbXVsdGlWYWx1ZVJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIG9wdGlvblJlbmRlcmVyOiBudWxsLFxyXG4gICAgICAgIG9uQ2hhbmdlOiBOT09QLFxyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcclxuICAgICAgICBjbGVhcmFibGU6IGZhbHNlLFxyXG4gICAgICAgIHN0eWxlT3ZlcnJpZGVzOiBudWxsLFxyXG4gICAgICAgIGxpZ2h0VGhlbWVDb2xvck92ZXJyaWRlczogbnVsbCxcclxuICAgICAgICBkYXJrVGhlbWVDb2xvck92ZXJyaWRlczogbnVsbCxcclxuICAgICAgICBpc011bHRpOiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIERyb3Bkb3duTW9kdWxlcyB8fCAoRHJvcGRvd25Nb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlNlbGVjdFRlbXBXcmFwcGVyXCIpLmRlZmF1bHRcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIERyb3Bkb3duQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gPERyb3Bkb3duQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfS8+XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJlZFwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJPcHRpb24gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdGlvbjJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiT3B0aW9uIDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHRpb24zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9wdGlvbiAzXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBjbGVhcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaXNNdWx0aTogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgaXNNdWx0aTogdHJ1ZVxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuXHJcblxyXG50eXBlIFJhZGlvR3JvdXBQcm9wcyA9IHtcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgY29sb3I/OiBzdHJpbmcsXHJcbiAgICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXHJcbiAgICAgICAgZGVzYz86IHN0cmluZ1xyXG4gICAgfVtdLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCxcclxuICAgIHZhbHVlPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgc2l6ZT86IFwic21hbGxcInxcIm1lZGl1bVwiLFxyXG4gICAgaXRlbVR5cGU/OiBcImJhclwifFwicGFuZWxcIixcclxuICAgIGluZm9DbGFzc05hbWU/OiBzdHJpbmdcclxufVxyXG5cclxubGV0IFJhZGlvR3JvdXBNb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmFkaW9Hcm91cCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxSYWRpb0dyb3VwUHJvcHMsIHt2YWx1ZT86IHN0cmluZ30+IHtcclxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM6UmFkaW9Hcm91cFByb3BzID0ge1xyXG4gICAgICAgIG9wdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIHZhbHVlOiBcIm5vbmVcIixcclxuICAgICAgICAgICAgbmFtZTogXCJObyBvcHRpb25zXCIsXHJcbiAgICAgICAgICAgIGRlc2M6IFwiTm8gb3B0aW9ucyB3YXMgcGFzc2VkIHRvIENob2ljZXMuIElmIHlvdSBtZWFudCB0byBkaXNwbGF5IG5vIG9wdGlvbnMgYXQgYWxsLCBwbGVhc2UgcGFzcyBhbiBlbXB0eSBhcnJheS5cIixcclxuICAgICAgICAgICAgY29sb3I6IFwiI2YwNDc0N1wiXHJcbiAgICAgICAgfV0sXHJcbiAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgaXRlbVR5cGU6IFwiYmFyXCIsXHJcbiAgICAgICAgaW5mb0NsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUFxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IocHJvcHM6UmFkaW9Hcm91cFByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKGV2KXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGV2LnZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogZXYudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFJhZGlvR3JvdXBNb2R1bGUgfHwgKFJhZGlvR3JvdXBNb2R1bGUgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiUmFkaW9Hcm91cFwiKS5kZWZhdWx0XHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBSYWRpb0dyb3VwQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIDxSYWRpb0dyb3VwQ29tcG9uZW50IG9wdGlvbnM9e3Byb3BzLm9wdGlvbnN9IG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlfSB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX0gZGlzYWJsZWQ9e3Byb3BzLmRpc2FibGVkfSBcclxuICAgICAgICAgICAgc2l6ZT17UmFkaW9Hcm91cENvbXBvbmVudC5TaXplc1twcm9wcy5zaXplLnRvVXBwZXJDYXNlKCldfSBpdGVtVHlwZT17UmFkaW9Hcm91cENvbXBvbmVudC5JdGVtVHlwZXNbcHJvcHMuaXRlbVR5cGUudG9VcHBlckNhc2UoKV19IFxyXG4gICAgICAgICAgICBpbmZvQ2xhc3NOYW1lPXtwcm9wcy5pbmZvQ2xhc3NOYW1lfS8+XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCk6c3RyaW5nfG51bGx7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk9wdGlvbiAxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFwiZGVzY3JpcHRpb24gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcIm9wdGlvbjJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJPcHRpb24gMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcImRlc2NyaXB0aW9uIDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHRpb24zXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiT3B0aW9uIDNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXCJkZXNjcmlwdGlvbiAzXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwib3B0aW9uMVwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtZWRpdW1cIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogXCJiYXJcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogXCJwYW5lbFwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICByZXR1cm4gQWxsUHJldmlld3NcclxuICAgICAgICB9KSgpXHJcbiAgICB9XHJcbn1cclxubGV0IEFsbFByZXZpZXdzIiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB1dWlkIGZyb20gXCIuLi8uLi9tb2R1bGVzL3V1aWRcIlxyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi4vLi4vbW9kdWxlcy9ub29wXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuLi8uLi9tb2R1bGVzL1V0aWxzXCJcclxuXHJcbnR5cGUgU3dpdGNoUHJvcHMgPSB7XHJcbiAgICBpZD86IHN0cmluZyxcclxuICAgIG9uQ2hhbmdlPzogKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHZvaWQsXHJcbiAgICB2YWx1ZT86IGJvb2xlYW4sXHJcbiAgICBmaWxsPzogc3RyaW5nLFxyXG4gICAgdGhlbWU/OiBcImRlZmF1bHRcInxcImNsZWFyXCIsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW4sXHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogXCJkZWZhdWx0XCJ8XCJtaW5pXCIsXHJcbiAgICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcclxufVxyXG5cclxubGV0IFN3aXRjaE1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFN3aXRjaFByb3BzLCB7dmFsdWU6IGJvb2xlYW59PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpTd2l0Y2hQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSB8fCBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gU3dpdGNoTW9kdWxlcyB8fCAoU3dpdGNoTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgV2VicGFja0xvYWRlci5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJTd2l0Y2hcIikuZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgU3dpdGNoQ29tcG9uZW50XHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuICg8U3dpdGNoQ29tcG9uZW50IGlkPXtwcm9wcy5pZH0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlIHx8IGZhbHNlfSBmaWxsPXtwcm9wcy5maWxsfSBcclxuICAgICAgICAgICAgdGhlbWU9e1N3aXRjaENvbXBvbmVudC5UaGVtZXNbcHJvcHMudGhlbWUudG9VcHBlckNhc2UoKV19IGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH0gY2xhc3NOYW1lPXtwcm9wcy5jbGFzc05hbWV9IFxyXG4gICAgICAgICAgICBzaXplPXtTd2l0Y2hDb21wb25lbnQuU2l6ZXNbcHJvcHMuc2l6ZS50b1VwcGVyQ2FzZSgpXX0gc3R5bGU9e3Byb3BzLnN0eWxlfS8+KVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKCF0aGlzLnN0YXRlLnZhbHVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZTogIXRoaXMuc3RhdGUudmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YWx1ZSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgZmlsbDogbnVsbCxcclxuICAgICAgICB0aGVtZTogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBzaXplOiBcImRlZmF1bHRcIixcclxuICAgICAgICBzdHlsZToge31cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEFsbFByZXZpZXdzKCl7XHJcbiAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzIHx8ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe29uQ2hhbmdlOiAodmFsdWUpID0+IHt9fV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIHRoZW1lOiBcImRlZmF1bHRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0aGVtZTogXCJjbGVhclwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctc3dpdGNoXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiBudWxsXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZTogXCJtaW5pXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge31cclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGVscCA9IHtcclxuICAgICAgICBlcnJvcjogXCJUaGUgYGNsZWFyYCBvcHRpb24gZG9lc24ndCB3b3JrIHdlbGwgb24gbGlnaHQgdGhlbWUuXCJcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG50eXBlIFRleHRBcmVhUHJvcHMgPSB7XHJcbiAgICBuYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXHJcbiAgICBhdXRvRm9jdXM/OiBib29sZWFuLFxyXG4gICAgcmVzaXplYWJsZT86IGJvb2xlYW4sXHJcbiAgICBmbGV4PzogYm9vbGVhbixcclxuICAgIGF1dG9zaXplPzogZmFsc2UsXHJcbiAgICByb3dzPzogbnVtYmVyLFxyXG4gICAgdmFsdWU/OiBzdHJpbmcsXHJcbiAgICBlcnJvcj86IHN0cmluZyxcclxuICAgIG1heExlbmd0aD86IG51bWJlcixcclxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldiwgbmFtZTogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2LCBuYW1lOiBzdHJpbmcpID0+IHZvaWQsXHJcbiAgICBvbktleURvd24/OiAoZXYpID0+IHZvaWRcclxufVxyXG5cclxubGV0IFRleHRBcmVhTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0QXJlYSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUZXh0QXJlYVByb3BzLCB7dmFsdWU6IHN0cmluZ30+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOlRleHRBcmVhUHJvcHMpe1xyXG4gICAgICAgIHN1cGVyKHByb3BzKVxyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5vbkZvY3VzID0gdGhpcy5vbkZvY3VzLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uQmx1ciA9IHRoaXMub25CbHVyLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uS2V5RG93biA9IHRoaXMub25LZXlEb3duLmJpbmQodGhpcylcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHByb3BzLnZhbHVlIHx8IFwiXCJcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gVGV4dEFyZWFNb2R1bGVzIHx8IChUZXh0QXJlYU1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVGV4dEFyZWFcIikuZGVmYXVsdFxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUsIG5hbWUpe1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUsIG5hbWUpXHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzKGV2LCBuYW1lKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uRm9jdXMoZXYsIG5hbWUpXHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKGV2LCBuYW1lKXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQmx1cihldiwgbmFtZSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgb25LZXlEb3duKGV2KXtcclxuICAgICAgICB0aGlzLnByb3BzLm9uS2V5RG93bihldilcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBUZXh0QXJlYUNvbXBvbmVudFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgbGV0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gPFRleHRBcmVhQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IG9uRm9jdXM9e3RoaXMub25Gb2N1c30gb25CbHVyPXt0aGlzLm9uQmx1cn0gb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9Lz5cclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsdWUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS52YWx1ZSB8fCBcIlwiXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wczpUZXh0QXJlYVByb3BzID0ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLFxyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgcmVzaXplYWJsZTogZmFsc2UsXHJcbiAgICAgICAgZmxleDogZmFsc2UsXHJcbiAgICAgICAgYXV0b3NpemU6IGZhbHNlLFxyXG4gICAgICAgIHJvd3M6IDMsXHJcbiAgICAgICAgdmFsdWU6IFwiXCIsXHJcbiAgICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgICAgbWF4TGVuZ3RoOiBudWxsLFxyXG4gICAgICAgIGNsYXNzTmFtZTogbnVsbCxcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICBvbkZvY3VzOiBOT09QLFxyXG4gICAgICAgIG9uQmx1cjogTk9PUCxcclxuICAgICAgICBvbktleURvd246IE5PT1BcclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXQgQWxsUHJldmlld3MoKXtcclxuICAgICAgICByZXR1cm4gQWxsUHJldmlld3MgfHwgKCgpID0+IHtcclxuICAgICAgICAgICAgQWxsUHJldmlld3MgPSBbXVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcImFwaS1wcmV2aWV3LXRleHRhcmVhXCJcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG51bGxcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICByZXNpemVhYmxlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICByZXNpemVhYmxlOiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBmbGV4OiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBmbGV4OiB0cnVlXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBhdXRvc2l6ZTogZmFsc2VcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgYXV0b3NpemU6IHRydWVcclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIHJvd3M6IDNcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgcm93czogMlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICByb3dzOiAxXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiRXhhbXBsZSBlcnJvclwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IDEwMFxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlwiXHJcbiAgICAgICAgICAgIH1dKVxyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cy5wdXNoKFt7XHJcbiAgICAgICAgICAgICAgICBpbnB1dENsYXNzTmFtZTogXCJcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgQWxsUHJldmlld3MucHVzaChbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctdGV4dGFyZWFcIlxyXG4gICAgICAgICAgICB9XSlcclxuICAgICAgICAgICAgcmV0dXJuIEFsbFByZXZpZXdzXHJcbiAgICAgICAgfSkoKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBoZWxwID0ge1xyXG4gICAgICAgIHdhcm46IFwiVGhpcyBzaG91bGQgYmUgdXNlZCBmb3IgbXVsdGkgbGluZSBpbnB1dHMuXCJcclxuICAgIH1cclxufVxyXG5sZXQgQWxsUHJldmlld3MiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCJcclxuaW1wb3J0IE5PT1AgZnJvbSBcIi4uLy4uL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vLi4vbW9kdWxlcy9VdGlsc1wiXHJcblxyXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xyXG4gICAgbmFtZT86IHN0cmluZyxcclxuICAgIHNpemU/OiBcImRlZmF1bHRcInxcIm1pbmlcIlxyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuLFxyXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXHJcbiAgICB2YWx1ZT86IHN0cmluZyxcclxuICAgIGVycm9yPzogc3RyaW5nLFxyXG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyLFxyXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nLFxyXG4gICAgaW5wdXRDbGFzc05hbWU/OiBzdHJpbmdcclxuICAgIGlkPzogc3RyaW5nLFxyXG4gICAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpbnB1dDogVGV4dElucHV0KSA9PiB2b2lkLFxyXG4gICAgb25Gb2N1cz86IChldiwgbmFtZTogc3RyaW5nLCBpbnB1dDogVGV4dElucHV0KSA9PiB2b2lkLFxyXG4gICAgb25CbHVyPzogKGV2LCBuYW1lOiBzdHJpbmcsIGlucHV0OiBUZXh0SW5wdXQpID0+IHZvaWRcclxufVxyXG5cclxubGV0IFRleHRJbnB1dE1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dElucHV0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxUZXh0SW5wdXRQcm9wcywge3ZhbHVlOiBzdHJpbmd9PiB7XHJcbiAgICBoYXNTZXQ6IGJvb2xlYW5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBUZXh0SW5wdXRQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICB0aGlzLm9uRm9jdXMgPSB0aGlzLm9uRm9jdXMuYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMub25CbHVyID0gdGhpcy5vbkJsdXIuYmluZCh0aGlzKVxyXG5cclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogcHJvcHMudmFsdWUgfHwgXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOlRleHRJbnB1dFByb3BzID0ge1xyXG4gICAgICAgIG5hbWU6IFwiXCIsXHJcbiAgICAgICAgc2l6ZTogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxyXG4gICAgICAgIHZhbHVlOiBcIlwiLFxyXG4gICAgICAgIGVycm9yOiBudWxsLFxyXG4gICAgICAgIG1heExlbmd0aDogOTk5LFxyXG4gICAgICAgIGNsYXNzTmFtZTogXCJcIixcclxuICAgICAgICBpbnB1dENsYXNzTmFtZTogXCJcIixcclxuICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICBvbkNoYW5nZTogTk9PUCxcclxuICAgICAgICBvbkZvY3VzOiBOT09QLFxyXG4gICAgICAgIG9uQmx1cjogTk9PUFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFRleHRJbnB1dE1vZHVsZXMgfHwgKFRleHRJbnB1dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIFdlYnBhY2tMb2FkZXIuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVGV4dElucHV0XCIpLmRlZmF1bHRcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlLCBuYW1lKXtcclxuICAgICAgICB0aGlzLmhhc1NldCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh2YWx1ZSwgbmFtZSwgdGhpcylcclxuICAgICAgICBpZih0aGlzLmhhc1NldClyZXR1cm4gLy8gcHJldmVudCBldmVudCBpZiB0aGUgb25DaGFuZ2UgaGFzIGNoYW5nZWQgdGhlIHZhbHVlLlxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cyhldiwgbmFtZSl7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkZvY3VzKGV2LCBuYW1lLCB0aGlzKVxyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cihldiwgbmFtZSl7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5vbkJsdXIoZXYsIG5hbWUsIHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgVGV4dEFyZWFDb21wb25lbnRcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGxldCBwcm9wcyA9IHRoaXMucHJvcHNcclxuICAgICAgICByZXR1cm4gPFRleHRBcmVhQ29tcG9uZW50IHsuLi5wcm9wc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IG9uRm9jdXM9e3RoaXMub25Gb2N1c30gb25CbHVyPXt0aGlzLm9uQmx1cn0gdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9IC8+XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhbHVlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUudmFsdWUgfHwgXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKHZhbHVlOnN0cmluZyl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgdGhpcy5oYXNTZXQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBBbGxQcmV2aWV3cygpe1xyXG4gICAgICAgIHJldHVybiBBbGxQcmV2aWV3cyB8fCAoKCkgPT4ge1xyXG4gICAgICAgICAgICBBbGxQcmV2aWV3cyA9IFtdXHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLnB1c2goW3tcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiYXBpLXByZXZpZXctdGV4dGlucHV0XCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcImRlZmF1bHRcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1pbmlcIlxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogXCJFeGFtcGxlIGVycm9yXCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg6IDk5OVxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJcIlxyXG4gICAgICAgICAgICB9XSwgW3tcclxuICAgICAgICAgICAgICAgIGlucHV0Q2xhc3NOYW1lOiBcIlwiXHJcbiAgICAgICAgICAgIH1dLCBbe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBpLXByZXZpZXctdGV4dGlucHV0XCJcclxuICAgICAgICAgICAgfV0sIFt7XHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge31cclxuICAgICAgICAgICAgfV0pXHJcbiAgICAgICAgICAgIHJldHVybiBBbGxQcmV2aWV3c1xyXG4gICAgICAgIH0pKClcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaGVscCA9IHtcclxuICAgICAgICB3YXJuOiBcIlRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIHNpbmdsZSBsaW5lIGlucHV0cy5cIlxyXG4gICAgfVxyXG59XHJcbmxldCBBbGxQcmV2aWV3cyIsImltcG9ydCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi4vLi4vbW9kdWxlcy9XZWJwYWNrTG9hZGVyXCI7XHJcbmltcG9ydCBEaXNjb3JkVG9vbHMgZnJvbSBcIi4uLy4uL21vZHVsZXMvRGlzY29yZFRvb2xzXCI7XHJcbmltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIjtcclxuaW1wb3J0IHV1aWQgZnJvbSBcIi4uLy4uL21vZHVsZXMvdXVpZFwiO1xyXG5cclxuXHJcbnR5cGUgRXJyb3JDYXRjaGVyUHJvcHMgPSB7XHJcbiAgICBjaGlsZHJlbjogUmVhY3ROb2RlXHJcbn1cclxubGV0IEVycm9yQ2F0Y2hlck1vZHVsZXNcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JDYXRjaGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PEVycm9yQ2F0Y2hlclByb3BzLCB7ZXJyb3I6IGJvb2xlYW4sIGhhc1NlbnROb3RpZmljYXRpb246IGJvb2xlYW59PiB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczpFcnJvckNhdGNoZXJQcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZXJyb3I6IGZhbHNlLFxyXG4gICAgICAgICAgICBoYXNTZW50Tm90aWZpY2F0aW9uOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kdWxlcygpOmFueVtde1xyXG4gICAgICAgIHJldHVybiBFcnJvckNhdGNoZXJNb2R1bGVzIHx8IChFcnJvckNhdGNoZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLmVtcHR5U3RhdGVJbWFnZSAmJiBlLmVtcHR5U3RhdGUpXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICBkZWZhdWx0UHJvcHM6RXJyb3JDYXRjaGVyUHJvcHMgPSB7XHJcbiAgICAgICAgY2hpbGRyZW46IG51bGxcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgfWVsc2V7IC8vIHRyeSB0byByZW5kZXIgYSB1c2VyLWZyaWVuZGx5IGludGVyZmFjZS5cclxuICAgICAgICAgICAgY29uc3QgW1xyXG4gICAgICAgICAgICAgICAgZW1wdHlDbGFzc2VzXHJcbiAgICAgICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7IC8vIElmIHdlIGNhbid0LCByZW5kZXIgbm90aGluZyBhbmQgc2hvdyBhIG5vdGlmaWNhdGlvbi5cclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuaGFzU2VudE5vdGlmaWNhdGlvbilyZXR1cm4gbnVsbCAvLyBJZiB0aGUgbm90aWZpY2F0aW9uIHdhcyBhbHJlYWR5IHNlbnQsIGRvbid0IHNlbmQgb25lLlxyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gRGlzY29yZFRvb2xzLnNob3dOb3RpZmljYXRpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IFwiQW4gZXJyb3Igb2NjdXJlZC4gUGxlYXNlIGNoZWNrIHRoZSBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9ucy5cIixcclxuICAgICAgICAgICAgICAgICAgICBpY29uOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQucG5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogTk9PUCxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsb3NlOiBOT09QLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uU2hvdzogTk9PUCxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJMaWdodGNvcmQgSW5mb3JtYXRpb25zXCJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICBoYXNTZW50Tm90aWZpY2F0aW9uOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGV9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjIwcHhcIlxyXG4gICAgICAgICAgICAgICAgfX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVIZWFkZXJ9PkFuIGVycm9yIG9jY3VyZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGVTdWJ0ZXh0fT5cclxuICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLiBKb2luIG91ciDCrXN1cHBvcnQgc2VydmVyIGZvciBtb3JlIGhlbHAuXHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9ySW5mby5jb21wb25lbnRTdGFjaylcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZXJyb3I6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJveHlFcnJvckNhdGNoZXJDbGFzczxiYXNlID0gRnVuY3Rpb24+KENsYXNzOmJhc2UpOmJhc2UgJiB7XHJcbiAgICByZWFkb25seSBvcmlnaW5hbDogYmFzZVxyXG59e1xyXG4gICAgY29uc3QgQ2xhc3NDb3B5ID0gKGNsYXNzIFByb3hpZWQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICByZXR1cm4gPEVycm9yQ2F0Y2hlciBrZXk9e3V1aWQoKX0+XHJcbiAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChDbGFzcyBhcyBhbnksIHsuLi50aGlzLnByb3BzLCBrZXk6IHV1aWQoKX0pfVxyXG4gICAgICAgICAgICA8L0Vycm9yQ2F0Y2hlcj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZSA9IENsYXNzW1wiZGlzcGxheU5hbWVcIl0gfHwgQ2xhc3NbXCJuYW1lXCJdXHJcblxyXG4gICAgICAgIHN0YXRpYyBnZXQgb3JpZ2luYWwoKXtcclxuICAgICAgICAgICAgcmV0dXJuIENsYXNzXHJcbiAgICAgICAgfVxyXG4gICAgfSkgYXMgYW55XHJcbiAgICBPYmplY3QuZW50cmllcyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhDbGFzcykpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgIGlmKHZhbHVlWzBdIGluIENsYXNzQ29weSlyZXR1cm5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ2xhc3NDb3B5LCB2YWx1ZVswXSwgdmFsdWVbMV0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIENsYXNzQ29weVxyXG59IiwiaW1wb3J0IFdlYnBhY2tMb2FkZXIgZnJvbSBcIi4uLy4uL21vZHVsZXMvV2VicGFja0xvYWRlclwiXHJcbmltcG9ydCB7IG5vdGljZSwgbm90aWNlcywgZXZlbnRzIH0gZnJvbSBcIi4vTm90aWNlc1wiXHJcbmltcG9ydCBOT09QIGZyb20gXCIuLi8uLi9tb2R1bGVzL25vb3BcIlxyXG5cclxubGV0IE5vdGljZU1vZHVsZXNcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHROb3RpY2U6bm90aWNlID0ge1xyXG4gICAgdGV4dDogXCJcIixcclxuICAgIGlkOiBcInVua25vd24gaWRcIixcclxuICAgIG9uQ2xpY2s6IE5PT1AsXHJcbiAgICBidXR0b25UZXh0OiBudWxsLFxyXG4gICAgdHlwZTogXCJkZWZhdWx0XCJcclxufVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb3RpY2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8bm90aWNlPiB7XHJcbiAgICBzdGF0aWMgZGlzcGxheU5hbWUgPSBcIkxpZ2h0Y29yZE5vdGljZVwiXHJcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzOm5vdGljZSA9IGRlZmF1bHROb3RpY2VcclxuXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBOb3RpY2VNb2R1bGVzIHx8IChOb3RpY2VNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBXZWJwYWNrTG9hZGVyLmZpbmQoZSA9PiBlLm5vdGljZUluZm8pXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgW1xyXG4gICAgICAgICAgICBub3RpY2VDbGFzc2VzXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3RpY2VDbGFzc2VzW1wibm90aWNlXCIrdGhpcy5wcm9wcy50eXBlLnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkrdGhpcy5wcm9wcy50eXBlLnNsaWNlKDEpXVxyXG4gICAgICAgICAgICBcclxuICAgICAgICBpZighY2xhc3NOYW1lKXtcclxuICAgICAgICAgICAgbm90aWNlcy5wb3AoKVxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoXCJub3RpY2VVcGRhdGVcIilcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5wcm9wcy5idXR0b25UZXh0ID8gPGJ1dHRvbiBjbGFzc05hbWU9e25vdGljZUNsYXNzZXMuYnV0dG9ufSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgIG5vdGljZXMucG9wKClcclxuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKClcclxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoXCJub3RpY2VVcGRhdGVcIilcclxuICAgICAgICB9fT57dGhpcy5wcm9wcy5idXR0b25UZXh0fTwvYnV0dG9uPiA6IG51bGxcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtub3RpY2VDbGFzc2VzLmRpc21pc3N9IHJvbGU9XCJidXR0b25cIiB0YWJJbmRleD17MH0gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbm90aWNlcy5wb3AoKVxyXG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoXCJub3RpY2VVcGRhdGVcIilcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMudGV4dH1cclxuICAgICAgICAgICAge2J1dHRvbn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBOb3RpY2UgZnJvbSBcIi4vTm90aWNlXCJcclxuaW1wb3J0IHV1aWQgZnJvbSBcIi4uLy4uL21vZHVsZXMvdXVpZFwiXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm90aWNlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7Y29udGFpbmVyOiBhbnl9PiB7XHJcbiAgICBzdGF0aWMgZGlzcGxheU5hbWUgPSBcIkxpZ2h0Y29yZE5vdGljZXNcIlxyXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogUmVhZG9ubHk8eyBjb250YWluZXI6IGFueSB9Pil7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMubm90aWNlSGFuZGxlciA9IHRoaXMubm90aWNlSGFuZGxlci5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgbm90aWNlSGFuZGxlcigpe1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxNb3VudCgpe1xyXG4gICAgICAgIGV2ZW50cy5vbihcIm5vdGljZVVwZGF0ZVwiLCB0aGlzLm5vdGljZUhhbmRsZXIpXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgICAgICBldmVudHMub2ZmKFwibm90aWNlVXBkYXRlXCIsIHRoaXMubm90aWNlSGFuZGxlcilcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighdGhpcy5oYXNOb3RpY2UpcmV0dXJuIG51bGxcclxuICAgICAgICBjb25zdCBub3RpY2UgPSBub3RpY2VzWzBdXHJcbiAgICAgICAgcmV0dXJuIDxOb3RpY2Ugey4uLm5vdGljZX0+PC9Ob3RpY2U+XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc05vdGljZSgpe1xyXG4gICAgICAgIHJldHVybiBub3RpY2VzLmxlbmd0aCA+IDBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IG5vdGljZXM6bm90aWNlW10gPSBbXVxyXG5cclxuZXhwb3J0IHR5cGUgbm90aWNlV2l0aG91dElEID0ge1xyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgYnV0dG9uVGV4dD86IHN0cmluZyxcclxuICAgIG9uQ2xpY2s/OiAoKSA9PiB2b2lkLFxyXG4gICAgdHlwZTogXCJkZWZhdWx0XCJ8XCJpbmZvXCJ8XCJzdWNjZXNzXCJ8XCJkYW5nZXJcInxcInN0cmVhbWVyTW9kZVwifFwiZG93bmxvYWRcInxcIm5vdGlmaWNhdGlvblwifFwicHJlbWl1bVwifFwicmljaFByZXNlbmNlXCJ8XCJwcmVtaXVtVGllcjFcInxcInByZW1pdW1UaWVyMlwifFwiZmFjZWJvb2tcInxcImJyYW5kXCJ8XCJzdXJ2ZXlcInxcInNwb3RpZnlcIlxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBub3RpY2UgPSB7XHJcbiAgICBpZDogc3RyaW5nXHJcbn0gJiBub3RpY2VXaXRob3V0SUQiLCJpbXBvcnQgV2VicGFja0xvYWRlciBmcm9tIFwiLi9tb2R1bGVzL1dlYnBhY2tMb2FkZXJcIlxyXG5pbXBvcnQgQ29tcG9uZW50cyBmcm9tIFwiLi9jb21wb25lbnRzL2NvbXBvbmVudHNcIlxyXG5pbXBvcnQgdXVpZCBmcm9tIFwiLi9tb2R1bGVzL3V1aWRcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy9VdGlsc1wiXHJcbmltcG9ydCBEaXNjb3JkVG9vbHMgZnJvbSBcIi4vbW9kdWxlcy9EaXNjb3JkVG9vbHNcIlxyXG5pbXBvcnQgKiBhcyBwYXRjaGVycyBmcm9tIFwiLi9tb2R1bGVzL3BhdGNoZXJzXCJcclxuaW1wb3J0IGV4Y2x1ZGVQcm9wZXJ0aWVzIGZyb20gXCIuL21vZHVsZXMvZXhjbHVkZVByb3BlcnRpZXNcIlxyXG5pbXBvcnQgY2xvbmVOdWxsUHJvdG8gZnJvbSBcIi4vbW9kdWxlcy9jbG9uZU51bGxQcm90b1wiXHJcbmltcG9ydCBOT09QIGZyb20gXCIuL21vZHVsZXMvbm9vcFwiXHJcbmltcG9ydCB1bmZyZWV6ZSBmcm9tIFwiLi9tb2R1bGVzL1VuZnJlZXplXCJcclxuaW1wb3J0IHsgaXNOYXRpdmUsIGlzSW1wb3J0ZWQgfSBmcm9tIFwiLi9tb2R1bGVzL2Vudmlyb25uZW1lbnRcIlxyXG5pbXBvcnQgKiBhcyBiYW5kYWdlZGJkQXBpIGZyb20gXCJAYmFuZGFnZWRiZC9iZGFwaVwiXHJcbnBhdGNoZXJzLnBhdGNoKClcclxuXHJcbmNvbnN0IExpZ2h0Y29yZEFwaSA9IHtcclxuICAgIFdlYnBhY2tMb2FkZXI6IFdlYnBhY2tMb2FkZXIsXHJcbiAgICBDb21wb25lbnRzOiBDb21wb25lbnRzLFxyXG4gICAgdXVpZDogdXVpZCxcclxuICAgIFV0aWxzOiBVdGlscyxcclxuICAgIERpc2NvcmRUb29sczogRGlzY29yZFRvb2xzLFxyXG4gICAgXzoge1xyXG4gICAgICAgIGV4Y2x1ZGVQcm9wZXJ0aWVzOiBleGNsdWRlUHJvcGVydGllcyxcclxuICAgICAgICBjbG9uZU51bGxQcm90bzogY2xvbmVOdWxsUHJvdG8sXHJcbiAgICAgICAgTk9PUDogTk9PUCxcclxuICAgICAgICB1bmZyZWV6ZTogdW5mcmVlemVcclxuICAgIH0sXHJcbiAgICBnZXQgaXNOYXRpdmUoKXtyZXR1cm4gaXNOYXRpdmV9LFxyXG4gICAgZ2V0IGlzSW1wb3J0ZWQoKXtyZXR1cm4gaXNJbXBvcnRlZH1cclxufVxyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gICAgdmFyIFJlYWN0OnR5cGVvZiBpbXBvcnQoXCJyZWFjdFwiKVxyXG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogTGlnaHRjb3JkIGlzIG9ubHkgYXZhaWxsYWlibGUgaW4gTGlnaHRjb3JkIChuYXRpdmUpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgTGlnaHRjb3JkOiBMaWdodGNvcmRHbG9iYWwsXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQkRNb2R1bGVzIGlzIG9ubHkgYXZhaWxsYWlibGUgaW4gTGlnaHRjb3JkIChuYXRpdmUpXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgQkRNb2R1bGVzOiB7XHJcbiAgICAgICAgICAgIG1vZHVsZXM6YW55W10sXHJcbiAgICAgICAgICAgIGdldChmaWx0ZXI6KG1vZDphbnkpPT5ib29sZWFuLCBtb2R1bGVzPzphbnlbXSk6YW55W10sXHJcbiAgICAgICAgICAgIGdldChpZDpudW1iZXIsIG1vZHVsZXM/OmFueVtdKTphbnksXHJcbiAgICAgICAgICAgIGdldChpZHM6IFtudW1iZXJ8KChtb2Q6YW55KT0+Ym9vbGVhbildLCBtb2R1bGVzPzphbnlbXSk6YW55XHJcbiAgICAgICAgfSxcclxuICAgICAgICBCZEFwaTogdHlwZW9mIGJhbmRhZ2VkYmRBcGkuQmRBcGksXHJcbiAgICAgICAgRURBcGk6IHR5cGVvZiBiYW5kYWdlZGJkQXBpLkJkQXBpXHJcbiAgICB9XHJcbiAgICB2YXIgTGlnaHRjb3JkOkxpZ2h0Y29yZEdsb2JhbFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMaWdodGNvcmRBcGlcclxuXHJcbk9iamVjdC5hc3NpZ24od2luZG93LkxpZ2h0Y29yZC5BcGksIExpZ2h0Y29yZEFwaSlcclxuXHJcbi8qKlxyXG4gKiBUaGUgbWFpbiBMaWdodGNvcmQgZXhwb3J0cy4gQ2FuIGJlIGFjY2Vzc2VkIHdpdGggYHdpbmRvdy5MaWdodGNvcmRgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpZ2h0Y29yZEdsb2JhbCB7XHJcbiAgICBEaXNjb3JkTW9kdWxlczoge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEludGVybmFsIERpc2NvcmQncyBkaXNwYXRjaGVyIC0gY2FuIGJlIHVzZWQgdG8gc3Vic2NyaWJlIHRvIGdhdGV3YXkgZXZlbnRzIC8gY2xpZW50IGV2ZW50cy5cclxuICAgICAgICAgKi9cclxuICAgICAgICBkaXNwYXRjaGVyOiBpbXBvcnQoXCIuL3R5cGVzL0Rpc2NvcmREaXNwYXRjaGVyVHlwZXNcIikuZGVmYXVsdCxcclxuICAgICAgICBjb25zdGFudHM6IGltcG9ydChcIi4vdHlwZXMvRGlzY29yZENvbnN0YW50c1R5cGVzXCIpLmRlZmF1bHRcclxuICAgIH0sXHJcbiAgICBTZXR0aW5nczoge1xyXG4gICAgICAgIGRldk1vZGU6IGJvb2xlYW4sXHJcbiAgICAgICAgY2FsbFJpbmdpbmdCZWF0OiBib29sZWFuXHJcbiAgICB9LFxyXG4gICAgQXBpOiBMaWdodGNvcmRBcGlHbG9iYWwsXHJcbiAgICBCZXR0ZXJEaXNjb3JkOiB7XHJcbiAgICAgICAgQmRBcGk6IHR5cGVvZiBiYW5kYWdlZGJkQXBpLkJkQXBpLFxyXG4gICAgICAgIFttb2Q6c3RyaW5nXTphbnlcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBtYWluIEFwaS4gQ2FuIGJlIGFjY2Vzc2VkIHdpdGggYHdpbmRvdy5MaWdodGNvcmQuQXBpYFxyXG4gKi9cclxudHlwZSBMaWdodGNvcmRBcGlHbG9iYWwgPSBsaWdodGNvcmRBcGlNYWluRXhwb3J0cyAmIHR5cGVvZiBMaWdodGNvcmRBcGlcclxuXHJcbnR5cGUgbGlnaHRjb3JkQXBpTWFpbkV4cG9ydHMgPSB7XHJcbiAgICAvKipcclxuICAgICAqIFdhaXRzIHVudGlsIHRoZSBmaXJzdCBtb2R1bGUgdGhhdCBtYXRjaCB0aGUgZmlsdGVyIGdldHMgZXhwb3J0ZWRcclxuICAgICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0aGF0IHNwZWNpZmllcyB0aGUgbW9kdWxlIHRvIG1hdGNoLlxyXG4gICAgICovXHJcbiAgICBlbnN1cmVFeHBvcnRlZChmaWx0ZXI6IChtb2Q6YW55KSA9PiBib29sZWFuKTpQcm9taXNlPGFueT4sXHJcbiAgICAvKipcclxuICAgICAqIFJlY3JlYXRlIHRoZSBvYmplY3Qgd2l0aG91dCB0aGUgYF9fcHJvdG9fX2AgYW5kIGBwcm90b3R5cGVgIHByb3BlcnRpZXMgLSB1c2VmdWxsIGZvciBiZXR0ZXIgZm9ybWF0dGluZyBpbiBjb25zb2xlLlxyXG4gICAgICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHJlY3JlYXRlXHJcbiAgICAgKi9cclxuICAgIGNsb25lTnVsbFByb3RvPE9iaiA9IGFueT4ob2JqOk9iaik6T2JqXHJcbn0iLCJsZXQgcmVxXHJcbnNldFJlcSgpXHJcbmZ1bmN0aW9uIGZpbHRlckRhbmdlcm91cyhtb2RzKXtcclxuICAgIHJldHVybiBtb2RzLm1hcChlID0+IHtcclxuICAgICAgICByZXR1cm4gcHJvdGVjdChlKVxyXG4gICAgfSlcclxufVxyXG5mdW5jdGlvbiBwcm90ZWN0KGV4cG9ydHMpe1xyXG4gICAgbGV0IHRoZU1vZHVsZSA9IGV4cG9ydHMuZXhwb3J0c1xyXG4gICAgbGV0IG1vZCA9IHRoZU1vZHVsZS5kZWZhdWx0XHJcbiAgICBpZighbW9kKXJldHVybiBleHBvcnRzXHJcbiAgICBpZiAobW9kLnJlbW92ZSAmJiBtb2Quc2V0ICYmIG1vZC5jbGVhciAmJiBtb2QuZ2V0ICYmICFtb2Quc29ydCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiBleHBvcnRzXHJcblxyXG4gICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHkobW9kLCB7XHJcbiAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiZ2V0VG9rZW5cIiB8fCBwcm9wID09PSBcImdldEVtYWlsXCIgfHwgcHJvcCA9PT0gXCJzaG93VG9rZW5cIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBmdW5jKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0VG9rZW5cIiAmJiBvYmouZ2V0VG9rZW4pIHJldHVybiAoKSA9PiBcIm1mYS5YQ25iS3pvMENMSXFkSnpCbkwwRDhQZkRydXFrSk5IandIWHRyMzlVVTNGOGhIeDQzam9qSVN5aTVqZGpPNTJlOV9lOU1qbWFmWkZGcGMtc2VPTWFcIjtcclxuICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRFbWFpbFwiICYmIG9iai5nZXRFbWFpbCkgcmV0dXJuICgpID0+IFwicHVwcGV0MTExMTJAZ21haWwuY29tXCI7XHJcbiAgICAgICAgICAgIGlmIChmdW5jID09IFwic2hvd1Rva2VuXCIgJiYgb2JqLnNob3dUb2tlbikgcmV0dXJuICgpID0+IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmdW5jID09IFwiX19wcm90b19fXCIgJiYgb2JqLl9fcHJvdG9fXykgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIG9ialtmdW5jXTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZXhwb3J0cywge2V4cG9ydHM6IE9iamVjdC5hc3NpZ24oe30sIHRoZU1vZHVsZSwge2RlZmF1bHQ6IHByb3h5fSl9KVxyXG59XHJcblxyXG5jbGFzcyBXZWJwYWNrbG9hZGVyIHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgaWYocmVxKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlckRhbmdlcm91cyhPYmplY3QudmFsdWVzKHJlcS5jKS5maWx0ZXIoKGU6YW55KSA9PiBlICYmIGUuZXhwb3J0cykpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHNldFJlcSgpXHJcbiAgICAgICAgICAgIGlmKHJlcSl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyRGFuZ2Vyb3VzKE9iamVjdC52YWx1ZXMocmVxLmMpLmZpbHRlcigoZTphbnkpID0+IGUgJiYgZS5leHBvcnRzKSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldChpZHMsIG1vZHVsZXMpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBpZHMgPT09IFwiZnVuY3Rpb25cIil7XHJcbiAgICAgICAgICAgIHJldHVybiAobW9kdWxlcyB8fCB0aGlzLm1vZHVsZXMpLm1hcCgobWRsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihtZGwgJiYgdHlwZW9mIG1kbC5leHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWRsLmV4cG9ydHNcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmZpbHRlcihlID0+IGUpLmZpbHRlcihpZHMpXHJcbiAgICAgICAgfWVsc2UgaWYoQXJyYXkuaXNBcnJheShpZHMpKXtcclxuICAgICAgICAgICAgbW9kdWxlcyA9IG1vZHVsZXMgfHwgdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgICAgIHJldHVybiBpZHMubWFwKGlkID0+IHRoaXMuZ2V0KGlkLCBtb2R1bGVzKSlcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbW9kdWxlcyA9IG1vZHVsZXMgfHwgdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgICAgIGxldCBtb2R1bGUgPSBtb2R1bGVzLmZpbHRlcihlID0+ICEhZSkuZmluZChlID0+IGUuaSA9PT0gaWRzKVxyXG4gICAgICAgICAgICBpZighbW9kdWxlKXJldHVybiB1bmRlZmluZWRcclxuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IGRlZmF1bHQoKXtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgV2VicGFja2xvYWRlcigpXHJcblxyXG5mdW5jdGlvbiBzZXRSZXEoKXtcclxuICAgIHRyeXtcclxuICAgICAgICByZXEgPSB3aW5kb3dbXCJ3ZWJwYWNrSnNvbnBcIl0ucHVzaChbW10sIHtfX2V4dHJhX2lkX186IChtZGwsIGV4cG9ydHMsIHJlcSkgPT4gbWRsLmV4cG9ydHMgPSByZXF9LCBbW1wiX19leHRyYV9pZF9fXCJdXV0pO1xyXG4gICAgICAgIGlmKHJlcSl7XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbiAgICAgICAgfVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJlcSA9IHVuZGVmaW5lZFxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgbm90aWNlcywgbm90aWNlV2l0aG91dElELCBub3RpY2UsIGV2ZW50cyBhcyBub3RpY2VFdmVudHMgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9wcml2YXRlL05vdGljZXNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL1V0aWxzXCI7XHJcbmltcG9ydCB1dWlkIGZyb20gXCIuL3V1aWRcIjtcclxuaW1wb3J0IGNsb25lTnVsbFByb3RvIGZyb20gXCIuL2Nsb25lTnVsbFByb3RvXCI7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJldmVudHNcIjtcclxuaW1wb3J0IHsgZGVmYXVsdE5vdGljZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL3ByaXZhdGUvTm90aWNlXCI7XHJcbmltcG9ydCBleGNsdWRlUHJvcGVydGllcyBmcm9tIFwiLi9leGNsdWRlUHJvcGVydGllc1wiO1xyXG5pbXBvcnQgTk9PUCBmcm9tIFwiLi9ub29wXCI7XHJcbmltcG9ydCBXZWJwYWNrTG9hZGVyLCB7IFdlYnBhY2tMb2FkZXJFcnJvciB9IGZyb20gXCIuL1dlYnBhY2tMb2FkZXJcIjtcclxuXHJcbmxldCBzb3VuZE1vZHVsZVxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzY29yZFRvb2xzIHtcclxuICAgIHNob3dOb3RpY2UoZGF0YTpOb3RpY2VEYXRhKTpOb3RpY2V7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGRhdGEudGV4dCAhPT0gXCJzdHJpbmdcIil0aHJvdyBuZXcgRXJyb3IoYFRoaXMgbm90aWNlIGlzIG5vdCB2YWxpZC4gR2l2ZW46ICR7VXRpbHMuZm9ybWF0SlNPYmplY3QoZGF0YSl9YClcclxuICAgICAgICBsZXQgbmV3RGF0YSA9IGNsb25lTnVsbFByb3RvKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHROb3RpY2UsIGRhdGEpKSBhcyBub3RpY2VcclxuICAgICAgICBuZXdEYXRhLmlkID0gdXVpZCgpXHJcbiAgICAgICAgbm90aWNlcy5wdXNoKG5ld0RhdGEpXHJcbiAgICAgICAgbm90aWNlRXZlbnRzLmVtaXQoXCJub3RpY2VVcGRhdGVcIilcclxuICAgICAgICBjb25zdCBub3RpY2UgPSBuZXcgTm90aWNlKG5ld0RhdGEpXHJcbiAgICAgICAgcmV0dXJuIG5vdGljZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBub3RpY2VzKCk6Tm90aWNlW117XHJcbiAgICAgICAgcmV0dXJuIG5vdGljZXMubWFwKGRhdGEgPT4gbmV3IE5vdGljZShkYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFF1aWNrbHkgc2VuZCBub3RpZmljYXRpb24gKEV2ZW4gd2hlbiBubyBmb2N1c2VkLilcclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBub3RpZmljYXRpb24uIEJlIHN1cmUgdG8gaW5jbHVkZSBhbGwgcHJvcGVydGllcyBleGNlcHQgZnVuY3Rpb25zIGNhdXNlIHRoZXkncmUgb3B0aW9uYWwuXHJcbiAgICAgKiBOb3RpZmljYXRpb25zIGhhdmUgYSB0aW1lb3V0IG9mIDMtNSBzZWNvbmRzLlxyXG4gICAgICogVGhleSBsb29rIGxpa2UgdGhpczogaHR0cHM6Ly9pLmltZ3VyLmNvbS9qenV4S0t1LnBuZ1xyXG4gICAgICovXHJcbiAgICBzaG93Tm90aWZpY2F0aW9uKGRhdGE6Tm90aWZpY2F0aW9uRGF0YSk6Tm90aWZpY2F0aW9ue1xyXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IG5ldyB3aW5kb3cuTm90aWZpY2F0aW9uKGRhdGEudGl0bGUsIGV4Y2x1ZGVQcm9wZXJ0aWVzKGRhdGEsIFtcclxuICAgICAgICAgICAgXCJ0aXRsZVwiLFxyXG4gICAgICAgICAgICBcIm9uQ2xpY2tcIixcclxuICAgICAgICAgICAgXCJvbkNsb3NlXCIsXHJcbiAgICAgICAgICAgIFwib25TaG93XCJcclxuICAgICAgICBdKSlcclxuICAgICAgICBub3RpZmljYXRpb24ub25jbGljayA9IGRhdGEub25DbGljayB8fCBOT09QXHJcbiAgICAgICAgbm90aWZpY2F0aW9uLm9uc2hvdyA9IGRhdGEub25TaG93IHx8IE5PT1BcclxuICAgICAgICBub3RpZmljYXRpb24ub25jbG9zZSA9IGRhdGEub25DbG9zZSB8fCBOT09QXHJcbiAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvblxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNvdW5kKHNvdW5kOlNvdW5kKXtcclxuICAgICAgICBzb3VuZE1vZHVsZSA9IHNvdW5kTW9kdWxlIHx8IFdlYnBhY2tMb2FkZXIuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJjcmVhdGVTb3VuZFwiXSlcclxuICAgICAgICBpZighc291bmRNb2R1bGUpdGhyb3cgbmV3IFdlYnBhY2tMb2FkZXJFcnJvcihcIkNvdWxkbid0IGZpbmQgc291bmRNb2R1bGUgaGVyZS5cIilcclxuICAgICAgICBjb25zdCBjcmVhdGVkID0gc291bmRNb2R1bGUuY3JlYXRlU291bmQoc291bmQpXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRcclxuICAgIH1cclxuXHJcbiAgICBwbGF5U291bmQoc291bmQ6U291bmQpe1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZVNvdW5kKHNvdW5kKVxyXG4gICAgICAgIGNyZWF0ZWQucGxheSgpXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU291bmQgPSBcImNhbGxfY2FsbGluZ1wifFwiY2FsbF9yaW5naW5nXCJ8XCJjYWxsX3JpbmdpbmdfYmVhdFwifFwiZGRyLWRvd25cInxcImRkci1sZWZ0XCJ8XCJkZHItcmlnaHRcInxcImRkci11cFwifFwiZGVhZmVuXCJ8XCJkaXNjb2RvXCJ8XCJkaXNjb25uZWN0XCJ8XCJodW1hbl9tYW5cInxcIm1lbnRpb24xXCJ8XCJtZW50aW9uMlwifFwibWVudGlvbjNcInxcIm1lc3NhZ2UxXCJ8XCJtZXNzYWdlMlwifFwibWVzc2FnZTNcInxcIm11dGVcInxcIm92ZXJsYXl1bmxvY2tcInxcInB0dF9zdGFydFwifFwicHR0X3N0b3BcInxcInJlY29ubmVjdFwifFwicm9ib3RfbWFuXCJ8XCJzdHJlYW1fZW5kZWRcInxcInN0cmVhbV9zdGFydGVkXCJ8XCJzdHJlYW1fdXNlcl9qb2luZWRcInxcInN0cmVhbV91c2VyX2xlZnRcInxcInVuZGVhZmVuXCJ8XCJ1bm11dGVcInxcInVzZXJfam9pblwifFwidXNlcl9sZWF2ZVwifFwidXNlcl9tb3ZlZFwiXHJcblxyXG5leHBvcnQgdHlwZSBOb3RpZmljYXRpb25EYXRhID0ge1xyXG4gICAgdGl0bGU6IHN0cmluZyxcclxuICAgIGJvZHk6IHN0cmluZyxcclxuICAgIGljb246IHN0cmluZyxcclxuICAgIG9uU2hvdz86ICgpID0+IHZvaWQsXHJcbiAgICBvbkNsaWNrPzogKCkgPT4gdm9pZCxcclxuICAgIG9uQ2xvc2U/OiAoKSA9PiB2b2lkXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5vdGljZURhdGEgPSBub3RpY2VXaXRob3V0SURcclxuXHJcbmNvbnN0IEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uKCl7XHJcbiAgICBpZih0aGlzLnJlbW92ZWQgIT09IHRoaXMuc3RhdGUucmVtb3ZlZCl7XHJcbiAgICAgICAgaWYodGhpcy5yZW1vdmVkKXtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwicmVtb3ZlZFwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRoaXMuc2hvd2luZyAhPT0gdGhpcy5zdGF0ZS5zaG93aW5nKXtcclxuICAgICAgICBpZih0aGlzLnNob3dpbmcpe1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzaG93aW5nXCIsIHRydWUpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcInNob3dpbmdcIiwgZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pbmRleCAhPT0gdGhpcy5zdGF0ZS5pbmRleCl7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwiaW5kZXhcIiwgdGhpcy5pbmRleClcclxuICAgIH1cclxufVxyXG5cclxuLyoqIEEgbm90aWNlIGludGVyZmFjZSBmb3IgbW9kaWZ5aW5nIGl0IGFuZCBzdWJzY3JpYmluZyB0byBldmVudHMuICovXHJcbmV4cG9ydCBjbGFzcyBOb3RpY2UgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IoZGF0YSl7XHJcbiAgICAgICAgc3VwZXIoKVxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGFcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgcmVtb3ZlZDogdGhpcy5yZW1vdmVkLFxyXG4gICAgICAgICAgICBzaG93aW5nOiB0aGlzLnNob3dpbmcsXHJcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZXZlbnRGdW5jID0gRXZlbnRIYW5kbGVyLmJpbmQodGhpcylcclxuICAgICAgICBub3RpY2VFdmVudHMub24oXCJub3RpY2VVcGRhdGVcIiwgZXZlbnRGdW5jKVxyXG4gICAgICAgIHRoaXMub24oXCJyZW1vdmVkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgbm90aWNlRXZlbnRzLm9mZihcIm5vdGljZVVwZGF0ZVwiLCBldmVudEZ1bmMpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW0gdGhlIG5vdGljZSBpcyByZW1vdmVkLlxyXG4gICAgICovXHJcbiAgICBvbihldmVudDogXCJyZW1vdmVkXCIsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTp0aGlzXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5vdGljZSBpcyB2aXNpYmxlIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgb24oZXZlbnQ6IFwic2hvd2luZ1wiLCBsaXN0ZW5lcjogKGlzU2hvd2luZzpib29sZWFuKSA9PiB2b2lkKTp0aGlzXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5vdGljZSBxdWV1ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBvbihldmVudDogXCJpbmRleFwiLCBsaXN0ZW5lcjogKGluZGV4Om51bWJlcikgPT4gdm9pZCk6dGhpc1xyXG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOmFueVtdKSA9PiB2b2lkKXtcclxuICAgICAgICByZXR1cm4gc3VwZXIub24oZXZlbnQsIGxpc3RlbmVyKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2lsbCBiZSBjYWxsZWQgd2hlbSB0aGUgbm90aWNlIGlzIHJlbW92ZWQuXHJcbiAgICAgKi9cclxuICAgIG9uY2UoZXZlbnQ6IFwicmVtb3ZlZFwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6dGhpc1xyXG4gICAgLyoqXHJcbiAgICAgKiBXaWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBub3RpY2UgaXMgdmlzaWJsZSBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIG9uY2UoZXZlbnQ6IFwic2hvd2luZ1wiLCBsaXN0ZW5lcjogKGlzU2hvd2luZzpib29sZWFuKSA9PiB2b2lkKTp0aGlzXHJcbiAgICAvKipcclxuICAgICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIG5vdGljZSBxdWV1ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBvbmNlKGV2ZW50OiBcImluZGV4XCIsIGxpc3RlbmVyOiAoaW5kZXg6bnVtYmVyKSA9PiB2b2lkKTp0aGlzXHJcbiAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczphbnlbXSkgPT4gdm9pZCl7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLm9uY2UoZXZlbnQsIGxpc3RlbmVyKVxyXG4gICAgfVxyXG5cclxuICAgIG9mZihldmVudDogXCJyZW1vdmVkXCIsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTp0aGlzXHJcbiAgICBvZmYoZXZlbnQ6IFwic2hvd2luZ1wiLCBsaXN0ZW5lcjogKGlzU2hvd2luZzpib29sZWFuKSA9PiB2b2lkKTp0aGlzXHJcbiAgICBvZmYoZXZlbnQ6IFwiaW5kZXhcIiwgbGlzdGVuZXI6IChpbmRleDpudW1iZXIpID0+IHZvaWQpOnRoaXNcclxuICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6YW55W10pID0+IHZvaWQpe1xyXG4gICAgICAgIHJldHVybiBzdXBlci5vZmYoZXZlbnQsIGxpc3RlbmVyKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRlOntcclxuICAgICAgICByZW1vdmVkOmJvb2xlYW4sXHJcbiAgICAgICAgc2hvd2luZzpib29sZWFuLFxyXG4gICAgICAgIGluZGV4Om51bWJlclxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFRpY2tSZWZyZXNoOmJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICAgIGdldCByZW1vdmVkKCk6Ym9vbGVhbntcclxuICAgICAgICByZXR1cm4gIW5vdGljZXMuZmluZChlID0+IGUuaWQgPT09IHRoaXMuaWQpXHJcbiAgICB9XHJcbiAgICBnZXQgc2hvd2luZygpOmJvb2xlYW57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDBcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5kZXgoKTpudW1iZXJ7XHJcbiAgICAgICAgcmV0dXJuIG5vdGljZXMuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gdGhpcy5pZClcclxuICAgIH1cclxuICAgIGdldCBpZCgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuaWRcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoZGF0YTogUGFydGlhbDxub3RpY2U+KXtcclxuICAgICAgICBmb3IobGV0IGtleSBpbiBkYXRhKXtcclxuICAgICAgICAgICAgaWYoa2V5ID09PSBcImlkXCIpY29udGludWVcclxuICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBkYXRhW2tleV1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCF0aGlzLm5leHRUaWNrUmVmcmVzaCl7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dFRpY2tSZWZyZXNoID0gdHJ1ZVxyXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dFRpY2tSZWZyZXNoID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIG5vdGljZUV2ZW50cy5lbWl0KFwibm90aWNlVXBkYXRlXCIpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0ZXh0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS50ZXh0XHJcbiAgICB9XHJcbiAgICBzZXQgdGV4dCh0ZXh0KXtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh7XHJcbiAgICAgICAgICAgIHRleHRcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS50eXBlXHJcbiAgICB9XHJcbiAgICBzZXQgdHlwZSh0eXBlKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh7XHJcbiAgICAgICAgICAgIHR5cGVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b25UZXh0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5idXR0b25UZXh0XHJcbiAgICB9XHJcbiAgICBzZXQgYnV0dG9uVGV4dChidXR0b25UZXh0OnN0cmluZyl7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoe1xyXG4gICAgICAgICAgICBidXR0b25UZXh0XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb25DbGljaygpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEub25DbGlja1xyXG4gICAgfVxyXG4gICAgc2V0IG9uQ2xpY2sob25DbGljayl7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoe1xyXG4gICAgICAgICAgICBvbkNsaWNrXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoKXtcclxuICAgICAgICBpZih0aGlzLnJlbW92ZWQpcmV0dXJuXHJcbiAgICAgICAgbm90aWNlcy5zcGxpY2UodGhpcy5pbmRleCwgMSlcclxuICAgICAgICBub3RpY2VFdmVudHMuZW1pdChcIm5vdGljZVVwZGF0ZVwiKVxyXG4gICAgfVxyXG4gICAgZGF0YTpub3RpY2VcclxufSIsImltcG9ydCBjb21wb25lbnRzIGZyb20gXCIuLi9jb21wb25lbnRzL2NvbXBvbmVudHNcIlxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vVXRpbHNcIlxyXG5pbXBvcnQgeyBDb21wb25lbnRQcm9wcyB9IGZyb20gXCJyZWFjdFwiXHJcbmltcG9ydCB1dWlkIGZyb20gXCIuL3V1aWRcIlxyXG5pbXBvcnQgVGV4dElucHV0IGZyb20gXCIuLi9jb21wb25lbnRzL2lucHV0cy9UZXh0SW5wdXRcIlxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpblV0aWxpdGllcyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuXHJcbiAgICByZW5kZXJTZXR0aW5ncyhzZXR0aW5nczpTZXR0aW5nSXRlbVtdKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLnJlbmRlclNldHRpbmdzVG9SZWFjdChzZXR0aW5ncylcclxuICAgICAgICBsZXQgZWxlbSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2tleTogdXVpZCgpfSwgaXRlbXMpXHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLlJlYWN0VG9IVE1MRWxlbWVudChlbGVtKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNldHRpbmdzVG9SZWFjdChzZXR0aW5nczpTZXR0aW5nSXRlbVtdKXtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXVxyXG4gICAgICAgIHNldHRpbmdzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0eXBlb2YgaXRlbSAhPT0gXCJvYmplY3RcIilyZXR1cm4gaXRlbXMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICBpZihpdGVtLnByb3BzICYmIFwiY2hpbGRyZW5cIiBpbiBpdGVtLnByb3BzKXtcclxuICAgICAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGl0ZW0ucHJvcHMuY2hpbGRyZW4pKWl0ZW0ucHJvcHMuY2hpbGRyZW4gPSBbaXRlbS5wcm9wcy5jaGlsZHJlbl1cclxuICAgICAgICAgICAgICAgIGl0ZW0ucHJvcHMuY2hpbGRyZW4gPSB0aGlzLnJlbmRlclNldHRpbmdzVG9SZWFjdChpdGVtLnByb3BzLmNoaWxkcmVuKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCFpdGVtLnByb3BzKWl0ZW0ucHJvcHMgPSB7fVxyXG4gICAgICAgICAgICBpdGVtLnByb3BzLmtleSA9IHV1aWQoKVxyXG4gICAgICAgICAgICBsZXQgY29tcG9uZW50ID0gVXRpbHMuZ2V0TmVzdGVkUHJvcHMoY29tcG9uZW50cywgaXRlbS5jb21wb25lbnQpXHJcbiAgICAgICAgICAgIGlmKCFjb21wb25lbnQpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhcm5pbmcgPSBuZXcgVGV4dElucHV0KHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYFdhcm5pbmc6IE5vIGNvbXBvbmVudCB3YXMgZm91bmQgZm9yOiBcIiR7aXRlbS5jb21wb25lbnR9XCIuIFBsZWFzZSBjb3JyZWN0IHlvdXIgY29kZS5gLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBgV2FybmluZzogTm8gY29tcG9uZW50IHdhcyBmb3VuZCBmb3I6IFwiJHtpdGVtLmNvbXBvbmVudH1cIi4gUGxlYXNlIGNvcnJlY3QgeW91ciBjb2RlLmBcclxuICAgICAgICAgICAgICAgIH0pLnJlbmRlcigpXHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHdhcm5pbmcpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpdGVtcy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBPYmplY3QuY3JlYXRlKGl0ZW0ucHJvcHMpKSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG59XHJcblxyXG50eXBlIFNldHRpbmdJdGVtID0ge1xyXG4gICAgY29tcG9uZW50OiBzdHJpbmcsXHJcbiAgICBwcm9wczogQ29tcG9uZW50UHJvcHM8YW55PlxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5mcmVlemUobykge1xyXG4gICAgdmFyIG9vID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG8gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIG9vID0gW107XHJcbiAgICAgICAgdmFyIGNsb25lID0gZnVuY3Rpb24odikge1xyXG4gICAgICAgICAgICBvby5wdXNoKHYpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvLmZvckVhY2goY2xvbmUpO1xyXG4gICAgfSBlbHNlIGlmIChvIGluc3RhbmNlb2YgU3RyaW5nKSB7XHJcbiAgICAgICAgb28gPSBuZXcgU3RyaW5nKG8pLnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgb28gPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvKSB7XHJcbiAgICAgICAgICAgIG9vW3Byb3BlcnR5XSA9IG9bcHJvcGVydHldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvbztcclxufVxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgICBpbnRlcmZhY2UgT2JqZWN0Q29uc3RydWN0b3Ige1xyXG4gICAgICAgIHVuZnJlZXplOiA8VCBleHRlbmRzIGFueT4ob2JqOiBSZWFkb25seTxUPikgPT4gVFxyXG4gICAgfVxyXG59XHJcbk9iamVjdC51bmZyZWV6ZSA9IHVuZnJlZXplIiwiaW1wb3J0IHsgUmVhY3RFbGVtZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBSZWFjdERPTSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIilcclxuaW1wb3J0IFBsdWdpblV0aWxpdGllcyBmcm9tIFwiLi9QbHVnaW5VdGlsaXRpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBVdGlscyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuXHJcbiAgICBSZWFjdFRvSFRNTEVsZW1lbnQoUmVhY3RFbGVtZW50OiBSZWFjdEVsZW1lbnQpeyAgICBcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgIFJlYWN0RE9NLnJlbmRlcihSZWFjdEVsZW1lbnQsIGVsZW1lbnQpXHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUGx1Z2luVXRpbHMoKXtyZXR1cm4gUGx1Z2luVXRpbGl0aWVzfVxyXG5cclxuICAgIGdldE5lc3RlZFByb3BzKG9iajphbnksIHBhdGg6IHN0cmluZyl7XHJcbiAgICAgICAgbGV0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi5cIilcclxuICAgICAgICBmb3IobGV0IHNlZyBvZiBzZWdtZW50cyl7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iaiAmJiAoc2VnIGluIG9iaikgPyBvYmpbc2VnXSA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqXHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbENvbG9yVG9IZXgoY29sb3I6bnVtYmVyKTpzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIFwiI1wiK2NvbG9yLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXHJcbiAgICB9XHJcblxyXG4gICAgSGV4Q29sb3JUb0RlY2ltYWwoY29sb3I6c3RyaW5nKTpudW1iZXJ7XHJcbiAgICAgICAgY29sb3IgPSBjb2xvci5yZXBsYWNlKC9bIztdL2csIFwiXCIpXHJcbiAgICAgICAgbGV0IHJlcyA9IHBhcnNlSW50KGNvbG9yLCAxNilcclxuICAgICAgICBpZihpc05hTihyZXMpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2xvcjogJHtjb2xvcn1gKVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVEYShjbGFzc05hbWU6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXHJcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcclxuICAgIH1cclxuXHJcbiAgICBGaW5kUmVhY3QoZG9tOkVsZW1lbnQsIHRyYXZlcnNlVXA6bnVtYmVyID0gMCk6UmVhY3QuQ29tcG9uZW50fFJlYWN0LlB1cmVDb21wb25lbnR7XHJcbiAgICAgICAgLy8gdGFrZW4gZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yOTMyMTc0Mi9yZWFjdC1nZXR0aW5nLWEtY29tcG9uZW50LWZyb20tYS1kb20tZWxlbWVudC1mb3ItZGVidWdnaW5nIzM5MTY1MTM3XHJcbiAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoZG9tKS5maW5kKGtleT0+a2V5LnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSRcIikpO1xyXG4gICAgICAgIGNvbnN0IGRvbUZpYmVyID0gZG9tW2tleV07XHJcbiAgICAgICAgaWYgKGRvbUZpYmVyID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgXHJcbiAgICAgICAgLy8gcmVhY3QgPDE2XHJcbiAgICAgICAgaWYgKGRvbUZpYmVyLl9jdXJyZW50RWxlbWVudCkge1xyXG4gICAgICAgICAgICBsZXQgY29tcEZpYmVyID0gZG9tRmliZXIuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmF2ZXJzZVVwOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbXBGaWJlciA9IGNvbXBGaWJlci5fY3VycmVudEVsZW1lbnQuX293bmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wRmliZXIuX2luc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIC8vIHJlYWN0IDE2K1xyXG4gICAgICAgIGNvbnN0IEdldENvbXBGaWJlciA9IGZpYmVyPT57XHJcbiAgICAgICAgICAgIC8vcmV0dXJuIGZpYmVyLl9kZWJ1Z093bmVyOyAvLyB0aGlzIGFsc28gd29ya3MsIGJ1dCBpcyBfX0RFVl9fIG9ubHlcclxuICAgICAgICAgICAgbGV0IHBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuO1xyXG4gICAgICAgICAgICB3aGlsZSAodHlwZW9mIHBhcmVudEZpYmVyLnR5cGUgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudEZpYmVyO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IGNvbXBGaWJlciA9IEdldENvbXBGaWJlcihkb21GaWJlcik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmF2ZXJzZVVwOyBpKyspIHtcclxuICAgICAgICAgICAgY29tcEZpYmVyID0gR2V0Q29tcEZpYmVyKGNvbXBGaWJlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb21wRmliZXIuc3RhdGVOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0NsYXNzKGNsYXNzTmFtZXM6c3RyaW5nLCBjbGFzc05hbWU6c3RyaW5nKTpib29sZWFue1xyXG4gICAgICAgIGlmKCFjbGFzc05hbWVzIHx8ICFjbGFzc05hbWUpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgY29uc3QgY2xhc3NuYW1lcyA9IGNsYXNzTmFtZXMuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgZm9yKGxldCBjbGFzc25hbWUgb2YgdGhpcy5yZW1vdmVEYShjbGFzc05hbWUpLnNwbGl0KFwiIFwiKSl7XHJcbiAgICAgICAgICAgIGlmKCFjbGFzc25hbWVzLmluY2x1ZGVzKGNsYXNzbmFtZSkpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0SlNPYmplY3Qob2JqOmFueSk6c3RyaW5ne1xyXG4gICAgICAgIGlmKFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcImJvb2xlYW5cIiwgXCJiaWdpbnRcIiwgXCJ1bmRlZmluZWRcIl0uaW5jbHVkZXModHlwZW9mIG9iaikpcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iailcclxuICAgICAgICBpZihvYmogPT09IG51bGwpcmV0dXJuIFwibnVsbFwiXHJcbiAgICAgICAgaWYodHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKXJldHVybiBTdHJpbmcob2JqKVxyXG4gICAgICAgIGlmKHR5cGVvZiBvYmogPT09IFwic3ltYm9sXCIpcmV0dXJuIFN0cmluZyhvYmopXHJcblxyXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkob2JqKSl7XHJcbiAgICAgICAgICAgIGlmKCFvYmoubGVuZ3RoKXJldHVybiBcIltdXCJcclxuICAgICAgICAgICAgcmV0dXJuIGBbXFxuICAgICR7b2JqLm1hcChlID0+IHRoaXMuZm9ybWF0SlNPYmplY3QoZSkpLmpvaW4oXCIsXFxuICAgIFwiKX1cXG5dYFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKVxyXG4gICAgICAgICAgICBpZihrZXlzLmxlbmd0aCA9PT0gMClyZXR1cm4gXCJ7fVwiXHJcbiAgICAgICAgICAgIHJldHVybiBge1xcbiAgICAke2tleXMubWFwKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWwgPSBrZXlcclxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpa2V5ID0gXCJbXCIrU3RyaW5nKGtleSkrXCJdXCJcclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGtleSA9PT0gXCJudW1iZXJcIilrZXkgPSBTdHJpbmcoa2V5KVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNOYU4ocGFyc2VJbnQoa2V5WzBdKSkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gdGhpcy5mb3JtYXRKU09iamVjdChrZXkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9bXlxcd1xcZF8kXS9nLnRlc3Qoa2V5KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSB0aGlzLmZvcm1hdEpTT2JqZWN0KGtleSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9OiAke3RoaXMuZm9ybWF0SlNPYmplY3Qob2JqW29yaWdpbmFsXSl9YFxyXG4gICAgICAgICAgICB9KX1cXG59YFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImNvbnN0IEJETW9kdWxlczp0eXBlb2Ygd2luZG93LkJETW9kdWxlcyA9IHdpbmRvdy5CRE1vZHVsZXMgfHwgcmVxdWlyZShcIi4vQkRNb2R1bGVzXCIpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgV2VicGFja0xvYWRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuXHJcbiAgICBnZXQoaWQ6IG51bWJlcik6YW55e1xyXG4gICAgICAgIHJldHVybiBCRE1vZHVsZXMuZ2V0KGlkKVxyXG4gICAgfVxyXG4gICAgZmluZChmaWx0ZXI6IChtb2Q6YW55KSA9PiBib29sZWFuKTphbnl7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IEJETW9kdWxlcy5nZXQoZmlsdGVyKVswXVxyXG4gICAgICAgIGlmKCFyZXN1bHQpe1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oZmlsdGVyLCBcImNvdWxkbid0IGZpbmQgdGhlIG1vZHVsZS5cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG4gICAgZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wczooc3RyaW5nfG51bWJlcilbXSk6YW55e1xyXG4gICAgICAgIHJldHVybiBCRE1vZHVsZXMuZ2V0KChtb2QpID0+IHtcclxuICAgICAgICAgICAgaWYobW9kLl9fZXNNb2R1bGUgJiYgKFwiZGVmYXVsdFwiIGluIG1vZCkpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGRvZXNNYXRjaCA9IHRydWVcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QuZGVmYXVsdCwgcHJvcCkpZG9lc01hdGNoID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGRvZXNNYXRjaClyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgcHJvcCkpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9KVswXVxyXG4gICAgfVxyXG4gICAgZmlsdGVyKGZpbHRlcjogKG1vZDphbnkpID0+IGJvb2xlYW4pOmFueVtde1xyXG4gICAgICAgIHJldHVybiBCRE1vZHVsZXMuZ2V0KGZpbHRlcilcclxuICAgIH1cclxuICAgIGZpbHRlckJ5VW5pcXVlUHJvcGVydGllcyhwcm9wczooc3RyaW5nfG51bWJlcilbXSk6YW55e1xyXG4gICAgICAgIHJldHVybiBCRE1vZHVsZXMuZ2V0KChtb2QpID0+IHtcclxuICAgICAgICAgICAgaWYobW9kLl9fZXNNb2R1bGUgJiYgKFwiZGVmYXVsdFwiIGluIG1vZCkpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGRvZXNNYXRjaCA9IHRydWVcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QuZGVmYXVsdCwgcHJvcCkpZG9lc01hdGNoID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKGRvZXNNYXRjaClyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgcHJvcCkpcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2VicGFja0xvYWRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZTpzdHJpbmcgPSBcIlwiKXtcclxuICAgICAgICBtZXNzYWdlICs9IFwiXFxuXFx0VGhpcyBlcnJvciBpcyByZWxhdGVkIHRvIExpZ2h0Y29yZCBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgV2VicGFja01vZHVsZS4gXFxuXFx0UGxlYXNlIHNob3cgdGhpcyBlcnJvciBhbmQgYSBmZXcgbGluZXMgb2YgbG9ncyBhYm92ZSB0aGlzIGVycm9yIHRvIHRoZSBkZXZzLiBcXG5cXHRPcGVuIGFuIGlzc3VlIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkIG9yIGluIG91ciBkaXNjb3JkIHNlcnZlci5cIlxyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJXZWJwYWNrTG9hZGVyRXJyb3JcIlxyXG4gICAgfVxyXG59IiwiLyoqXHJcbiAqIFJlY3JlYXRlIHRoZSBnaXZlbiBvYmplY3Qgd2l0aG91dCB0aGUgX19wcm90b19fLiBVc2VmdWwgZm9yIGJldHRlciBmb3JtYXR0aW5nIHdoZW4gb3V0cHV0IGluIGNvbnNvbGUuXHJcbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZWNyZWF0ZVxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmVOdWxsUHJvdG88T2JqPWFueT4ob2JqOk9iaik6T2Jqe1xyXG4gICAgbGV0IG8gPSBPYmplY3QuY3JlYXRlKG51bGwpXHJcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgb1trXSA9IG9ialtrXVxyXG4gICAgfSlcclxuICAgIHJldHVybiBvXHJcbn0iLCJleHBvcnQgY29uc3QgaXNOYXRpdmU6Ym9vbGVhbiA9IHR5cGVvZiB3aW5kb3cuQkRNb2R1bGVzID09PSBcInVuZGVmaW5lZFwiXHJcbmV4cG9ydCBjb25zdCBpc0ltcG9ydGVkOmJvb2xlYW4gPSB0eXBlb2Ygd2luZG93LkJETW9kdWxlcyAhPT0gXCJ1bmRlZmluZWRcIiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4Y2x1ZGVQcm9wZXJ0aWVzPE9iaiA9IGFueT4ob2JqOk9iaiwgcHJvcHM6KGtleW9mIE9iailbXSk6UGFydGlhbDxPYmo+e1xyXG4gICAgbGV0IG5ld09iaiA9IHt9XHJcblxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChrKSA9PiB7XHJcbiAgICAgICAgaWYocHJvcHMuaW5jbHVkZXMoayBhcyBrZXlvZiBPYmopKXJldHVyblxyXG4gICAgICAgIG5ld09ialtrXSA9IG9ialtrXVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gbmV3T2JqXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOT09QKCl7fSIsImltcG9ydCBVdGlscyBmcm9tIFwiLi9VdGlsc1wiXHJcbmltcG9ydCBOb3RpY2VzLCB7IG5vdGljZXMgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9wcml2YXRlL05vdGljZXNcIlxyXG5pbXBvcnQgeyBpc05hdGl2ZSB9IGZyb20gXCIuL2Vudmlyb25uZW1lbnRcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaCgpe1xyXG4gICAgLyoqIFNUQVJUIE5PVElDRSAqL1xyXG4gICAgZ2V0TW9kdWxlKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJDb25uZWN0ZWRBcHBWaWV3XCIpXHJcbiAgICAudGhlbihhc3luYyAobW9kKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXBwQ2xhc3NlcyA9IGF3YWl0IGdldE1vZHVsZShlID0+IGUuaGFzTm90aWNlKTtcclxuICAgICAgICBjb25zdCBidWlsZFJlbmRlciA9IG9yaWdpbmFsID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHJlbmRlcigpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld2NoaWxkcmVuID0gW11cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShjaGlsZHJlbikpY2hpbGRyZW4gPSBbY2hpbGRyZW5dXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG5ld2NoaWxkcmVuLnB1c2goY2hpbGRyZW5bMF0pXHJcbiAgICAgICAgICAgICAgICBuZXdjaGlsZHJlbi5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWNlcywge2NvbnRhaW5lcjogdGhpc30pKVxyXG4gICAgICAgICAgICAgICAgbmV3Y2hpbGRyZW4ucHVzaChjaGlsZHJlblsxXSlcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuID0gbmV3Y2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bMl0ucHJvcHMuY2hpbGRyZW5bMF0ucHJvcHMucmVuZGVyID0gYnVpbGRSZW5kZXJDaGFubmVsU2lkZWJhcihyZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblsyXS5wcm9wcy5jaGlsZHJlblswXS5wcm9wcy5yZW5kZXIpXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ1aWxkUmVuZGVyQ2hhbm5lbFNpZGViYXIgPSBvcmlnaW5hbCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiByZW5kZXJDaGFubmVsU2lkZWJhcigpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBvcmlnaW5hbC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzTm90aWNlID0gbm90aWNlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICBpZighaGFzTm90aWNlKXJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgaWYoIVV0aWxzLmhhc0NsYXNzKHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSwgYXBwQ2xhc3Nlcy5oYXNOb3RpY2UpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgXCIrVXRpbHMucmVtb3ZlRGEoYXBwQ2xhc3Nlcy5oYXNOb3RpY2UpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbW9kLmRlZmF1bHQucHJvdG90eXBlLnJlbmRlciA9IGJ1aWxkUmVuZGVyKG1vZC5kZWZhdWx0LnByb3RvdHlwZS5yZW5kZXIpO1xyXG4gICAgICAgIChhc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShhcHBDbGFzc2VzLmJhc2UpKVxyXG4gICAgICAgICAgICBpZighYmFzZSl0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGJhc2UgaGVyZWApXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSBVdGlscy5GaW5kUmVhY3QoYmFzZSkgYXMgYW55XHJcbiAgICAgICAgICAgIGVsZW0ucmVuZGVyID0gYnVpbGRSZW5kZXIoZWxlbS5yZW5kZXIpXHJcbiAgICAgICAgICAgIGVsZW0uZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH0pKClcclxuICAgIH0pXHJcbiAgICAvKiogRU5EIE5PVElDRSAqL1xyXG5cclxuICAgIGlmKGlzTmF0aXZlKXtcclxuICAgICAgICAvKiogU1RBUlQgVVNFUlBPUE9VVCBQQVRDSCAqL1xyXG4gICAgICAgIGF3YWl0TG9naW4oKVxyXG4gICAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgbGV0IFVzZXJQb3BvdXQgPSBhd2FpdCBnZXRNb2R1bGUoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkZsdXhDb250YWluZXIoRm9yd2FyZFJlZihTdWJzY3JpYmVHdWlsZE1lbWJlcnNDb250YWluZXIoVXNlclBvcG91dCkpKVwiKVxyXG4gICAgICAgICAgICBjb25zdCB1c2VyTW9kdWxlID0gYXdhaXQgZ2V0TW9kdWxlKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMSA9IG5ldyBVc2VyUG9wb3V0LmRlZmF1bHQoe3VzZXJJZDogdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKCkuaWQsIGd1aWxkSWQ6IG51bGwsIGNoYW5uZWxJZDogbnVsbCwgZGlzYWJsZVVzZXJQcm9maWxlTGluazogdHJ1ZX0pLnJlbmRlcigpXHJcbiAgICAgICAgICAgIGNvbnN0IFBvcG91dFByb3BzID0gcmVuZGVyMS5wcm9wc1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIyID0gcmVuZGVyMS50eXBlLnJlbmRlcihQb3BvdXRQcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IG5ldyByZW5kZXIyLnR5cGUocmVuZGVyMi5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgVXNlclBvcG91dENvbXBvbmVudCA9IHJlbmRlcjMudHlwZVxyXG4gICAgICAgICAgICBpZighVXNlclBvcG91dENvbXBvbmVudCl0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgdGhlIFVzZXJQb3BvdXRDb21wb25lbnQgY29tcG9uZW50LmApXHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gVXNlclBvcG91dENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXRDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHJlbmRlci5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbi5wcm9wc1tcImRhdGEtdXNlci1pZFwiXSA9IHRoaXMucHJvcHMudXNlci5pZFxyXG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvKiogRU5EIFVTRVJQT1BPVVQgUEFUQ0gqL1xyXG4gICAgXHJcbiAgICAgICAgLyoqIFNUQVJUIFVTRVJQUk9GSUxFIFBBVENIICovXHJcbiAgICAgICAgYXdhaXRMb2dpbigpXHJcbiAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgVXNlclByb2ZpbGUgPSBhd2FpdCBnZXRNb2R1bGUoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIlVzZXJQcm9maWxlXCIpXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJNb2R1bGUgPSBhd2FpdCBnZXRNb2R1bGUoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVxyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgfSkucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IG5ldyByZW5kZXIxLnR5cGUocmVuZGVyMS5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgVXNlclByb2ZpbGVDb21wb25lbnQgPSByZW5kZXI0LnR5cGVcclxuICAgICAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXHJcbiAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gVXNlclByb2ZpbGVDb21wb25lbnQucHJvdG90eXBlLnJlbmRlclxyXG4gICAgICAgICAgICBVc2VyUHJvZmlsZUNvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gcmVuZGVyLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmV0dXJuVmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW4ucHJvcHNbXCJkYXRhLXVzZXItaWRcIl0gPSB0aGlzLnByb3BzLnVzZXIuaWRcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLyoqIEVORCBVU0VSUFJPRklMRSBQQVRDSCAqL1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IEFkZCBpbiBhcHAtbm90aWZpY2F0aW9ucyAvIGNvbmZpcm1hdGlvbnMuXHJcbiAgICAvKiogU1RBUlQgSU4tQVBQIE5PVElGSUNBVElPTlMgKi9cclxuICAgIC8vZ2V0TW9kdWxlKGUgPT4gdHJ1ZSlcclxuICAgIC8qKiBFTkQgSU4tQVBQIE5PVElGSUNBVElPTlMgKi9cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TW9kdWxlKGZpbHRlcjogKG1vZDphbnkpID0+IGJvb2xlYW4pOlByb21pc2U8YW55PntcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGZpbHRlcilcclxuICAgICAgICAudGhlbihyZXNvbHZlKVxyXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0xJR0hUQ09SRF1cIiwgZXJyLCBmaWx0ZXIpXHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmxldCBoYXNDb21wbGV0ZWRMb2dpbiA9IGZhbHNlXHJcbmxldCBsb2dpblByb21pc2U6UHJvbWlzZTx2b2lkPlxyXG5mdW5jdGlvbiBhd2FpdExvZ2luKCk6UHJvbWlzZTx2b2lkPntcclxuICAgIGlmKGhhc0NvbXBsZXRlZExvZ2luKXJldHVybiBQcm9taXNlLnJlc29sdmUoKVxyXG4gICAgaWYobG9naW5Qcm9taXNlKXJldHVybiBsb2dpblByb21pc2VcclxuICAgICBcclxuICAgIHJldHVybiBsb2dpblByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGxldCBpc1Jlc29sdmVkID0gZmFsc2VcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiQ09OTkVDVElPTl9PUEVOXCIsIChldikgPT4ge1xyXG4gICAgICAgICAgICBpZihpc1Jlc29sdmVkKXJldHVyblxyXG4gICAgICAgICAgICBoYXNDb21wbGV0ZWRMb2dpbiA9IHRydWVcclxuICAgICAgICAgICAgcmVzb2x2ZSgpXHJcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxud2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIkxPR09VVFwiLCAoZXYpID0+IHtcclxuICAgIGhhc0NvbXBsZXRlZExvZ2luID0gZmFsc2VcclxuICAgIGxvZ2luUHJvbWlzZSA9IHVuZGVmaW5lZFxyXG59KSIsImltcG9ydCAqIGFzIHV1aWR2MSBmcm9tIFwidXVpZC92MVwiXHJcbmltcG9ydCAqIGFzIHV1aWR2NCBmcm9tIFwidXVpZC92NFwiXHJcblxyXG50eXBlIHV1aWRGdW5jID0gKCkgPT4gc3RyaW5nXHJcbmxldCB1dWlkOnV1aWRGdW5jICYge3YxOiB1dWlkRnVuYywgdjQ6IHV1aWRGdW5jfSA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24oKXtcclxuICAgIHJldHVybiB1dWlkdjQoKVxyXG59LCB7djE6ICgpID0+IHV1aWR2MSgpLCB2NDogKCkgPT4gdXVpZHY0KCl9KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXVpZCIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImV2ZW50c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwb3dlcmNvcmQvd2VicGFja1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ1dWlkL3YxXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV1aWQvdjRcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/LightcordApi/js/main.min.js b/LightcordApi/js/main.min.js index b734f7d..34e4e64 100644 --- a/LightcordApi/js/main.min.js +++ b/LightcordApi/js/main.min.js @@ -1 +1 @@ -module.exports=function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=12)}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WebpackLoaderError=void 0;const BDModules=window.BDModules;exports.default=new class WebpackLoader{constructor(){}get(id){return BDModules.get(id)}find(filter){let result=BDModules.get(filter)[0];return result||console.warn(filter,"couldn't find the module."),result}findByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})[0]}filter(filter){return BDModules.get(filter)}filterByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})}};class WebpackLoaderError extends Error{constructor(message=""){super(message+="\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in their discord server."),this.name="WebpackLoaderError"}}exports.WebpackLoaderError=WebpackLoaderError},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function NOOP(){}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ReactDOM=__webpack_require__(24),PluginUtilities_1=__webpack_require__(25);exports.default=new class Utils{constructor(){}ReactToHTMLElement(ReactElement){const element=document.createElement("div");return ReactDOM.render(ReactElement,element),element}get PluginUtils(){return PluginUtilities_1.default}getNestedProps(obj,path){let segments=path.split(".");for(let seg of segments)obj=obj&&seg in obj?obj[seg]:void 0;return obj}DecimalColorToHex(color){return"#"+color.toString(16).toUpperCase()}HexColorToDecimal(color){color=color.replace(/[#;]/g,"");let res=parseInt(color,16);if(isNaN(res))throw new Error("Invalid color: "+color);return res}removeDa(className){return className?className.split(" ").filter(e=>!e.startsWith("da-")).join(" "):className}FindReact(dom,traverseUp=0){const domFiber=dom[Object.keys(dom).find(key=>key.startsWith("__reactInternalInstance$"))];if(null==domFiber)return null;if(domFiber._currentElement){let compFiber=domFiber._currentElement._owner;for(let i=0;i{let parentFiber=fiber.return;for(;"string"==typeof parentFiber.type;)parentFiber=parentFiber.return;return parentFiber};let compFiber=GetCompFiber(domFiber);for(let i=0;ithis.formatJSObject(e)).join(",\n ")}\n]`:"[]";{const keys=Object.keys(obj);return 0===keys.length?"{}":`{\n ${keys.map(key=>{let original=key;return"symbol"==typeof key?key="["+String(key)+"]":"number"==typeof key?key=String(key):(console.log(key),(isNaN(parseInt(key[0]))||/[^\w\d_$]/g.test(key))&&(key=this.formatJSObject(key))),`${key}: ${this.formatJSObject(obj[original])}`})}\n}`}}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let TitleModules,AllPreviews;class Title extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.colorStandard),WebpackLoader_1.default.find(e=>"string"==typeof e.size32),WebpackLoader_1.default.find(e=>"string"==typeof e.h2)])}render(){let[colorModule,sizeModule,titleModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h2} ${titleModule.defaultColor} ${titleModule.defaultMarginh2}`;return props.className&&(className+=" "+props.className),React.createElement("h2",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=Title,Title.defaultProps={children:null,className:null}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function cloneNullProto(obj){let o=Object.create(null);return Object.keys(obj).forEach(k=>{o[k]=obj[k]}),o}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function excludeProperties(obj,props){let newObj={};return Object.keys(obj).forEach(k=>{props.includes(k)||(newObj[k]=obj[k])}),newObj}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const uuidv1=__webpack_require__(26),uuidv4=__webpack_require__(27);let uuid=Object.assign((function(){return uuidv4()}),{v1:()=>uuidv1(),v4:()=>uuidv4()});exports.default=uuid},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notices=exports.events=void 0;const Notice_1=__webpack_require__(10),events_1=__webpack_require__(11);exports.events=new events_1.EventEmitter;class Notices extends React.Component{constructor(props){super(props),this.noticeHandler=this.noticeHandler.bind(this)}noticeHandler(){this.forceUpdate()}componentWillMount(){exports.events.on("noticeUpdate",this.noticeHandler)}componentWillUnmount(){exports.events.off("noticeUpdate",this.noticeHandler)}render(){if(!this.hasNotice)return null;const notice=exports.notices[0];return React.createElement(Notice_1.default,Object.assign({},notice))}get hasNotice(){return exports.notices.length>0}}exports.default=Notices,Notices.displayName="LightcordNotices",Notices.defaultProps={},exports.notices=[]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Button_1=__webpack_require__(13),Switch_1=__webpack_require__(14),RadioGroup_1=__webpack_require__(15),TextArea_1=__webpack_require__(16),TextInput_1=__webpack_require__(9),Dropdown_1=__webpack_require__(17),Title_1=__webpack_require__(3),SettingsTitle_1=__webpack_require__(18),Tabs_1=__webpack_require__(19),SettingSubTitle_1=__webpack_require__(20),CodeBlock_1=__webpack_require__(21),cloneNullProto_1=__webpack_require__(4),Tooltip_1=__webpack_require__(22),ColorPicker_1=__webpack_require__(23),AlertBox_1=__webpack_require__(28);exports.default=cloneNullProto_1.default({inputs:cloneNullProto_1.default({Button:Button_1.default,Switch:Switch_1.default,Choices:RadioGroup_1.default,RadioGroup:RadioGroup_1.default,TextArea:TextArea_1.default,TextInput:TextInput_1.default,Dropdown:Dropdown_1.default,ColorPicker:ColorPicker_1.default}),general:cloneNullProto_1.default({Title:Title_1.default,SettingsTitle:SettingsTitle_1.default,SettingSubTitle:SettingSubTitle_1.default,Tabs:Tabs_1.default,CodeBlock:CodeBlock_1.default,Tooltip:Tooltip_1.default,AlertBox:AlertBox_1.default})})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let TextInputModules,AllPreviews;class TextInput extends React.PureComponent{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.state={value:props.value||""}}get modules(){return TextInputModules||(TextInputModules=[WebpackLoader_1.default.find(e=>e.default&&"TextInput"===e.default.displayName).default])}onChange(value,name){this.hasSet=!1,this.props.onChange(value,name,this),this.hasSet||(this.setState({value:value}),this.forceUpdate())}onFocus(ev,name){this.props.onFocus(ev,name,this)}onBlur(ev,name){this.props.onBlur(ev,name,this)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,value:this.state.value}))}get value(){return this.state.value||""}setValue(value){this.setState({value:value}),this.forceUpdate(),this.hasSet=!0}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textinput"}],[{size:"default"},{size:"mini"}],[{disabled:!1},{disabled:!0}],[{placeholder:""}],[{value:""}],[{error:null},{error:"Example error"}],[{maxLength:999}],[{className:""}],[{inputClassName:""}],[{id:"api-preview-textinput"}],[{onChange:(value,name)=>{}}]),AllPreviews)}}exports.default=TextInput,TextInput.defaultProps={name:"",size:"default",disabled:!1,placeholder:"",value:"",error:null,maxLength:999,className:"",inputClassName:"",id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default},TextInput.help={warn:"This should be used for single line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultNotice=void 0;const WebpackLoader_1=__webpack_require__(0),Notices_1=__webpack_require__(7),noop_1=__webpack_require__(1);let NoticeModules;exports.defaultNotice={text:"",id:"unknown id",onClick:noop_1.default,buttonText:null,type:"default"};class Notice extends React.Component{get modules(){return NoticeModules||(NoticeModules=[WebpackLoader_1.default.find(e=>e.noticeInfo)])}render(){const[noticeClasses]=this.modules,className=noticeClasses["notice"+this.props.type.slice(0,1).toUpperCase()+this.props.type.slice(1)];if(!className)return Notices_1.notices.pop(),setImmediate(()=>{Notices_1.events.emit("noticeUpdate")}),null;const button=this.props.buttonText?React.createElement("button",{className:noticeClasses.button,onClick:()=>{Notices_1.notices.pop(),this.props.onClick(),Notices_1.events.emit("noticeUpdate")}},this.props.buttonText):null;return React.createElement("div",{className:className},React.createElement("div",{className:noticeClasses.dismiss,role:"button",tabIndex:0,onClick:()=>{Notices_1.notices.pop(),Notices_1.events.emit("noticeUpdate")}}),this.props.text,button)}}exports.default=Notice,Notice.displayName="LightcordNotice",Notice.defaultProps=exports.defaultNotice},function(module,exports){module.exports=require("events")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),components_1=__webpack_require__(8),uuid_1=__webpack_require__(6),Utils_1=__webpack_require__(2),DiscordTools_1=__webpack_require__(29),patchers=__webpack_require__(30),excludeProperties_1=__webpack_require__(5),cloneNullProto_1=__webpack_require__(4),noop_1=__webpack_require__(1),Unfreeze_1=__webpack_require__(31);patchers.patch();const LightcordApi={WebpackLoader:WebpackLoader_1.default,Components:components_1.default,uuid:uuid_1.default,Utils:Utils_1.default,DiscordTools:DiscordTools_1.default,_:{excludeProperties:excludeProperties_1.default,cloneNullProto:cloneNullProto_1.default,NOOP:noop_1.default,unfreeze:Unfreeze_1.default}};exports.default=LightcordApi,Object.assign(window.Lightcord.Api,LightcordApi)},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let ButtonModules,AllPreviews;class Button extends React.Component{constructor(props){super(props),this.state={hover:!1}}get modules(){return ButtonModules||(ButtonModules=[WebpackLoader_1.default.findByUniqueProperties(["_horizontal"]),WebpackLoader_1.default.findByUniqueProperties(["colorTransparent"]),WebpackLoader_1.default.findByUniqueProperties(["buttonWrapper"]),WebpackLoader_1.default.findByUniqueProperties(["ButtonColors"])])}render(){let[flexModule,euhModule1,buttonModule,colorsModule]=this.modules,props={};this.props&&("color"in this.props&&(props.color=this.props.color),"children"in this.props&&(props.children=this.props.children),"onClick"in this.props&&(props.onClick=this.props.onClick),"wrapper"in this.props&&(props.wrapper=!!this.props.wrapper),"look"in this.props&&(props.look=this.props.look),"size"in this.props&&(props.size=this.props.size),"hoverColor"in this.props&&(props.hoverColor=this.props.hoverColor),"disabled"in this.props?props.disabled=this.props.disabled:props.disabled=!1),props.color?(props.color=props.color.toLowerCase(),Button.Colors.includes(props.color)||(props.color=Button.Colors[0])):props.color=Button.Colors[0],props.look?(props.look=props.look.toLowerCase(),Button.Looks.includes(props.look)||(props.look=Button.Looks[0])):props.look=Button.Looks[0],props.size?(props.size=props.size.toLowerCase(),Button.Sizes.includes(props.size)||(props.size=Button.Sizes[0])):props.size=Button.Sizes[0],props.hoverColor?(props.hoverColor=props.hoverColor.toLowerCase(),Button.HoverColors.includes(props.hoverColor)||(props.hoverColor=Button.HoverColors[0])):props.hoverColor=Button.HoverColors[0];let buttonSize=props.size&&colorsModule.ButtonSizes[props.size.toUpperCase()]||"";buttonSize&&(buttonSize=" "+buttonSize);let hoverColor=props.hoverColor&&colorsModule.ButtonHovers[props.hoverColor.toUpperCase()]||"";hoverColor&&(hoverColor=" "+hoverColor),props.onClick="function"==typeof props.onClick?props.onClick:()=>{},"boolean"!=typeof props.wrapper&&(props.wrapper=!0);let hover=this.state.hover?euhModule1.hasHover:"";hover&&(hover=" "+hover);let button=React.createElement("button",{type:"button",className:`${flexModule.flexChild} ${euhModule1.button} ${colorsModule.ButtonLooks[props.look.toUpperCase()]} ${colorsModule.ButtonColors[props.color.toUpperCase()]}${buttonSize}${hoverColor}${hover} ${euhModule1.grow}`,style:{flex:"0 1 auto"},onClick:this.props.onClick,onMouseEnter:ev=>{hoverColor&&this.setState({hover:!0})},onMouseLeave:ev=>{hoverColor&&this.setState({hover:!1})},disabled:props.disabled},React.createElement("div",{className:euhModule1.contents},props.children));return props.wrapper?React.createElement("div",{className:buttonModule.buttonWrapper},button):button}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[];let colors=[];for(let color of Button.Colors)colors.push({color:color});AllPreviews.push(colors);let looks=[];for(let look of Button.Looks)looks.push({look:look});AllPreviews.push(looks);let sizes=[];for(let size of Button.Sizes)sizes.push({size:size});AllPreviews.push(sizes);let hovers=[];for(let hover of Button.HoverColors)hovers.push({hoverColor:hover});return AllPreviews.push(hovers),AllPreviews.push([{children:"Test Button"}]),AllPreviews.push([{onClick:()=>{}}]),AllPreviews.push([{wrapper:!1}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews})()}}exports.default=Button,Button.Colors=["brand","grey","red","green","yellow","primary","link","white","black","transparent"],Button.Looks=["filled","inverted","outlined","ghost","link","blank"],Button.Sizes=["small","medium","large","xlarge","min","max","icon","none"],Button.HoverColors=["default",...Button.Colors]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let SwitchModules,AllPreviews;class Switch extends React.Component{constructor(props){super(props),this.state={value:props.value||!1},this.onChange=this.onChange.bind(this)}get modules(){return SwitchModules||(SwitchModules=[WebpackLoader_1.default.find(e=>e.default&&"Switch"===e.default.displayName).default])}render(){let[SwitchComponent]=this.modules,props=this.props;return React.createElement(SwitchComponent,{id:props.id,onChange:this.onChange,value:this.state.value||!1,fill:props.fill,theme:SwitchComponent.Themes[props.theme.toUpperCase()],disabled:props.disabled,className:props.className,size:SwitchComponent.Sizes[props.size.toUpperCase()],style:props.style})}onChange(value){this.props.onChange(!this.state.value),this.setState({value:!this.state.value})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{onChange:value=>{}}]),AllPreviews.push([{value:!1}],[{theme:"default"},{theme:"clear"}],[{disabled:!1},{disabled:!0}],[{id:"api-preview-switch"}],[{fill:null}],[{size:"default"},{size:"mini"}],[{style:{}}]),AllPreviews)}}exports.default=Switch,Switch.defaultProps={id:null,onChange:noop_1.default,value:!1,fill:null,theme:"default",disabled:!1,className:null,size:"default",style:{}},Switch.help={error:"The `clear` option doesn't work well on light theme."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let RadioGroupModule,AllPreviews;class RadioGroup extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value}}onChange(ev){this.props.onChange(ev.value),this.setState({value:ev.value})}get modules(){return RadioGroupModule||(RadioGroupModule=[WebpackLoader_1.default.find(e=>e.default&&"RadioGroup"===e.default.displayName).default])}render(){let[RadioGroupComponent]=this.modules,props=this.props;return React.createElement(RadioGroupComponent,{options:props.options,onChange:this.onChange,value:this.state.value,disabled:props.disabled,size:RadioGroupComponent.Sizes[props.size.toUpperCase()],itemType:RadioGroupComponent.ItemTypes[props.itemType.toUpperCase()],infoClassName:props.infoClassName})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{options:[{value:"option1",name:"Option 1",desc:"description 1"},{value:"option2",name:"Option 2",desc:"description 2"},{value:"option3",name:"Option 3",desc:"description 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{size:"medium"},{size:"small"}],[{itemType:"bar"},{itemType:"panel"}]),AllPreviews)}}exports.default=RadioGroup,RadioGroup.defaultProps={options:[{value:"none",name:"No options",desc:"No options was passed to Choices. If you meant to display no options at all, please pass an empty array.",color:"#f04747"}],value:null,disabled:!1,size:"medium",itemType:"bar",infoClassName:null,onChange:noop_1.default}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let TextAreaModules,AllPreviews;class TextArea extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this),this.state={value:props.value||""}}get modules(){return TextAreaModules||(TextAreaModules=[WebpackLoader_1.default.find(e=>e.default&&"TextArea"===e.default.displayName).default])}onChange(value,name){this.props.onChange(value,name),this.setState({value:value})}onFocus(ev,name){this.props.onFocus(ev,name)}onBlur(ev,name){this.props.onBlur(ev,name)}onKeyDown(ev){this.props.onKeyDown(ev)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,value:this.state.value}))}get value(){return this.state.value||""}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textarea"}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews.push([{placeholder:null}]),AllPreviews.push([{autoFocus:!1},{autoFocus:!0}]),AllPreviews.push([{resizeable:!1},{resizeable:!0}]),AllPreviews.push([{flex:!1},{flex:!0}]),AllPreviews.push([{autosize:!1},{autosize:!0}]),AllPreviews.push([{rows:3},{rows:2},{rows:1}]),AllPreviews.push([{value:""}]),AllPreviews.push([{error:null},{error:"Example error"}]),AllPreviews.push([{maxLength:100}]),AllPreviews.push([{className:""}]),AllPreviews.push([{inputClassName:""}]),AllPreviews.push([{id:"api-preview-textarea"}]),AllPreviews)}}exports.default=TextArea,TextArea.defaultProps={name:null,disabled:!1,placeholder:null,autoFocus:!1,resizeable:!1,flex:!1,autosize:!1,rows:3,value:"",error:null,maxLength:null,className:null,id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default,onKeyDown:noop_1.default},TextArea.help={warn:"This should be used for multi line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let DropdownModules,AllPreviews;class Dropdown extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value||null}}onChange(value){this.props.onChange(value),this.setState({value:value})}get modules(){return DropdownModules||(DropdownModules=[WebpackLoader_1.default.find(e=>e.default&&"SelectTempWrapper"===e.default.displayName).default])}render(){let[DropdownComponent]=this.modules,props=this.props;return React.createElement(DropdownComponent,Object.assign({},props,{onChange:this.onChange,value:this.state.value}))}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{error:null},{error:"An error occured"}],[{options:[{value:"option1",label:"Option 1"},{value:"option2",label:"Option 2"},{value:"option3",label:"Option 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{searchable:!0},{searchable:!1}],[{clearable:!0},{clearable:!1}],[{isMulti:!1},{isMulti:!0}]),AllPreviews)}}exports.default=Dropdown,Dropdown.defaultProps={className:null,error:null,options:[{value:"none",label:"No options - No options was passed to Dropdown. If you meant to put an empty dropdown, input an empty array."}],valueRenderer:null,multiValueRenderer:null,optionRenderer:null,onChange:noop_1.default,value:null,disabled:!1,searchable:!1,clearable:!1,styleOverrides:null,lightThemeColorOverrides:null,darkThemeColorOverrides:null,isMulti:!1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),Title_1=__webpack_require__(3);let TitleModules,AllPreviews;class SettingsTitle extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60)])}render(){let[marginModule]=this.modules,props=this.props,className=`${marginModule.marginTop60} ${marginModule.marginBottom20}`;return props.className&&(className=0+props.className),React.createElement(Title_1.default,{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingsTitle,SettingsTitle.defaultProps={children:[""],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Tab=void 0;const noop_1=__webpack_require__(1),Title_1=__webpack_require__(3);class Tabs extends React.Component{constructor(props){super(props),this.tabsElements=[],this.state={active:this.props.active||null}}get tabs(){return this.props.tabs||[]}changeTab(tab){tab!==this.state.active&&(this.props.onChange&&this.props.onChange(tab),this.setState({active:tab}),this.tabsElements.forEach(e=>e.setActive(tab===e.props.id)))}render(){return React.createElement("div",{className:"lc-tabWrapper",style:this.props.style},React.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},this.tabs.map(tab=>React.createElement(Tab,{TabContainer:this,title:tab.label,id:tab.id,key:btoa(tab.label+":"+tab.id)}))),React.createElement("div",{className:"lc-tab"},this.props.children))}isActive(tab){return this.state.active===tab}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:React.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(Title_1.default,null,"Preview tabs")))}],[{tabs:[{label:"Active tab",id:"1"},{label:"Unactive tab",id:"2"}]}],[{active:"1"}],[{onChange:tabId=>{}}]),AllPreviews)}}let AllPreviews;exports.default=Tabs,Tabs.defaultProps={children:null,tabs:[{label:"No tabs was passed to .",id:"none"}],active:null,onChange:noop_1.default,style:{}};class Tab extends React.Component{constructor(props){super(props),this.state={active:props.TabContainer.isActive(props.id)},this.props.TabContainer.tabsElements.push(this)}setActive(isActive){this.setState({active:!!isActive})}render(){let className="lc-navItem";return this.state.active?className+=" lc-navItemActive":className+=" lc-navItemInactive",React.createElement("div",{className:className,onClick:()=>{this.props.TabContainer.changeTab(this.props.id)}},this.props.title)}}exports.Tab=Tab},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let TitleModules,AllPreviews;class SettingSubTitle extends React.Component{get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60),WebpackLoader_1.default.findByUniqueProperties(["h5"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["size14"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["colorStandard"])])}render(){let[marginModule,titleModule,sizeModule,colorModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h5} ${marginModule.marginBottom4}`;return props.className&&(className=0+props.className),React.createElement("h5",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingSubTitle,SettingSubTitle.defaultProps={children:[],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let CodeBlockModules,AllPreviews;class CodeBlock extends React.Component{get modules(){return CodeBlockModules||(CodeBlockModules=[WebpackLoader_1.default.find(e=>e.markup),WebpackLoader_1.default.find(e=>e.messageContent),WebpackLoader_1.default.find(e=>e.scrollbarGhostHairline),WebpackLoader_1.default.find(e=>e.highlight),WebpackLoader_1.default.find(e=>e.marginBottom8)])}render(){let[messageModule1,messageModule2,scrollbarModule1,hightlightJS,marginModule1]=this.modules;const code="plaintext"===this.props.language?React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs"},this.props.content):React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:hightlightJS.highlight(this.props.language,this.props.content).value}});return React.createElement("div",{className:`${messageModule1.markup} ${messageModule2.messageContent}`},React.createElement("pre",null,code),React.createElement("div",{className:marginModule1.marginBottom8}))}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{content:'console.log("Exemple code")'}]),AllPreviews.push([{language:"js"},{language:"plaintext"},...CodeBlock.prototype.modules[3].listLanguages().filter(e=>"js"!==e).map(e=>({language:e}))]),AllPreviews)}}exports.default=CodeBlock,CodeBlock.defaultProps={language:"plaintext",content:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),excludeProperties_1=__webpack_require__(5);let TooltipModules,AllPreviews;class Tooltip extends React.Component{constructor(props){super(props)}get modules(){return TooltipModules||(TooltipModules=[WebpackLoader_1.default.find(e=>e.default&&"Tooltip"===e.default.displayName)])}render(){let[Tooltip]=this.modules,props=excludeProperties_1.default(this.props,["children"]);return React.createElement(Tooltip.default,props,data=>React.createElement("div",Object.assign(Object.assign({},data),{style:{width:"fit-content",height:"fit-content"}}),this.props.children))}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[],AllPreviews.push([{children:React.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"green",look:"ghost",size:"small",hoverColor:"yellow",onClick:()=>{},wrapper:!1},"Hover this button to see the tooltip")}]),AllPreviews.push([{text:"Example Tooltip Text"}]);let colors=[];Tooltip.Colors.forEach(color=>{colors.push({color:color})}),AllPreviews.push(colors);let positions=[];return Tooltip.Positions.forEach(p=>{positions.push({position:p})}),AllPreviews.push(positions),AllPreviews})()}}exports.default=Tooltip,Tooltip.defaultProps={children:null,text:"No text was passed to Tooltip",position:"top",color:"brand"},Tooltip.Positions=["top","left","right","bottom"],Tooltip.Colors=["black","grey","brand","green","yellow","red"]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0),Utils_1=__webpack_require__(2),Constants={defaultColor:10070709,baseColors:[1752220,3066993,3447003,10181046,15277667,15844367,15105570,15158332,9807270,6323595,1146986,2067276,2123412,7419530,11342935,12745742,11027200,10038562,9936031,5533306]};let ColorPickerModules,AllPreviews,isFetching=null;class ColorPicker extends React.PureComponent{constructor(props){super(props),this.state={value:props.value||null,lastColor:this.props.value},this.onChange=this.onChange.bind(this)}static preload(){ColorPicker.prototype.modules[0]||isFetching||new ColorPicker({}).render()}onChange(val){this.props.onChange(val),this.setState({value:val}),this.forceUpdate()}get modules(){return ColorPickerModules||(ColorPickerModules=[WebpackLoader_1.default.find(e=>e.default&&"ColorPicker"===e.default.displayName)])}renderColorPicker(){let[ColorPickerComponent]=this.modules;if(!ColorPickerComponent){if(isFetching)return isFetching.then(()=>this.forceUpdate()),null;let resolve;ColorPickerModules=null,isFetching=new Promise(res=>resolve=res);let children=(new(WebpackLoader_1.default.find(e=>e.default&&e.default.displayName&&e.default.displayName.includes("GuildSettingsRoles")).default)).render().type.prototype.renderRoleSettings.call({props:{guild:{roles:[],id:null,isOwner:()=>!1},currentUser:{id:null}},getSelectedRole:()=>({id:null})}).props.children.type.prototype.renderColorPicker.call({props:{role:{id:null,color:0},locked:!1,everyone:!1}}).props.children;return children.type(children.props).props.children.type._ctor().then(c=>{this.forceUpdate(),resolve()}),null}return React.createElement(ColorPickerComponent.default,{colors:this.props.baseColors,defaultColor:this.props.defaultColor,value:this.state.value,disabled:this.props.disabled,onChange:this.onChange,customColor:this.props.customColor})}render(){return this.state.lastColor!==this.props.value&&(this.state={value:this.props.value,lastColor:this.props.value}),this.renderColorPicker()}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{disabled:!1},{disabled:!0}],[{value:Utils_1.default.HexColorToDecimal("#7289DA")},{value:null}],[{onChange:color=>{}}]),AllPreviews)}}exports.default=ColorPicker,ColorPicker.defaultProps={defaultColor:Constants.defaultColor,customColor:null,baseColors:Constants.baseColors,value:null,disabled:!1,onChange:noop_1.default},ColorPicker.help={info:"To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#yourcolor')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`",warn:"The component may not appear instantly. The component needs to be loaded, so you could experience 50-300ms loading time depending on your internet connection."}},function(module,exports,__webpack_require__){"use strict";module.exports=window.ReactDOM},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const components_1=__webpack_require__(8),Utils_1=__webpack_require__(2),uuid_1=__webpack_require__(6),TextInput_1=__webpack_require__(9);exports.default=new class PluginUtilities{constructor(){}renderSettings(settings){let items=this.renderSettingsToReact(settings),elem=React.createElement("div",{key:uuid_1.default()},items);return Utils_1.default.ReactToHTMLElement(elem)}renderSettingsToReact(settings){let items=[];return settings.forEach(item=>{if("object"!=typeof item)return items.push(item);item.props&&"children"in item.props&&(Array.isArray(item.props.children)||(item.props.children=[item.props.children]),item.props.children=this.renderSettingsToReact(item.props.children)),item.props||(item.props={}),item.props.key=uuid_1.default();let component=Utils_1.default.getNestedProps(components_1.default,item.component);if(component)items.push(React.createElement(component,Object.create(item.props)));else{let warning=new TextInput_1.default({value:`Warning: No component was found for: "${item.component}". Please correct your code.`,disabled:!0,error:`Warning: No component was found for: "${item.component}". Please correct your code.`}).render();items.push(warning)}}),items}}},function(module,exports){module.exports=require("uuid/v1")},function(module,exports){module.exports=require("uuid/v4")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let AlertBoxModules,AllPreviews;class AlertBox extends React.Component{get modules(){return AlertBoxModules||(AlertBoxModules=[WebpackLoader_1.default.find(e=>e.default&&"Markdown"===e.default.displayName&&e.default.defaultProps.parser).default])}render(){const[Markdown]=this.modules;let wrap,children;return"string"==typeof this.props.children?(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:this.props.children},Markdown.defaultProps)}),children=wrap.props.children):(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:""},Markdown.defaultProps)}),children=this.props.children),wrap.props.children=React.createElement("div",{className:"lc-alert-box lc-alert-box-"+this.props.type},React.createElement("blockquote",{className:"lc-blockquote"},children)),wrap}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"***Discord's*** **Markdown** _is_ [supported](https://google.com) or you can just insert your own react childs."}],[{type:"info"},{type:"success"},{type:"warn"},{type:"error"}]),AllPreviews)}}exports.default=AlertBox,AlertBox.defaultProps={type:"info",children:null},AlertBox.help={info:"You can insert markdown (as string) or normal react childs",warn:"All string will be interpreted as markdown. If you want raw string, pass an array with the string inside."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Notice=void 0;const Notices_1=__webpack_require__(7),Utils_1=__webpack_require__(2),uuid_1=__webpack_require__(6),cloneNullProto_1=__webpack_require__(4),events_1=__webpack_require__(11),Notice_1=__webpack_require__(10),excludeProperties_1=__webpack_require__(5),noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let soundModule;exports.default=new class DiscordTools{showNotice(data){if("object"!=typeof data||"string"!=typeof data.text)throw new Error("This notice is not valid. Given: "+Utils_1.default.formatJSObject(data));let newData=cloneNullProto_1.default(Object.assign({},Notice_1.defaultNotice,data));newData.id=uuid_1.default(),Notices_1.notices.push(newData),Notices_1.events.emit("noticeUpdate");return new Notice(newData)}get notices(){return Notices_1.notices.map(data=>new Notice(data))}showNotification(data){const notification=new window.Notification(data.title,excludeProperties_1.default(data,["title","onClick","onClose","onShow"]));return notification.onclick=data.onClick||noop_1.default,notification.onshow=data.onShow||noop_1.default,notification.onclose=data.onClose||noop_1.default,notification}createSound(sound){if(soundModule=soundModule||WebpackLoader_1.default.findByUniqueProperties(["createSound"]),!soundModule)throw new WebpackLoader_1.WebpackLoaderError("Couldn't find soundModule here.");return soundModule.createSound(sound)}playSound(sound){const created=this.createSound(sound);return created.play(),created}};const EventHandler=function(){this.removed!==this.state.removed&&this.removed&&this.emit("removed"),this.showing!==this.state.showing&&(this.showing?this.emit("showing",!0):this.emit("showing",!1)),this.index!==this.state.index&&this.emit("index",this.index)};class Notice extends events_1.EventEmitter{constructor(data){super(),this.data=data,this.state={removed:this.removed,showing:this.showing,index:this.index};let eventFunc=EventHandler.bind(this);Notices_1.events.on("noticeUpdate",eventFunc),this.on("removed",()=>{Notices_1.events.off("noticeUpdate",eventFunc)})}on(event,listener){return super.on(event,listener)}once(event,listener){return super.once(event,listener)}off(event,listener){return super.off(event,listener)}get removed(){return!Notices_1.notices.find(e=>e.id===this.id)}get showing(){return 0===this.index}get index(){return Notices_1.notices.findIndex(e=>e.id===this.id)}get id(){return this.data.id}get text(){return this.data.text}set text(text){this.data.text=text,Notices_1.events.emit("noticeUpdate")}get type(){return this.data.type}set type(type){this.data.type=type,Notices_1.events.emit("noticeUpdate")}get buttonText(){return this.data.buttonText}set buttonText(buttonText){this.data.buttonText=buttonText,Notices_1.events.emit("noticeUpdate")}get onClick(){return this.data.onClick}set onClick(onClick){this.data.onClick=onClick,Notices_1.events.emit("noticeUpdate")}remove(){this.removed||(Notices_1.notices.splice(this.index,1),Notices_1.events.emit("noticeUpdate"))}}exports.Notice=Notice},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.patch=void 0;const Utils_1=__webpack_require__(2),Notices_1=__webpack_require__(7);function getModule(filter){return new Promise(resolve=>{window.Lightcord.Api.ensureExported(filter).then(resolve).catch(err=>{console.error("[LIGHTCORD]",err,filter)})})}exports.patch=function patch(){getModule(e=>e.default&&"ConnectedAppView"===e.default.displayName).then(async mod=>{const appClasses=await getModule(e=>e.hasNotice),buildRender=original=>function render(){const returnValue=original.call(this,...arguments),newchildren=[];let children=returnValue.props.children[1].props.children;return Array.isArray(children)||(children=[children]),newchildren.push(children[0]),newchildren.push(React.createElement(Notices_1.default,{container:this})),newchildren.push(children[1]),returnValue.props.children[1].props.children=newchildren,returnValue.props.children[1].props.children[2].props.children[0].props.render=buildRenderChannelSidebar(returnValue.props.children[1].props.children[2].props.children[0].props.render),returnValue},buildRenderChannelSidebar=original=>function renderChannelSidebar(){const returnValue=original.call(this,...arguments),hasNotice=Notices_1.notices.length>0;return hasNotice?(Utils_1.default.hasClass(returnValue.props.className,appClasses.hasNotice)||(returnValue.props.className+=" "+Utils_1.default.removeDa(appClasses.hasNotice)),returnValue):returnValue};mod.default.prototype.render=buildRender(mod.default.prototype.render),async function(){const base=document.querySelector("."+Utils_1.default.removeDa(appClasses.base));if(!base)throw new Error("Could not find base here");const elem=Utils_1.default.FindReact(base);elem.render=buildRender(elem.render),elem.forceUpdate()}()})}},function(module,exports,__webpack_require__){"use strict";function unfreeze(o){var oo=void 0;if(o instanceof Array){oo=[];o.forEach((function(v){oo.push(v)}))}else if(o instanceof String)oo=new String(o).toString();else if("object"==typeof o)for(var property in oo={},o)oo[property]=o[property];return oo}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=unfreeze,Object.unfreeze=unfreeze}]); \ No newline at end of file +module.exports=function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=14)}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.WebpackLoaderError=void 0;const BDModules=window.BDModules||__webpack_require__(15);exports.default=new class WebpackLoader{constructor(){}get(id){return BDModules.get(id)}find(filter){let result=BDModules.get(filter)[0];return result||console.warn(filter,"couldn't find the module."),result}findByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})[0]}filter(filter){return BDModules.get(filter)}filterByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})}};class WebpackLoaderError extends Error{constructor(message=""){super(message+="\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server."),this.name="WebpackLoaderError"}}exports.WebpackLoaderError=WebpackLoaderError},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function NOOP(){}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ReactDOM=__webpack_require__(27),PluginUtilities_1=__webpack_require__(30);exports.default=new class Utils{constructor(){}ReactToHTMLElement(ReactElement){const element=document.createElement("div");return ReactDOM.render(ReactElement,element),element}get PluginUtils(){return PluginUtilities_1.default}getNestedProps(obj,path){let segments=path.split(".");for(let seg of segments)obj=obj&&seg in obj?obj[seg]:void 0;return obj}DecimalColorToHex(color){return"#"+color.toString(16).toUpperCase()}HexColorToDecimal(color){color=color.replace(/[#;]/g,"");let res=parseInt(color,16);if(isNaN(res))throw new Error("Invalid color: "+color);return res}removeDa(className){return className?className.split(" ").filter(e=>!e.startsWith("da-")).join(" "):className}FindReact(dom,traverseUp=0){const domFiber=dom[Object.keys(dom).find(key=>key.startsWith("__reactInternalInstance$"))];if(null==domFiber)return null;if(domFiber._currentElement){let compFiber=domFiber._currentElement._owner;for(let i=0;i{let parentFiber=fiber.return;for(;"string"==typeof parentFiber.type;)parentFiber=parentFiber.return;return parentFiber};let compFiber=GetCompFiber(domFiber);for(let i=0;ithis.formatJSObject(e)).join(",\n ")}\n]`:"[]";{const keys=Object.keys(obj);return 0===keys.length?"{}":`{\n ${keys.map(key=>{let original=key;return"symbol"==typeof key?key="["+String(key)+"]":"number"==typeof key?key=String(key):(console.log(key),(isNaN(parseInt(key[0]))||/[^\w\d_$]/g.test(key))&&(key=this.formatJSObject(key))),`${key}: ${this.formatJSObject(obj[original])}`})}\n}`}}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const uuidv1=__webpack_require__(31),uuidv4=__webpack_require__(32);let uuid=Object.assign((function(){return uuidv4()}),{v1:()=>uuidv1(),v4:()=>uuidv4()});exports.default=uuid},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let TitleModules,AllPreviews;class Title extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.colorStandard),WebpackLoader_1.default.find(e=>"string"==typeof e.size32),WebpackLoader_1.default.find(e=>"string"==typeof e.h2)])}render(){let[colorModule,sizeModule,titleModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h2} ${titleModule.defaultColor} ${titleModule.defaultMarginh2}`;return props.className&&(className+=" "+props.className),React.createElement("h2",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=Title,Title.defaultProps={children:null,className:null}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function cloneNullProto(obj){let o=Object.create(null);return Object.keys(obj).forEach(k=>{o[k]=obj[k]}),o}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function excludeProperties(obj,props){let newObj={};return Object.keys(obj).forEach(k=>{props.includes(k)||(newObj[k]=obj[k])}),newObj}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notices=exports.events=void 0;const Notice_1=__webpack_require__(11),events_1=__webpack_require__(12);exports.events=new events_1.EventEmitter;class Notices extends React.Component{constructor(props){super(props),this.noticeHandler=this.noticeHandler.bind(this)}noticeHandler(){this.forceUpdate()}componentWillMount(){exports.events.on("noticeUpdate",this.noticeHandler)}componentWillUnmount(){exports.events.off("noticeUpdate",this.noticeHandler)}render(){if(!this.hasNotice)return null;const notice=exports.notices[0];return React.createElement(Notice_1.default,Object.assign({},notice))}get hasNotice(){return exports.notices.length>0}}exports.default=Notices,Notices.displayName="LightcordNotices",Notices.defaultProps={},exports.notices=[]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Button_1=__webpack_require__(16),Switch_1=__webpack_require__(17),RadioGroup_1=__webpack_require__(18),TextArea_1=__webpack_require__(19),TextInput_1=__webpack_require__(9),Dropdown_1=__webpack_require__(20),Title_1=__webpack_require__(4),SettingsTitle_1=__webpack_require__(21),Tabs_1=__webpack_require__(22),SettingSubTitle_1=__webpack_require__(23),CodeBlock_1=__webpack_require__(24),cloneNullProto_1=__webpack_require__(5),Tooltip_1=__webpack_require__(25),ColorPicker_1=__webpack_require__(26),AlertBox_1=__webpack_require__(33),ErrorCatcher_1=__webpack_require__(34),RadioGroupProxied=ErrorCatcher_1.createProxyErrorCatcherClass(RadioGroup_1.default);exports.default=cloneNullProto_1.default({inputs:cloneNullProto_1.default({Button:ErrorCatcher_1.createProxyErrorCatcherClass(Button_1.default),Switch:ErrorCatcher_1.createProxyErrorCatcherClass(Switch_1.default),Choices:RadioGroupProxied,RadioGroup:RadioGroupProxied,TextArea:ErrorCatcher_1.createProxyErrorCatcherClass(TextArea_1.default),TextInput:ErrorCatcher_1.createProxyErrorCatcherClass(TextInput_1.default),Dropdown:ErrorCatcher_1.createProxyErrorCatcherClass(Dropdown_1.default),ColorPicker:ErrorCatcher_1.createProxyErrorCatcherClass(ColorPicker_1.default)}),general:cloneNullProto_1.default({Title:ErrorCatcher_1.createProxyErrorCatcherClass(Title_1.default),SettingsTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingsTitle_1.default),SettingSubTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingSubTitle_1.default),Tabs:ErrorCatcher_1.createProxyErrorCatcherClass(Tabs_1.default),CodeBlock:ErrorCatcher_1.createProxyErrorCatcherClass(CodeBlock_1.default),Tooltip:ErrorCatcher_1.createProxyErrorCatcherClass(Tooltip_1.default),AlertBox:ErrorCatcher_1.createProxyErrorCatcherClass(AlertBox_1.default)})})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let TextInputModules,AllPreviews;class TextInput extends React.PureComponent{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.state={value:props.value||""}}get modules(){return TextInputModules||(TextInputModules=[WebpackLoader_1.default.find(e=>e.default&&"TextInput"===e.default.displayName).default])}onChange(value,name){this.hasSet=!1,this.props.onChange(value,name,this),this.hasSet||(this.setState({value:value}),this.forceUpdate())}onFocus(ev,name){this.props.onFocus(ev,name,this)}onBlur(ev,name){this.props.onBlur(ev,name,this)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,value:this.state.value}))}get value(){return this.state.value||""}setValue(value){this.setState({value:value}),this.forceUpdate(),this.hasSet=!0}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textinput"}],[{size:"default"},{size:"mini"}],[{disabled:!1},{disabled:!0}],[{placeholder:""}],[{value:""}],[{error:null},{error:"Example error"}],[{maxLength:999}],[{className:""}],[{inputClassName:""}],[{id:"api-preview-textinput"}],[{onChange:(value,name)=>{}}]),AllPreviews)}}exports.default=TextInput,TextInput.defaultProps={name:"",size:"default",disabled:!1,placeholder:"",value:"",error:null,maxLength:999,className:"",inputClassName:"",id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default},TextInput.help={warn:"This should be used for single line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Notice=void 0;const Notices_1=__webpack_require__(7),Utils_1=__webpack_require__(2),uuid_1=__webpack_require__(3),cloneNullProto_1=__webpack_require__(5),events_1=__webpack_require__(12),Notice_1=__webpack_require__(11),excludeProperties_1=__webpack_require__(6),noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let soundModule;exports.default=new class DiscordTools{showNotice(data){if("object"!=typeof data||"string"!=typeof data.text)throw new Error("This notice is not valid. Given: "+Utils_1.default.formatJSObject(data));let newData=cloneNullProto_1.default(Object.assign({},Notice_1.defaultNotice,data));newData.id=uuid_1.default(),Notices_1.notices.push(newData),Notices_1.events.emit("noticeUpdate");return new Notice(newData)}get notices(){return Notices_1.notices.map(data=>new Notice(data))}showNotification(data){const notification=new window.Notification(data.title,excludeProperties_1.default(data,["title","onClick","onClose","onShow"]));return notification.onclick=data.onClick||noop_1.default,notification.onshow=data.onShow||noop_1.default,notification.onclose=data.onClose||noop_1.default,notification}createSound(sound){if(soundModule=soundModule||WebpackLoader_1.default.findByUniqueProperties(["createSound"]),!soundModule)throw new WebpackLoader_1.WebpackLoaderError("Couldn't find soundModule here.");return soundModule.createSound(sound)}playSound(sound){const created=this.createSound(sound);return created.play(),created}};const EventHandler=function(){this.removed!==this.state.removed&&this.removed&&this.emit("removed"),this.showing!==this.state.showing&&(this.showing?this.emit("showing",!0):this.emit("showing",!1)),this.index!==this.state.index&&this.emit("index",this.index)};class Notice extends events_1.EventEmitter{constructor(data){super(),this.nextTickRefresh=!1,this.data=data,this.state={removed:this.removed,showing:this.showing,index:this.index};let eventFunc=EventHandler.bind(this);Notices_1.events.on("noticeUpdate",eventFunc),this.on("removed",()=>{Notices_1.events.off("noticeUpdate",eventFunc)})}on(event,listener){return super.on(event,listener)}once(event,listener){return super.once(event,listener)}off(event,listener){return super.off(event,listener)}get removed(){return!Notices_1.notices.find(e=>e.id===this.id)}get showing(){return 0===this.index}get index(){return Notices_1.notices.findIndex(e=>e.id===this.id)}get id(){return this.data.id}update(data){for(let key in data)"id"!==key&&(this.data[key]=data[key]);this.nextTickRefresh||(this.nextTickRefresh=!0,process.nextTick(()=>{this.nextTickRefresh=!1,Notices_1.events.emit("noticeUpdate")}))}get text(){return this.data.text}set text(text){this.update({text:text})}get type(){return this.data.type}set type(type){this.update({type:type})}get buttonText(){return this.data.buttonText}set buttonText(buttonText){this.update({buttonText:buttonText})}get onClick(){return this.data.onClick}set onClick(onClick){this.update({onClick:onClick})}remove(){this.removed||(Notices_1.notices.splice(this.index,1),Notices_1.events.emit("noticeUpdate"))}}exports.Notice=Notice},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultNotice=void 0;const WebpackLoader_1=__webpack_require__(0),Notices_1=__webpack_require__(7),noop_1=__webpack_require__(1);let NoticeModules;exports.defaultNotice={text:"",id:"unknown id",onClick:noop_1.default,buttonText:null,type:"default"};class Notice extends React.Component{get modules(){return NoticeModules||(NoticeModules=[WebpackLoader_1.default.find(e=>e.noticeInfo)])}render(){const[noticeClasses]=this.modules,className=noticeClasses["notice"+this.props.type.slice(0,1).toUpperCase()+this.props.type.slice(1)];if(!className)return Notices_1.notices.pop(),setImmediate(()=>{Notices_1.events.emit("noticeUpdate")}),null;const button=this.props.buttonText?React.createElement("button",{className:noticeClasses.button,onClick:()=>{Notices_1.notices.pop(),this.props.onClick(),Notices_1.events.emit("noticeUpdate")}},this.props.buttonText):null;return React.createElement("div",{className:className},React.createElement("div",{className:noticeClasses.dismiss,role:"button",tabIndex:0,onClick:()=>{Notices_1.notices.pop(),Notices_1.events.emit("noticeUpdate")}}),this.props.text,button)}}exports.default=Notice,Notice.displayName="LightcordNotice",Notice.defaultProps=exports.defaultNotice},function(module,exports){module.exports=require("events")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isImported=exports.isNative=void 0,exports.isNative=void 0===window.BDModules,exports.isImported=void 0!==window.BDModules},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),components_1=__webpack_require__(8),uuid_1=__webpack_require__(3),Utils_1=__webpack_require__(2),DiscordTools_1=__webpack_require__(10),patchers=__webpack_require__(35),excludeProperties_1=__webpack_require__(6),cloneNullProto_1=__webpack_require__(5),noop_1=__webpack_require__(1),Unfreeze_1=__webpack_require__(36),environnement_1=__webpack_require__(13);patchers.patch();const LightcordApi={WebpackLoader:WebpackLoader_1.default,Components:components_1.default,uuid:uuid_1.default,Utils:Utils_1.default,DiscordTools:DiscordTools_1.default,_:{excludeProperties:excludeProperties_1.default,cloneNullProto:cloneNullProto_1.default,NOOP:noop_1.default,unfreeze:Unfreeze_1.default},get isNative(){return environnement_1.isNative},get isImported(){return environnement_1.isImported}};exports.default=LightcordApi,Object.assign(window.Lightcord.Api,LightcordApi)},function(module,exports,__webpack_require__){"use strict";let req;function filterDangerous(mods){return mods.map(e=>function protect(exports){let theModule=exports.exports,mod=theModule.default;if(!mod)return exports;if(mod.remove&&mod.set&&mod.clear&&mod.get&&!mod.sort)return null;if(!mod.getToken&&!mod.getEmail&&!mod.showToken)return exports;const proxy=new Proxy(mod,{getOwnPropertyDescriptor:function(obj,prop){if("getToken"!==prop&&"getEmail"!==prop&&"showToken"!==prop)return Object.getOwnPropertyDescriptor(obj,prop)},get:function(obj,func){return"getToken"==func&&obj.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==func&&obj.getEmail?()=>"puppet11112@gmail.com":"showToken"==func&&obj.showToken?()=>!0:"__proto__"==func&&obj.__proto__?proxy:obj[func]}});return Object.assign({},exports,{exports:Object.assign({},theModule,{default:proxy})})}(e))}Object.defineProperty(exports,"__esModule",{value:!0}),setReq();function setReq(){try{req=window.webpackJsonp.push([[],{__extra_id__:(mdl,exports,req)=>mdl.exports=req},[["__extra_id__"]]]),req&&(delete req.m.__extra_id__,delete req.c.__extra_id__)}catch(e){req=void 0}}exports.default=new class Webpackloader{get modules(){return req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):(setReq(),req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):[])}get(ids,modules){if("function"==typeof ids)return(modules||this.modules).map(mdl=>mdl&&void 0!==mdl.exports?mdl.exports:null).filter(e=>e).filter(ids);if(Array.isArray(ids))return modules=modules||this.modules,ids.map(id=>this.get(id,modules));{let module=(modules=modules||this.modules).filter(e=>!!e).find(e=>e.i===ids);if(!module)return;return module.exports}}get default(){return this}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let ButtonModules,AllPreviews;class Button extends React.Component{constructor(props){super(props),this.state={hover:!1}}get modules(){return ButtonModules||(ButtonModules=[WebpackLoader_1.default.findByUniqueProperties(["_horizontal"]),WebpackLoader_1.default.findByUniqueProperties(["colorTransparent"]),WebpackLoader_1.default.findByUniqueProperties(["buttonWrapper"]),WebpackLoader_1.default.findByUniqueProperties(["ButtonColors"])])}render(){let[flexModule,euhModule1,buttonModule,colorsModule]=this.modules,props={};this.props&&("color"in this.props&&(props.color=this.props.color),"children"in this.props&&(props.children=this.props.children),"onClick"in this.props&&(props.onClick=this.props.onClick),"wrapper"in this.props&&(props.wrapper=!!this.props.wrapper),"look"in this.props&&(props.look=this.props.look),"size"in this.props&&(props.size=this.props.size),"hoverColor"in this.props&&(props.hoverColor=this.props.hoverColor),"disabled"in this.props?props.disabled=this.props.disabled:props.disabled=!1),props.color?(props.color=props.color.toLowerCase(),Button.Colors.includes(props.color)||(props.color=Button.Colors[0])):props.color=Button.Colors[0],props.look?(props.look=props.look.toLowerCase(),Button.Looks.includes(props.look)||(props.look=Button.Looks[0])):props.look=Button.Looks[0],props.size?(props.size=props.size.toLowerCase(),Button.Sizes.includes(props.size)||(props.size=Button.Sizes[0])):props.size=Button.Sizes[0],props.hoverColor?(props.hoverColor=props.hoverColor.toLowerCase(),Button.HoverColors.includes(props.hoverColor)||(props.hoverColor=Button.HoverColors[0])):props.hoverColor=Button.HoverColors[0];let buttonSize=props.size&&colorsModule.ButtonSizes[props.size.toUpperCase()]||"";buttonSize&&(buttonSize=" "+buttonSize);let hoverColor=props.hoverColor&&colorsModule.ButtonHovers[props.hoverColor.toUpperCase()]||"";hoverColor&&(hoverColor=" "+hoverColor),props.onClick="function"==typeof props.onClick?props.onClick:()=>{},"boolean"!=typeof props.wrapper&&(props.wrapper=!0);let hover=this.state.hover?euhModule1.hasHover:"";hover&&(hover=" "+hover);let button=React.createElement("button",{type:"button",className:`${flexModule.flexChild} ${euhModule1.button} ${colorsModule.ButtonLooks[props.look.toUpperCase()]} ${colorsModule.ButtonColors[props.color.toUpperCase()]}${buttonSize}${hoverColor}${hover} ${euhModule1.grow}`,style:{flex:"0 1 auto"},onClick:this.props.onClick,onMouseEnter:ev=>{hoverColor&&this.setState({hover:!0})},onMouseLeave:ev=>{hoverColor&&this.setState({hover:!1})},disabled:props.disabled},React.createElement("div",{className:euhModule1.contents},props.children));return props.wrapper?React.createElement("div",{className:buttonModule.buttonWrapper},button):button}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[];let colors=[];for(let color of Button.Colors)colors.push({color:color});AllPreviews.push(colors);let looks=[];for(let look of Button.Looks)looks.push({look:look});AllPreviews.push(looks);let sizes=[];for(let size of Button.Sizes)sizes.push({size:size});AllPreviews.push(sizes);let hovers=[];for(let hover of Button.HoverColors)hovers.push({hoverColor:hover});return AllPreviews.push(hovers),AllPreviews.push([{children:"Test Button"}]),AllPreviews.push([{onClick:()=>{}}]),AllPreviews.push([{wrapper:!1}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews})()}}exports.default=Button,Button.Colors=["brand","grey","red","green","yellow","primary","link","white","black","transparent"],Button.Looks=["filled","inverted","outlined","ghost","link","blank"],Button.Sizes=["small","medium","large","xlarge","min","max","icon","none"],Button.HoverColors=["default",...Button.Colors]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let SwitchModules,AllPreviews;class Switch extends React.Component{constructor(props){super(props),this.state={value:props.value||!1},this.onChange=this.onChange.bind(this)}get modules(){return SwitchModules||(SwitchModules=[WebpackLoader_1.default.find(e=>e.default&&"Switch"===e.default.displayName).default])}render(){let[SwitchComponent]=this.modules,props=this.props;return React.createElement(SwitchComponent,{id:props.id,onChange:this.onChange,value:this.state.value||!1,fill:props.fill,theme:SwitchComponent.Themes[props.theme.toUpperCase()],disabled:props.disabled,className:props.className,size:SwitchComponent.Sizes[props.size.toUpperCase()],style:props.style})}onChange(value){this.props.onChange(!this.state.value),this.setState({value:!this.state.value})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{onChange:value=>{}}]),AllPreviews.push([{value:!1}],[{theme:"default"},{theme:"clear"}],[{disabled:!1},{disabled:!0}],[{id:"api-preview-switch"}],[{fill:null}],[{size:"default"},{size:"mini"}],[{style:{}}]),AllPreviews)}}exports.default=Switch,Switch.defaultProps={id:null,onChange:noop_1.default,value:!1,fill:null,theme:"default",disabled:!1,className:null,size:"default",style:{}},Switch.help={error:"The `clear` option doesn't work well on light theme."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let RadioGroupModule,AllPreviews;class RadioGroup extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value}}onChange(ev){this.props.onChange(ev.value),this.setState({value:ev.value})}get modules(){return RadioGroupModule||(RadioGroupModule=[WebpackLoader_1.default.find(e=>e.default&&"RadioGroup"===e.default.displayName).default])}render(){let[RadioGroupComponent]=this.modules,props=this.props;return React.createElement(RadioGroupComponent,{options:props.options,onChange:this.onChange,value:this.state.value,disabled:props.disabled,size:RadioGroupComponent.Sizes[props.size.toUpperCase()],itemType:RadioGroupComponent.ItemTypes[props.itemType.toUpperCase()],infoClassName:props.infoClassName})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{options:[{value:"option1",name:"Option 1",desc:"description 1"},{value:"option2",name:"Option 2",desc:"description 2"},{value:"option3",name:"Option 3",desc:"description 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{size:"medium"},{size:"small"}],[{itemType:"bar"},{itemType:"panel"}]),AllPreviews)}}exports.default=RadioGroup,RadioGroup.defaultProps={options:[{value:"none",name:"No options",desc:"No options was passed to Choices. If you meant to display no options at all, please pass an empty array.",color:"#f04747"}],value:null,disabled:!1,size:"medium",itemType:"bar",infoClassName:null,onChange:noop_1.default}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),noop_1=__webpack_require__(1);let TextAreaModules,AllPreviews;class TextArea extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this),this.state={value:props.value||""}}get modules(){return TextAreaModules||(TextAreaModules=[WebpackLoader_1.default.find(e=>e.default&&"TextArea"===e.default.displayName).default])}onChange(value,name){this.props.onChange(value,name),this.setState({value:value})}onFocus(ev,name){this.props.onFocus(ev,name)}onBlur(ev,name){this.props.onBlur(ev,name)}onKeyDown(ev){this.props.onKeyDown(ev)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,value:this.state.value}))}get value(){return this.state.value||""}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textarea"}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews.push([{placeholder:null}]),AllPreviews.push([{autoFocus:!1},{autoFocus:!0}]),AllPreviews.push([{resizeable:!1},{resizeable:!0}]),AllPreviews.push([{flex:!1},{flex:!0}]),AllPreviews.push([{autosize:!1},{autosize:!0}]),AllPreviews.push([{rows:3},{rows:2},{rows:1}]),AllPreviews.push([{value:""}]),AllPreviews.push([{error:null},{error:"Example error"}]),AllPreviews.push([{maxLength:100}]),AllPreviews.push([{className:""}]),AllPreviews.push([{inputClassName:""}]),AllPreviews.push([{id:"api-preview-textarea"}]),AllPreviews)}}exports.default=TextArea,TextArea.defaultProps={name:null,disabled:!1,placeholder:null,autoFocus:!1,resizeable:!1,flex:!1,autosize:!1,rows:3,value:"",error:null,maxLength:null,className:null,id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default,onKeyDown:noop_1.default},TextArea.help={warn:"This should be used for multi line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0);let DropdownModules,AllPreviews;class Dropdown extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value||null}}onChange(value){this.props.onChange(value),this.setState({value:value})}get modules(){return DropdownModules||(DropdownModules=[WebpackLoader_1.default.find(e=>e.default&&"SelectTempWrapper"===e.default.displayName).default])}render(){let[DropdownComponent]=this.modules,props=this.props;return React.createElement(DropdownComponent,Object.assign({},props,{onChange:this.onChange,value:this.state.value}))}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{error:null},{error:"An error occured"}],[{options:[{value:"option1",label:"Option 1"},{value:"option2",label:"Option 2"},{value:"option3",label:"Option 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{searchable:!0},{searchable:!1}],[{clearable:!0},{clearable:!1}],[{isMulti:!1},{isMulti:!0}]),AllPreviews)}}exports.default=Dropdown,Dropdown.defaultProps={className:null,error:null,options:[{value:"none",label:"No options - No options was passed to Dropdown. If you meant to put an empty dropdown, input an empty array."}],valueRenderer:null,multiValueRenderer:null,optionRenderer:null,onChange:noop_1.default,value:null,disabled:!1,searchable:!1,clearable:!1,styleOverrides:null,lightThemeColorOverrides:null,darkThemeColorOverrides:null,isMulti:!1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),Title_1=__webpack_require__(4);let TitleModules,AllPreviews;class SettingsTitle extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60)])}render(){let[marginModule]=this.modules,props=this.props,className=`${marginModule.marginTop60} ${marginModule.marginBottom20}`;return props.className&&(className=0+props.className),React.createElement(Title_1.default,{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingsTitle,SettingsTitle.defaultProps={children:[""],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Tab=void 0;const noop_1=__webpack_require__(1),Title_1=__webpack_require__(4);class Tabs extends React.Component{constructor(props){super(props),this.tabsElements=[],this.state={active:this.props.active||null}}get tabs(){return this.props.tabs||[]}changeTab(tab){tab!==this.state.active&&(this.props.onChange&&this.props.onChange(tab),this.setState({active:tab}),this.tabsElements.forEach(e=>e.setActive(tab===e.props.id)))}render(){return React.createElement("div",{className:"lc-tabWrapper",style:this.props.style},React.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},this.tabs.map(tab=>React.createElement(Tab,{TabContainer:this,title:tab.label,id:tab.id,key:btoa(tab.label+":"+tab.id)}))),React.createElement("div",{className:"lc-tab"},this.props.children))}isActive(tab){return this.state.active===tab}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:React.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(Title_1.default,null,"Preview tabs")))}],[{tabs:[{label:"Active tab",id:"1"},{label:"Unactive tab",id:"2"}]}],[{active:"1"}],[{onChange:tabId=>{}}]),AllPreviews)}}let AllPreviews;exports.default=Tabs,Tabs.defaultProps={children:null,tabs:[{label:"No tabs was passed to .",id:"none"}],active:null,onChange:noop_1.default,style:{}};class Tab extends React.Component{constructor(props){super(props),this.state={active:props.TabContainer.isActive(props.id)},this.props.TabContainer.tabsElements.push(this)}setActive(isActive){this.setState({active:!!isActive})}render(){let className="lc-navItem";return this.state.active?className+=" lc-navItemActive":className+=" lc-navItemInactive",React.createElement("div",{className:className,onClick:()=>{this.props.TabContainer.changeTab(this.props.id)}},this.props.title)}}exports.Tab=Tab},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let TitleModules,AllPreviews;class SettingSubTitle extends React.Component{get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60),WebpackLoader_1.default.findByUniqueProperties(["h5"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["size14"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["colorStandard"])])}render(){let[marginModule,titleModule,sizeModule,colorModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h5} ${marginModule.marginBottom4}`;return props.className&&(className=0+props.className),React.createElement("h5",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingSubTitle,SettingSubTitle.defaultProps={children:[],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let CodeBlockModules,AllPreviews;class CodeBlock extends React.Component{get modules(){return CodeBlockModules||(CodeBlockModules=[WebpackLoader_1.default.find(e=>e.markup),WebpackLoader_1.default.find(e=>e.messageContent),WebpackLoader_1.default.find(e=>e.scrollbarGhostHairline),WebpackLoader_1.default.find(e=>e.highlight),WebpackLoader_1.default.find(e=>e.marginBottom8)])}render(){let[messageModule1,messageModule2,scrollbarModule1,hightlightJS,marginModule1]=this.modules;const code="plaintext"===this.props.language?React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs"},this.props.content):React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:hightlightJS.highlight(this.props.language,this.props.content).value}});return React.createElement("div",{className:`${messageModule1.markup} ${messageModule2.messageContent}`},React.createElement("pre",null,code),React.createElement("div",{className:marginModule1.marginBottom8}))}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{content:'console.log("Exemple code")'}]),AllPreviews.push([{language:"js"},{language:"plaintext"},...CodeBlock.prototype.modules[3].listLanguages().filter(e=>"js"!==e).map(e=>({language:e}))]),AllPreviews)}}exports.default=CodeBlock,CodeBlock.defaultProps={language:"plaintext",content:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0),excludeProperties_1=__webpack_require__(6);let TooltipModules,AllPreviews;class Tooltip extends React.Component{constructor(props){super(props)}get modules(){return TooltipModules||(TooltipModules=[WebpackLoader_1.default.find(e=>e.default&&"Tooltip"===e.default.displayName)])}render(){let[Tooltip]=this.modules,props=excludeProperties_1.default(this.props,["children"]);return React.createElement(Tooltip.default,props,data=>React.createElement("div",Object.assign(Object.assign({},data),{style:{width:"fit-content",height:"fit-content"}}),this.props.children))}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[],AllPreviews.push([{children:React.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"green",look:"ghost",size:"small",hoverColor:"yellow",onClick:()=>{},wrapper:!1},"Hover this button to see the tooltip")}]),AllPreviews.push([{text:"Example Tooltip Text"}]);let colors=[];Tooltip.Colors.forEach(color=>{colors.push({color:color})}),AllPreviews.push(colors);let positions=[];return Tooltip.Positions.forEach(p=>{positions.push({position:p})}),AllPreviews.push(positions),AllPreviews})()}}exports.default=Tooltip,Tooltip.defaultProps={children:null,text:"No text was passed to Tooltip",position:"top",color:"brand"},Tooltip.Positions=["top","left","right","bottom"],Tooltip.Colors=["black","grey","brand","green","yellow","red"]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(1),WebpackLoader_1=__webpack_require__(0),Utils_1=__webpack_require__(2),Constants={defaultColor:10070709,baseColors:[1752220,3066993,3447003,10181046,15277667,15844367,15105570,15158332,9807270,6323595,1146986,2067276,2123412,7419530,11342935,12745742,11027200,10038562,9936031,5533306]};let ColorPickerModules,AllPreviews,isFetching=null;class ColorPicker extends React.PureComponent{constructor(props){super(props),this.state={value:props.value||null,lastColor:this.props.value},this.onChange=this.onChange.bind(this)}static preload(){if(!ColorPicker.prototype.modules[0]&&!isFetching)try{new ColorPicker({}).render()}catch(e){console.error(e)}}onChange(val){this.props.onChange(val),this.setState({value:val}),this.forceUpdate()}get modules(){return ColorPickerModules||(ColorPickerModules=[WebpackLoader_1.default.find(e=>e.default&&"ColorPicker"===e.default.displayName)])}renderColorPicker(){let[ColorPickerComponent]=this.modules;if(!ColorPickerComponent){if(isFetching)return isFetching.then(()=>this.forceUpdate()),null;let resolve;ColorPickerModules=null,isFetching=new Promise(res=>resolve=res);const GuildSettingsRoles=(new(WebpackLoader_1.default.find(e=>e.default&&e.default.displayName&&e.default.displayName.includes("GuildSettingsRoles")).default)).render().type;let children=GuildSettingsRoles.prototype.renderRoleSettings.call({props:{guild:{roles:[],id:null,isOwner:()=>!1},currentUser:{id:null}},getSelectedRole:()=>({id:null}),renderHeader:GuildSettingsRoles.prototype.renderHeader}).props.children[1].type.prototype.renderColorPicker.call({props:{role:{id:null,color:0},locked:!1,everyone:!1}}).props.children;return children.type(children.props).props.children.type._ctor().then(c=>{ColorPickerModules=null,this.forceUpdate(),resolve()}),null}return React.createElement(ColorPickerComponent.default,{colors:this.props.baseColors,defaultColor:this.props.defaultColor,value:this.state.value,disabled:this.props.disabled,onChange:this.onChange,customColor:this.props.customColor})}render(){return this.state.lastColor!==this.props.value&&(this.state={value:this.props.value,lastColor:this.props.value}),this.renderColorPicker()}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{disabled:!1},{disabled:!0}],[{value:Utils_1.default.HexColorToDecimal("#7289DA")},{value:null}],[{onChange:color=>{}}]),AllPreviews)}}exports.default=ColorPicker,ColorPicker.defaultProps={defaultColor:Constants.defaultColor,customColor:null,baseColors:Constants.baseColors,value:null,disabled:!1,onChange:noop_1.default},ColorPicker.help={info:"To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#7289DA')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`",warn:"The component may not appear instantly. The component needs to be loaded, so you could experience 50-300ms loading time depending on your internet connection."}},function(module,exports,__webpack_require__){"use strict";const selectors_1=__webpack_require__(28);window.ReactDOM=window.ReactDOM||(()=>{try{return window.BdApi.findModule(selectors_1.ReactDOMSelector)}catch(e){return null}})()||(()=>{try{return __webpack_require__(29).ReactDOM}catch(e){return null}})()||(()=>{try{return window.EDApi.findModule(selectors_1.ReactDOMSelector)}catch(e){return null}})(),module.exports=window.ReactDOM},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ReactDOMSelector=exports.ReactSelector=void 0,exports.ReactSelector=mod=>!["Component","PureComponent","Children","createElement","cloneElement"].find(k=>!mod[k]),exports.ReactDOMSelector=mod=>mod.findDOMNode},function(module,exports){module.exports=require("powercord/webpack")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const components_1=__webpack_require__(8),Utils_1=__webpack_require__(2),uuid_1=__webpack_require__(3),TextInput_1=__webpack_require__(9);exports.default=new class PluginUtilities{constructor(){}renderSettings(settings){let items=this.renderSettingsToReact(settings),elem=React.createElement("div",{key:uuid_1.default()},items);return Utils_1.default.ReactToHTMLElement(elem)}renderSettingsToReact(settings){let items=[];return settings.forEach(item=>{if("object"!=typeof item)return items.push(item);item.props&&"children"in item.props&&(Array.isArray(item.props.children)||(item.props.children=[item.props.children]),item.props.children=this.renderSettingsToReact(item.props.children)),item.props||(item.props={}),item.props.key=uuid_1.default();let component=Utils_1.default.getNestedProps(components_1.default,item.component);if(component)items.push(React.createElement(component,Object.create(item.props)));else{let warning=new TextInput_1.default({value:`Warning: No component was found for: "${item.component}". Please correct your code.`,disabled:!0,error:`Warning: No component was found for: "${item.component}". Please correct your code.`}).render();items.push(warning)}}),items}}},function(module,exports){module.exports=require("uuid/v1")},function(module,exports){module.exports=require("uuid/v4")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(0);let AlertBoxModules,AllPreviews;class AlertBox extends React.Component{get modules(){return AlertBoxModules||(AlertBoxModules=[WebpackLoader_1.default.find(e=>e.default&&"Markdown"===e.default.displayName&&e.default.defaultProps.parser).default])}render(){const[Markdown]=this.modules;let wrap,children;return"string"==typeof this.props.children?(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:this.props.children},Markdown.defaultProps)}),children=wrap.props.children):(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:""},Markdown.defaultProps)}),children=this.props.children),wrap.props.children=React.createElement("div",{className:"lc-alert-box lc-alert-box-"+this.props.type},React.createElement("blockquote",{className:"lc-blockquote"},children)),wrap}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"***Discord's*** **Markdown** _is_ [supported](https://google.com) or you can just insert your own react childs."}],[{type:"info"},{type:"success"},{type:"warn"},{type:"error"}]),AllPreviews)}}exports.default=AlertBox,AlertBox.defaultProps={type:"info",children:null},AlertBox.help={info:"You can insert markdown (as string) or normal react childs",warn:"All string will be interpreted as markdown. If you want raw string, pass an array with the string inside."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProxyErrorCatcherClass=void 0;const WebpackLoader_1=__webpack_require__(0),DiscordTools_1=__webpack_require__(10),noop_1=__webpack_require__(1),uuid_1=__webpack_require__(3);let ErrorCatcherModules;class ErrorCatcher extends React.Component{constructor(props){super(props),this.defaultProps={children:null},this.state={error:!1,hasSentNotification:!1}}get modules(){return ErrorCatcherModules||(ErrorCatcherModules=[WebpackLoader_1.default.find(e=>e.emptyStateImage&&e.emptyState)])}render(){if(this.state.error){const[emptyClasses]=this.modules;if(!emptyClasses){if(this.state.hasSentNotification)return null;const notification=DiscordTools_1.default.showNotification({body:"An error occured. Please check the console for more informations.",icon:"https://github.com/lightcord.png",onClick:noop_1.default,onClose:noop_1.default,onShow:noop_1.default,title:"Lightcord Informations"});return this.setState({hasSentNotification:!0}),setTimeout(()=>{notification.close()},2e3),null}return React.createElement("div",{className:emptyClasses.emptyState},React.createElement("div",{className:emptyClasses.emptyStateImage,style:{marginTop:"20px"}}),React.createElement("div",{className:emptyClasses.emptyStateHeader},"An error occured"),React.createElement("p",{className:emptyClasses.emptyStateSubtext},"Please check the console for more informations. Join our ­support server for more help."))}return this.props.children}componentDidCatch(error,errorInfo){console.error(errorInfo.componentStack),this.setState({error:!0})}}exports.default=ErrorCatcher,exports.createProxyErrorCatcherClass=function createProxyErrorCatcherClass(Class){var _a;const ClassCopy=((_a=class Proxied extends React.Component{render(){return React.createElement(ErrorCatcher,{key:uuid_1.default()},React.createElement(Class,Object.assign(Object.assign({},this.props),{key:uuid_1.default()})))}static get original(){return Class}}).displayName=Class.displayName||Class.name,_a);return Object.entries(Object.getOwnPropertyDescriptors(Class)).forEach(value=>{value[0]in ClassCopy||Object.defineProperty(ClassCopy,value[0],value[1])}),ClassCopy}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.patch=void 0;const Utils_1=__webpack_require__(2),Notices_1=__webpack_require__(7),environnement_1=__webpack_require__(13);function getModule(filter){return new Promise(resolve=>{window.Lightcord.Api.ensureExported(filter).then(resolve).catch(err=>{console.error("[LIGHTCORD]",err,filter)})})}exports.patch=function patch(){getModule(e=>e.default&&"ConnectedAppView"===e.default.displayName).then(async mod=>{const appClasses=await getModule(e=>e.hasNotice),buildRender=original=>function render(){const returnValue=original.call(this,...arguments),newchildren=[];let children=returnValue.props.children[1].props.children;return Array.isArray(children)||(children=[children]),newchildren.push(children[0]),newchildren.push(React.createElement(Notices_1.default,{container:this})),newchildren.push(children[1]),returnValue.props.children[1].props.children=newchildren,returnValue.props.children[1].props.children[2].props.children[0].props.render=buildRenderChannelSidebar(returnValue.props.children[1].props.children[2].props.children[0].props.render),returnValue},buildRenderChannelSidebar=original=>function renderChannelSidebar(){const returnValue=original.call(this,...arguments),hasNotice=Notices_1.notices.length>0;return hasNotice?(Utils_1.default.hasClass(returnValue.props.className,appClasses.hasNotice)||(returnValue.props.className+=" "+Utils_1.default.removeDa(appClasses.hasNotice)),returnValue):returnValue};mod.default.prototype.render=buildRender(mod.default.prototype.render),async function(){const base=document.querySelector("."+Utils_1.default.removeDa(appClasses.base));if(!base)throw new Error("Could not find base here");const elem=Utils_1.default.FindReact(base);elem.render=buildRender(elem.render),elem.forceUpdate()}()}),environnement_1.isNative&&(awaitLogin().then(async()=>{let UserPopout=await getModule(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserPopout.default({userId:userModule.default.getCurrentUser().id,guildId:null,channelId:null,disableUserProfileLink:!0}).render(),PopoutProps=render1.props,render2=render1.type.render(PopoutProps,null),UserPopoutComponent=new render2.type(render2.props).render().type;if(!UserPopoutComponent)throw new Error("Couldn't find the UserPopoutComponent component.");const render=UserPopoutComponent.prototype.render;UserPopoutComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}),awaitLogin().then(async()=>{let UserProfile=await getModule(e=>e.default&&"UserProfile"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserProfile.default({user:userModule.default.getCurrentUser()}).render(),render2=new render1.type(render1.props).render(),render3=render2.type.render(render2.props,null),UserProfileComponent=new render3.type(render3.props).render().type;if(!UserProfileComponent)throw new Error("Couldn't find the UserProfileComponent component.");const render=UserProfileComponent.prototype.render;UserProfileComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);console.log(returnValue);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}))};let loginPromise,hasCompletedLogin=!1;function awaitLogin(){return hasCompletedLogin?Promise.resolve():loginPromise||(loginPromise=new Promise(resolve=>{let isResolved=!1;window.Lightcord.DiscordModules.dispatcher.subscribe("CONNECTION_OPEN",ev=>{isResolved||(hasCompletedLogin=!0,resolve(),isResolved=!0)})}))}window.Lightcord.DiscordModules.dispatcher.subscribe("LOGOUT",ev=>{hasCompletedLogin=!1,loginPromise=void 0})},function(module,exports,__webpack_require__){"use strict";function unfreeze(o){var oo=void 0;if(o instanceof Array){oo=[];o.forEach((function(v){oo.push(v)}))}else if(o instanceof String)oo=new String(o).toString();else if("object"==typeof o)for(var property in oo={},o)oo[property]=o[property];return oo}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=unfreeze,Object.unfreeze=unfreeze}]); \ No newline at end of file diff --git a/LightcordApi/package.json b/LightcordApi/package.json index 48542ef..efb4bbb 100644 --- a/LightcordApi/package.json +++ b/LightcordApi/package.json @@ -9,7 +9,7 @@ "build-prod": "webpack --progress --colors --mode production -o js/main.min.js --devtool none", "watch-prod": "webpack --progress --colors --watch --mode production -o js/main.min.js --devtool none", "test": "echo \"Error: no test specified\" && exit 1", - "docs": "typedoc --plugin ./node_modules/typedoc-plugin-markdown --out ../../LightcordApiDocs ./src" + "docs": "typedoc --out ../../LightcordApiDocs ./src" }, "author": "", "license": "ISC", diff --git a/LightcordApi/src/alias/react-dom.ts b/LightcordApi/src/alias/react-dom.ts index 033a69d..570edc3 100644 --- a/LightcordApi/src/alias/react-dom.ts +++ b/LightcordApi/src/alias/react-dom.ts @@ -1,2 +1,28 @@ -// bait typescript into thinking this is not reactDOM so no circular dependency. -export = window["Reac"+"tDOM"] as typeof import("react-dom") \ No newline at end of file +import { ReactDOMSelector } from "./selectors" + +// bait typescript into thinking this is not reactDOM so no circular dependency. +window.ReactDOM = (window["Reac"+"tDOM"] || // If in Lightcord + (()=>{ // If in Standard BetterDiscord + try{ + return window.BdApi.findModule(ReactDOMSelector as any) + }catch(e){ + return null + } + })() || + (()=>{ // If in Powercord + try{ + const webpack = require("powercord/webpack") + return webpack.ReactDOM + }catch(e){ + return null + } + })() || + (()=>{ // If in EnhancedDiscord + try{ + return window.EDApi.findModule(ReactDOMSelector as any) + }catch(e){ + return null + } + })()) as typeof import("react-dom") + +export = (window.ReactDOM as any) \ No newline at end of file diff --git a/LightcordApi/src/alias/react.ts b/LightcordApi/src/alias/react.ts index 89ddb02..8bc5928 100644 --- a/LightcordApi/src/alias/react.ts +++ b/LightcordApi/src/alias/react.ts @@ -1 +1,27 @@ +import { ReactSelector } from "./selectors"; + +window.React = (window.React || // If in Lightcord + (()=>{ // If in Standard BetterDiscord + try{ + return window.BdApi.findModule(ReactSelector as any) + }catch(e){ + return null + } + })() || + (()=>{ // If in Powercord + try{ + const webpack = require("powercord/webpack") + return webpack.React + }catch(e){ + return null + } + })() || + (()=>{ // If in EnhancedDiscord + try{ + return window.EDApi.findModule(ReactSelector as any) + }catch(e){ + return null + } + })()) as typeof import("react") + export = window.React \ No newline at end of file diff --git a/LightcordApi/src/alias/selectors.ts b/LightcordApi/src/alias/selectors.ts new file mode 100644 index 0000000..2ea628e --- /dev/null +++ b/LightcordApi/src/alias/selectors.ts @@ -0,0 +1,2 @@ +export const ReactSelector = mod => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].find(k => !mod[k]) +export const ReactDOMSelector = mod => mod.findDOMNode \ No newline at end of file diff --git a/LightcordApi/src/components/components.ts b/LightcordApi/src/components/components.ts index 94ac107..73ed62d 100644 --- a/LightcordApi/src/components/components.ts +++ b/LightcordApi/src/components/components.ts @@ -13,25 +13,27 @@ import cloneNullProto from "../modules/cloneNullProto" import Tooltip from "./general/Tooltip" import ColorPicker from "./inputs/ColorPicker" import AlertBox from "./general/AlertBox" +import { createProxyErrorCatcherClass } from "./private/ErrorCatcher" +const RadioGroupProxied = createProxyErrorCatcherClass(RadioGroup) export default cloneNullProto({ inputs: cloneNullProto({ - Button: DiscordButton, - Switch: Switch, - Choices: RadioGroup, - RadioGroup: RadioGroup, - TextArea: TextArea, - TextInput: TextInput, - Dropdown: Dropdown, - ColorPicker: ColorPicker + Button: createProxyErrorCatcherClass(DiscordButton), + Switch: createProxyErrorCatcherClass(Switch), + Choices: RadioGroupProxied, + RadioGroup: RadioGroupProxied, + TextArea: createProxyErrorCatcherClass(TextArea), + TextInput: createProxyErrorCatcherClass(TextInput), + Dropdown: createProxyErrorCatcherClass(Dropdown), + ColorPicker: createProxyErrorCatcherClass(ColorPicker) }), general: cloneNullProto({ - Title: Title, - SettingsTitle: SettingsTitle, - SettingSubTitle: SettingSubTitle, - Tabs: Tabs, - CodeBlock: CodeBlock, - Tooltip: Tooltip, - AlertBox: AlertBox + Title: createProxyErrorCatcherClass(Title), + SettingsTitle: createProxyErrorCatcherClass(SettingsTitle), + SettingSubTitle: createProxyErrorCatcherClass(SettingSubTitle), + Tabs: createProxyErrorCatcherClass(Tabs), + CodeBlock: createProxyErrorCatcherClass(CodeBlock), + Tooltip: createProxyErrorCatcherClass(Tooltip), + AlertBox: createProxyErrorCatcherClass(AlertBox) }) }) \ No newline at end of file diff --git a/LightcordApi/src/components/inputs/ColorPicker.tsx b/LightcordApi/src/components/inputs/ColorPicker.tsx index b200983..a6026a4 100644 --- a/LightcordApi/src/components/inputs/ColorPicker.tsx +++ b/LightcordApi/src/components/inputs/ColorPicker.tsx @@ -2,6 +2,7 @@ import NOOP from "../../modules/noop" import WebpackLoader from "../../modules/WebpackLoader" import Tooltip from "../general/Tooltip" import Utils from "../../modules/Utils" +import { createProxyErrorCatcherClass } from "../private/ErrorCatcher" const Constants = { defaultColor: 10070709, @@ -57,9 +58,13 @@ export default class ColorPicker extends React.PureComponent { + ColorPickerModules = null this.forceUpdate() resolve() }) @@ -175,7 +182,7 @@ export default class ColorPicker extends React.PureComponent { + constructor(props:ErrorCatcherProps){ + super(props) + this.state = { + error: false, + hasSentNotification: false + } + } + + get modules():any[]{ + return ErrorCatcherModules || (ErrorCatcherModules = [ + WebpackLoader.find(e => e.emptyStateImage && e.emptyState) + ]) + } + + defaultProps:ErrorCatcherProps = { + children: null + } + + render(){ + if(!this.state.error){ + return this.props.children + }else{ // try to render a user-friendly interface. + const [ + emptyClasses + ] = this.modules + if(!emptyClasses){ // If we can't, render nothing and show a notification. + if(this.state.hasSentNotification)return null // If the notification was already sent, don't send one. + const notification = DiscordTools.showNotification({ + body: "An error occured. Please check the console for more informations.", + icon: "https://github.com/lightcord.png", + onClick: NOOP, + onClose: NOOP, + onShow: NOOP, + title: "Lightcord Informations" + }) + this.setState({ + hasSentNotification: true + }) + setTimeout(() => { + notification.close() + }, 2000) + return null + } + return
+
+
An error occured
+

+ Please check the console for more informations. Join our ­support server for more help. +

+
+ } + } + + componentDidCatch(error, errorInfo){ + console.error(errorInfo.componentStack) + this.setState({ + error: true + }) + } +} + +export function createProxyErrorCatcherClass(Class:base):base & { + readonly original: base +}{ + const ClassCopy = (class Proxied extends React.Component { + render(){ + return + {React.createElement(Class as any, {...this.props, key: uuid()})} + + } + + static displayName = Class["displayName"] || Class["name"] + + static get original(){ + return Class + } + }) as any + Object.entries(Object.getOwnPropertyDescriptors(Class)).forEach(value => { + if(value[0] in ClassCopy)return + Object.defineProperty(ClassCopy, value[0], value[1]) + }) + return ClassCopy +} \ No newline at end of file diff --git a/LightcordApi/src/index.ts b/LightcordApi/src/index.ts index 7edadbf..029a11c 100644 --- a/LightcordApi/src/index.ts +++ b/LightcordApi/src/index.ts @@ -8,6 +8,8 @@ import excludeProperties from "./modules/excludeProperties" import cloneNullProto from "./modules/cloneNullProto" import NOOP from "./modules/noop" import unfreeze from "./modules/Unfreeze" +import { isNative, isImported } from "./modules/environnement" +import * as bandagedbdApi from "@bandagedbd/bdapi" patchers.patch() const LightcordApi = { @@ -21,19 +23,29 @@ const LightcordApi = { cloneNullProto: cloneNullProto, NOOP: NOOP, unfreeze: unfreeze - } + }, + get isNative(){return isNative}, + get isImported(){return isImported} } declare global { var React:typeof import("react") interface Window { + /** + * Lightcord is only availlaible in Lightcord (native) + */ Lightcord: LightcordGlobal, + /** + * BDModules is only availlaible in Lightcord (native) + */ BDModules: { modules:any[], get(filter:(mod:any)=>boolean, modules?:any[]):any[], get(id:number, modules?:any[]):any, get(ids: [number|((mod:any)=>boolean)], modules?:any[]):any - } + }, + BdApi: typeof bandagedbdApi.BdApi, + EDApi: typeof bandagedbdApi.BdApi } var Lightcord:LightcordGlobal } @@ -59,7 +71,7 @@ export interface LightcordGlobal { }, Api: LightcordApiGlobal, BetterDiscord: { - BdApi: typeof import("@bandagedbd/bdapi").BdApi, + BdApi: typeof bandagedbdApi.BdApi, [mod:string]:any } } diff --git a/LightcordApi/src/modules/BDModules.ts b/LightcordApi/src/modules/BDModules.ts new file mode 100644 index 0000000..0708cef --- /dev/null +++ b/LightcordApi/src/modules/BDModules.ts @@ -0,0 +1,82 @@ +let req +setReq() +function filterDangerous(mods){ + return mods.map(e => { + return protect(e) + }) +} +function protect(exports){ + let theModule = exports.exports + let mod = theModule.default + if(!mod)return exports + if (mod.remove && mod.set && mod.clear && mod.get && !mod.sort) return null; + if (!mod.getToken && !mod.getEmail && !mod.showToken)return exports + + const proxy = new Proxy(mod, { + getOwnPropertyDescriptor: function(obj, prop) { + if (prop === "getToken" || prop === "getEmail" || prop === "showToken") return undefined; + return Object.getOwnPropertyDescriptor(obj, prop); + }, + get: function(obj, func) { + if (func == "getToken" && obj.getToken) return () => "mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa"; + if (func == "getEmail" && obj.getEmail) return () => "puppet11112@gmail.com"; + if (func == "showToken" && obj.showToken) return () => true; + if (func == "__proto__" && obj.__proto__) return proxy; + + return obj[func]; + } + }); + + return Object.assign({}, exports, {exports: Object.assign({}, theModule, {default: proxy})}) +} + +class Webpackloader { + get modules(){ + if(req){ + return filterDangerous(Object.values(req.c).filter((e:any) => e && e.exports)) + }else{ + setReq() + if(req){ + return filterDangerous(Object.values(req.c).filter((e:any) => e && e.exports)) + }else{ + return [] + } + } + } + get(ids, modules){ + if(typeof ids === "function"){ + return (modules || this.modules).map((mdl) => { + if(mdl && typeof mdl.exports !== "undefined"){ + return mdl.exports + }else{ + return null + } + }).filter(e => e).filter(ids) + }else if(Array.isArray(ids)){ + modules = modules || this.modules + return ids.map(id => this.get(id, modules)) + }else{ + modules = modules || this.modules + let module = modules.filter(e => !!e).find(e => e.i === ids) + if(!module)return undefined + return module.exports + } + } + get default(){ + return this + } +} + +export default new Webpackloader() + +function setReq(){ + try{ + req = window["webpackJsonp"].push([[], {__extra_id__: (mdl, exports, req) => mdl.exports = req}, [["__extra_id__"]]]); + if(req){ + delete req.m.__extra_id__; + delete req.c.__extra_id__; + } + }catch(e){ + req = undefined + } +} \ No newline at end of file diff --git a/LightcordApi/src/modules/DiscordTools.ts b/LightcordApi/src/modules/DiscordTools.ts index bc3f3da..420d95b 100644 --- a/LightcordApi/src/modules/DiscordTools.ts +++ b/LightcordApi/src/modules/DiscordTools.ts @@ -152,6 +152,8 @@ export class Notice extends EventEmitter { index:number } + private nextTickRefresh:boolean = false + get removed():boolean{ return !notices.find(e => e.id === this.id) } @@ -166,36 +168,55 @@ export class Notice extends EventEmitter { return this.data.id } + update(data: Partial){ + for(let key in data){ + if(key === "id")continue + this.data[key] = data[key] + } + + if(!this.nextTickRefresh){ + this.nextTickRefresh = true + process.nextTick(() => { + this.nextTickRefresh = false + noticeEvents.emit("noticeUpdate") + }) + } + } + get text(){ return this.data.text } set text(text){ - this.data.text = text - noticeEvents.emit("noticeUpdate") + this.update({ + text + }) } get type(){ return this.data.type } set type(type){ - this.data.type = type - noticeEvents.emit("noticeUpdate") + this.update({ + type + }) } get buttonText(){ return this.data.buttonText } set buttonText(buttonText:string){ - this.data.buttonText = buttonText - noticeEvents.emit("noticeUpdate") + this.update({ + buttonText + }) } get onClick(){ return this.data.onClick } set onClick(onClick){ - this.data.onClick = onClick - noticeEvents.emit("noticeUpdate") + this.update({ + onClick + }) } remove(){ diff --git a/LightcordApi/src/modules/WebpackLoader.ts b/LightcordApi/src/modules/WebpackLoader.ts index 70f699c..0546a09 100644 --- a/LightcordApi/src/modules/WebpackLoader.ts +++ b/LightcordApi/src/modules/WebpackLoader.ts @@ -1,4 +1,4 @@ -const BDModules = window.BDModules +const BDModules:typeof window.BDModules = window.BDModules || require("./BDModules") export default new class WebpackLoader { constructor(){} @@ -50,7 +50,7 @@ export default new class WebpackLoader { export class WebpackLoaderError extends Error { constructor(message:string = ""){ - message += "\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in their discord server." + message += "\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server." super(message) this.name = "WebpackLoaderError" } diff --git a/LightcordApi/src/modules/environnement.ts b/LightcordApi/src/modules/environnement.ts new file mode 100644 index 0000000..be2496b --- /dev/null +++ b/LightcordApi/src/modules/environnement.ts @@ -0,0 +1,2 @@ +export const isNative:boolean = typeof window.BDModules === "undefined" +export const isImported:boolean = typeof window.BDModules !== "undefined" \ No newline at end of file diff --git a/LightcordApi/src/modules/lazyLoader.ts b/LightcordApi/src/modules/lazyLoader.ts new file mode 100644 index 0000000..e69de29 diff --git a/LightcordApi/src/modules/patchers.ts b/LightcordApi/src/modules/patchers.ts index 2b21c37..8545565 100644 --- a/LightcordApi/src/modules/patchers.ts +++ b/LightcordApi/src/modules/patchers.ts @@ -1,5 +1,6 @@ import Utils from "./Utils" import Notices, { notices } from "../components/private/Notices" +import { isNative } from "./environnement"; export function patch(){ /** START NOTICE */ @@ -47,6 +48,62 @@ export function patch(){ }) /** END NOTICE */ + if(isNative){ + /** START USERPOPOUT PATCH */ + awaitLogin() + .then(async () => { + let UserPopout = await getModule(e => e.default && e.default.displayName === "FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))") + const userModule = await getModule(e => e.default && e.default.getCurrentUser) + const render1 = new UserPopout.default({userId: userModule.default.getCurrentUser().id, guildId: null, channelId: null, disableUserProfileLink: true}).render() + const PopoutProps = render1.props + const render2 = render1.type.render(PopoutProps, null) + const render3 = new render2.type(render2.props).render() + const UserPopoutComponent = render3.type + if(!UserPopoutComponent)throw new Error(`Couldn't find the UserPopoutComponent component.`) + + const render = UserPopoutComponent.prototype.render + UserPopoutComponent.prototype.render = function(){ + const returnValue = render.call(this, ...arguments) + try{ + returnValue.props.children.props["data-user-id"] = this.props.user.id + }catch(e){ + console.error(e) + } + return returnValue + } + }) + /** END USERPOPOUT PATCH*/ + + /** START USERPROFILE PATCH */ + awaitLogin() + .then(async () => { + let UserProfile = await getModule(e => e.default && e.default.displayName === "UserProfile") + const userModule = await getModule(e => e.default && e.default.getCurrentUser) + const render1 = new UserProfile.default({ + user: userModule.default.getCurrentUser() + }).render() + const render2 = new render1.type(render1.props).render() + const render3 = render2.type.render(render2.props, null) + const render4 = new render3.type(render3.props).render() + const UserProfileComponent = render4.type + if(!UserProfileComponent)throw new Error(`Couldn't find the UserProfileComponent component.`) + + const render = UserProfileComponent.prototype.render + UserProfileComponent.prototype.render = function(){ + const returnValue = render.call(this, ...arguments) + console.log(returnValue) + try{ + returnValue.props.children.props["data-user-id"] = this.props.user.id + }catch(e){ + console.error(e) + } + return returnValue + } + }) + /** END USERPROFILE PATCH */ + } + + // TODO: Add in app-notifications / confirmations. /** START IN-APP NOTIFICATIONS */ //getModule(e => true) /** END IN-APP NOTIFICATIONS */ @@ -60,4 +117,25 @@ function getModule(filter: (mod:any) => boolean):Promise{ console.error("[LIGHTCORD]", err, filter) }) }) -} \ No newline at end of file +} + +let hasCompletedLogin = false +let loginPromise:Promise +function awaitLogin():Promise{ + if(hasCompletedLogin)return Promise.resolve() + if(loginPromise)return loginPromise + + return loginPromise = new Promise((resolve) => { + let isResolved = false + window.Lightcord.DiscordModules.dispatcher.subscribe("CONNECTION_OPEN", (ev) => { + if(isResolved)return + hasCompletedLogin = true + resolve() + isResolved = true + }) + }) +} +window.Lightcord.DiscordModules.dispatcher.subscribe("LOGOUT", (ev) => { + hasCompletedLogin = false + loginPromise = undefined +}) \ No newline at end of file diff --git a/LightcordApi/webpack.config.js b/LightcordApi/webpack.config.js index 52ffb2d..4c9e777 100644 --- a/LightcordApi/webpack.config.js +++ b/LightcordApi/webpack.config.js @@ -1,70 +1,71 @@ -const path = require("path"); -const TerserPlugin = require("terser-webpack-plugin") - -module.exports = { - mode: "development", - target: "node", - devtool: "inline-source-map", - entry: "./src/index.ts", - output: { - filename: "main.js", - path: path.resolve(__dirname, "js"), - library: "LightcordApi", - libraryTarget: "commonjs2" - }, - externals: { - electron: `electron`, - fs: `fs`, - path: `path`, - events: `events`, - rimraf: `rimraf`, - yauzl: `yauzl`, - mkdirp: `mkdirp`, - request: `request`, - "node-fetch": "node-fetch", - "uuid/v1": "uuid/v1", - "uuid/v4": "uuid/v4" - }, - resolve: { - extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], - alias: { - "react$": path.resolve(__dirname, "src", "alias", "react.ts"), - "react-dom$": path.resolve(__dirname, "src", "alias", "react-dom.ts") - } - }, - module: { - rules: [{ - test: /\.jsx?$/, - loader: "babel-loader", - exclude: /node_modules/, - query: { - presets: [ - ["@babel/env", { - targets: { - node: "12.8.1", - chrome: "78" - } - }], "@babel/react" - ] - } - }, { - test: /\.tsx?$/, - use: 'ts-loader', - exclude: /node_modules/, - }] - }, - optimization: { - minimizer: [ - new TerserPlugin({ - cache: true, - parallel: true, - sourceMap: true, - terserOptions: { - mangle: false, - keep_classnames: true, - keep_fnames: true - } - }), - ] - } +const path = require("path"); +const TerserPlugin = require("terser-webpack-plugin") + +module.exports = { + mode: "development", + target: "node", + devtool: "inline-source-map", + entry: "./src/index.ts", + output: { + filename: "main.js", + path: path.resolve(__dirname, "js"), + library: "LightcordApi", + libraryTarget: "commonjs2" + }, + externals: { + electron: `electron`, + fs: `fs`, + path: `path`, + events: `events`, + rimraf: `rimraf`, + yauzl: `yauzl`, + mkdirp: `mkdirp`, + request: `request`, + "node-fetch": "node-fetch", + "uuid/v1": "uuid/v1", + "uuid/v4": "uuid/v4", + "powercord/webpack": "powercord/webpack" + }, + resolve: { + extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], + alias: { + "react$": path.resolve(__dirname, "src", "alias", "react.ts"), + "react-dom$": path.resolve(__dirname, "src", "alias", "react-dom.ts") + } + }, + module: { + rules: [{ + test: /\.jsx?$/, + loader: "babel-loader", + exclude: /node_modules/, + query: { + presets: [ + ["@babel/env", { + targets: { + node: "12.8.1", + chrome: "78" + } + }], "@babel/react" + ] + } + }, { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }] + }, + optimization: { + minimizer: [ + new TerserPlugin({ + cache: true, + parallel: true, + sourceMap: true, + terserOptions: { + mangle: false, + keep_classnames: true, + keep_fnames: true + } + }), + ] + } }; \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/index.js b/modules/discord_desktop_core/core/app/BetterDiscord/index.js index dde1643..768b0d4 100644 --- a/modules/discord_desktop_core/core/app/BetterDiscord/index.js +++ b/modules/discord_desktop_core/core/app/BetterDiscord/index.js @@ -48,7 +48,7 @@ async function privateInit(){ ModuleLoader.get(e => e.getCurrentHub)[0].getCurrentHub().getClient().getOptions().enabled = false // setting react in require cache - const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].map(c => !!e[c]).includes(false))[0] + const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].find(k => !e[k]))[0] window.React = React const ReactDOM = ModuleLoader.get(e => e.findDOMNode)[0] @@ -278,7 +278,7 @@ async function privateInit(){ DiscordNative.ipc.send("UPDATE_THEME", data.settings.theme) }) - require("lightcordapi/js/main.js") + require("lightcordapi/js/main.min.js") /* if(shouldShowPrompt){ diff --git a/modules/discord_desktop_core/core/app/discord.png b/modules/discord_desktop_core/core/app/discord.png index 5c5bab0..0f7f93b 100644 Binary files a/modules/discord_desktop_core/core/app/discord.png and b/modules/discord_desktop_core/core/app/discord.png differ diff --git a/modules/discord_desktop_core/core/app/popoutPreload.js b/modules/discord_desktop_core/core/app/popoutPreload.js new file mode 100644 index 0000000..3a681d2 --- /dev/null +++ b/modules/discord_desktop_core/core/app/popoutPreload.js @@ -0,0 +1,3 @@ +process.once('loaded', () => { + console.log("sltsv") +}) \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/popoutWindows.js b/modules/discord_desktop_core/core/app/popoutWindows.js index 0998b5a..54d3579 100644 --- a/modules/discord_desktop_core/core/app/popoutWindows.js +++ b/modules/discord_desktop_core/core/app/popoutWindows.js @@ -14,9 +14,11 @@ var _electron = require('electron'); var _appFeatures = require('./appFeatures'); var _mainScreen = require('./mainScreen'); +const { join } = require('path'); const MIN_POPOUT_WIDTH = 320; const MIN_POPOUT_HEIGHT = 180; +/** @type {Electron.BrowserWindowConstructorOptions} */ const DEFAULT_POPOUT_OPTIONS = { title: 'Lightcord Popout', backgroundColor: '#2f3136', @@ -29,7 +31,8 @@ const DEFAULT_POPOUT_OPTIONS = { webPreferences: { nodeIntegration: false, nativeWindowOpen: true - } + }, + icon: join(__dirname, 'discord.png') }; const features = (0, _appFeatures.getFeatures)(); diff --git a/package.json b/package.json index c38d32a..8b43734 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "build:electron_linux": "electron-packager ./distApp --ignore=\"(distApp|builds|\\.ts|\\.dll)\" --arch=x64 --protocol=discord --platform=\"linux\" --out=builds --icon=app.ico --executable-name=\"Lightcord\" --asar.unpack=*.{node,so.4} --overwrite", "build:minify": "node build.js", "build:after": "node afterbuild.js", - "devInstall": "npm i -g --arch=ia32 electron@8.4.0 && npm i -g typescript && npm i --save-dev @types/node@12.12.39 && npm i --save-dev --arch=ia32 electron@8.4.0 && node installSubModules.js && echo \"Everything is installed. You should be able to do `npm run test` to compile everything and launch.\"", - "devInstall:64": "npm i -g --arch=x64 electron@8.4.0 && npm i -g typescript && npm i --save-dev @types/node@12.12.39 && npm i --save-dev --arch=x64 electron@8.4.0 && node installSubModules.js && echo \"Everything is installed. You should be able to do `npm run test` to compile everything and launch.\"" + "devInstall": "npm i --save-dev --arch=ia32 electron@8.4.0 && node installSubModules.js && echo \"Everything is installed. You should be able to do `npm run test` to compile everything and launch.\"", + "devInstall:64": "npm i --save-dev --arch=x64 electron@8.4.0 && node installSubModules.js && echo \"Everything is installed. You should be able to do `npm run test` to compile everything and launch.\"" }, "author": "", "license": "ISC", @@ -34,7 +34,7 @@ "@types/auto-launch": "^5.0.1", "@types/electron-devtools-installer": "^2.2.0", "@types/mkdirp": "^1.0.0", - "@types/node": "^12.12.39", + "@types/node": "12.12.39", "@types/rimraf": "^3.0.0", "@types/uuid": "^8.0.0", "@types/yauzl": "^2.9.1",