@kontur.candy/tools 2.138.0 → 2.140.0-debug
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +80 -9
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +26 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/KCLangRuntimeUtils.js +10 -2
- package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
- package/distr/Common/ModelPath/ModelPath.js +15 -4
- package/distr/Common/StringArrayKey.js +4 -12
- package/distr/Common/UseShowOnce.js +88 -0
- package/distr/Common/hashUtils.js +17 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +10 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +6 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +46 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +12 -6
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +5 -2
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +151 -57
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +226 -137
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
m: function () {
|
|
16
16
|
return a;
|
|
17
17
|
}
|
|
18
|
-
}), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && n.register(a, "getClientDraftInfoUrl", "C:\\BuildAgent\\work\\forms-root\\Common\\CandyApiClient\\ClientDraftInfo\\GetClientDraftInfoUrl.ts"), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
|
|
18
|
+
}), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && n.register(a, "getClientDraftInfoUrl", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\CandyApiClient\\ClientDraftInfo\\GetClientDraftInfoUrl.ts"), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
|
|
19
19
|
},
|
|
20
20
|
556: function (module, __webpack_exports__, __webpack_require__) {
|
|
21
21
|
function _typeof(e) {
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
reactHotLoader,
|
|
255
255
|
leaveModule;
|
|
256
256
|
|
|
257
|
-
reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(ApplicationError, "ApplicationError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(NotImplementedError, "NotImplementedError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(NotSupportedError, "NotSupportedError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(InvalidProgramStateError, "InvalidProgramStateError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(InvalidArgumentError, "InvalidArgumentError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts"), reactHotLoader.register(TypingError, "TypingError", "C:\\BuildAgent\\work\\forms-root\\Common\\Errors.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
|
|
257
|
+
reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(ApplicationError, "ApplicationError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts"), reactHotLoader.register(NotImplementedError, "NotImplementedError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts"), reactHotLoader.register(NotSupportedError, "NotSupportedError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts"), reactHotLoader.register(InvalidProgramStateError, "InvalidProgramStateError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts"), reactHotLoader.register(InvalidArgumentError, "InvalidArgumentError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts"), reactHotLoader.register(TypingError, "TypingError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\Errors.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
|
|
258
258
|
},
|
|
259
259
|
255: function (e, r, t) {
|
|
260
260
|
var o, n, i;
|
|
@@ -295,31 +295,31 @@
|
|
|
295
295
|
d1: function () {
|
|
296
296
|
return u;
|
|
297
297
|
}
|
|
298
|
-
}), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (n.register(s, "isNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
298
|
+
}), e = t.hmd(e), (o = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.enterModule : void 0) && o(e), "undefined" != typeof reactHotLoaderGlobal && reactHotLoaderGlobal.default.signature, (n = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (n.register(s, "isNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
299
299
|
return "object" === a(e) && (null == e ? void 0 : e.message);
|
|
300
|
-
}, "stringifyUnknownError", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
300
|
+
}, "stringifyUnknownError", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
301
301
|
if (!s(e)) throw new Error("Value must be defined");
|
|
302
|
-
}, "ensureNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function () {}, "noop", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(u, "reject", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(l, "isLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
302
|
+
}, "ensureNotNullOrUndefined", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function () {}, "noop", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(u, "reject", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(l, "isLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
303
303
|
if (l(e, r)) return e;
|
|
304
|
-
}, "minLengthOrUndefined", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(c, "arrayHasLength", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(d, "arrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
304
|
+
}, "minLengthOrUndefined", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(c, "arrayHasLength", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(d, "arrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
305
305
|
return e.length > 0;
|
|
306
|
-
}, "arrayHasAtLeastOneItem", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
306
|
+
}, "arrayHasAtLeastOneItem", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
307
307
|
if (!d(e)) throw new Error("Array must be not empty");
|
|
308
|
-
}, "ensureArrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
308
|
+
}, "ensureArrayIsNotEmpty", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
309
309
|
if (!c(e, r)) throw new Error("Array should has length ".concat(r));
|
|
310
|
-
}, "ensureArrayHasLength", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
310
|
+
}, "ensureArrayHasLength", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e, r) {
|
|
311
311
|
if (!l(e, r)) throw new Error("Array must have minimal length ".concat(r));
|
|
312
|
-
}, "ensureArrayLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {}, "ensureNever", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
312
|
+
}, "ensureArrayLengthGreaterThenOrEqual", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {}, "ensureNever", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
313
313
|
return "".concat(e);
|
|
314
|
-
}, "ensureAndGetString", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
314
|
+
}, "ensureAndGetString", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
315
315
|
e();
|
|
316
|
-
}, "runAsyncAction", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(f, "isNullOrEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
316
|
+
}, "runAsyncAction", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(f, "isNullOrEmpty", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
317
317
|
return !f(e);
|
|
318
|
-
}, "isNotNullOrEmpty", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
318
|
+
}, "isNotNullOrEmpty", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
319
319
|
return null == e || "" === e.trim();
|
|
320
|
-
}, "isNullOrWhiteSpace", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
320
|
+
}, "isNullOrWhiteSpace", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {
|
|
321
321
|
return "/" === e.slice(-1) ? e.slice(0, -1) : e;
|
|
322
|
-
}, "trimLastSlash", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts"), n.register(function (e) {}, "assertIs", "C:\\BuildAgent\\work\\forms-root\\Common\\TypingUtils.ts")), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
|
|
322
|
+
}, "trimLastSlash", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts"), n.register(function (e) {}, "assertIs", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Common\\TypingUtils.ts")), (i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && i(e);
|
|
323
323
|
},
|
|
324
324
|
133: function (e, r, t) {
|
|
325
325
|
var o = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== o && o,
|
|
@@ -401,7 +401,7 @@
|
|
|
401
401
|
return r.set(new Uint8Array(e)), r.buffer;
|
|
402
402
|
}
|
|
403
403
|
|
|
404
|
-
function
|
|
404
|
+
function v() {
|
|
405
405
|
return this.bodyUsed = !1, this._initBody = function (e) {
|
|
406
406
|
var r;
|
|
407
407
|
this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : n && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (r = e) && DataView.prototype.isPrototypeOf(r) ? (this._bodyArrayBuffer = _(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || c(e)) ? this._bodyArrayBuffer = _(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : n && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
|
|
@@ -465,7 +465,7 @@
|
|
|
465
465
|
e.push([t, r]);
|
|
466
466
|
}), p(e);
|
|
467
467
|
}, i && (y.prototype[Symbol.iterator] = y.prototype.entries);
|
|
468
|
-
var
|
|
468
|
+
var b = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
|
|
469
469
|
|
|
470
470
|
function E(e, r) {
|
|
471
471
|
if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
|
|
@@ -478,7 +478,7 @@
|
|
|
478
478
|
this.url = e.url, this.credentials = e.credentials, r.headers || (this.headers = new y(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, n || null == e._bodyInit || (n = e._bodyInit, e.bodyUsed = !0);
|
|
479
479
|
} else this.url = String(e);
|
|
480
480
|
|
|
481
|
-
if (this.credentials = r.credentials || this.credentials || "same-origin", !r.headers && this.headers || (this.headers = new y(r.headers)), this.method = (o = (t = r.method || this.method || "GET").toUpperCase(),
|
|
481
|
+
if (this.credentials = r.credentials || this.credentials || "same-origin", !r.headers && this.headers || (this.headers = new y(r.headers)), this.method = (o = (t = r.method || this.method || "GET").toUpperCase(), b.indexOf(o) > -1 ? o : t), this.mode = r.mode || this.mode || null, this.signal = r.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && n) throw new TypeError("Body not allowed for GET or HEAD requests");
|
|
482
482
|
|
|
483
483
|
if (this._initBody(n), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== r.cache && "no-cache" !== r.cache)) {
|
|
484
484
|
var i = /([?&])_=[^&]*/;
|
|
@@ -507,7 +507,7 @@
|
|
|
507
507
|
return new E(this, {
|
|
508
508
|
body: this._bodyInit
|
|
509
509
|
});
|
|
510
|
-
},
|
|
510
|
+
}, v.call(E.prototype), v.call(C.prototype), C.prototype.clone = function () {
|
|
511
511
|
return new C(this._bodyInit, {
|
|
512
512
|
status: this.status,
|
|
513
513
|
statusText: this.statusText,
|
|
@@ -627,11 +627,11 @@
|
|
|
627
627
|
return t;
|
|
628
628
|
}
|
|
629
629
|
|
|
630
|
-
function
|
|
630
|
+
function F(e) {
|
|
631
631
|
for (var r = 1; r < arguments.length; r++) {
|
|
632
632
|
var t = null != arguments[r] ? arguments[r] : {};
|
|
633
633
|
r % 2 ? j(Object(t), !0).forEach(function (r) {
|
|
634
|
-
|
|
634
|
+
H(e, r, t[r]);
|
|
635
635
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : j(Object(t)).forEach(function (r) {
|
|
636
636
|
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
637
637
|
});
|
|
@@ -640,7 +640,7 @@
|
|
|
640
640
|
return e;
|
|
641
641
|
}
|
|
642
642
|
|
|
643
|
-
function
|
|
643
|
+
function H(e, r, t) {
|
|
644
644
|
return r in e ? Object.defineProperty(e, r, {
|
|
645
645
|
value: t,
|
|
646
646
|
enumerable: !0,
|
|
@@ -657,9 +657,9 @@
|
|
|
657
657
|
return o;
|
|
658
658
|
}
|
|
659
659
|
|
|
660
|
-
function
|
|
660
|
+
function M() {}
|
|
661
661
|
|
|
662
|
-
function
|
|
662
|
+
function G(e) {
|
|
663
663
|
return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
|
|
664
664
|
}
|
|
665
665
|
|
|
@@ -669,7 +669,7 @@
|
|
|
669
669
|
return "".concat(r, "/").concat(e).replace(/([^:])\/{2,}/g, "$1/");
|
|
670
670
|
}
|
|
671
671
|
|
|
672
|
-
function
|
|
672
|
+
function R(e, r) {
|
|
673
673
|
if (void 0 === r) return e;
|
|
674
674
|
|
|
675
675
|
for (var t = [], o = 0, n = Object.keys(r); o < n.length; o++) {
|
|
@@ -681,11 +681,11 @@
|
|
|
681
681
|
return 0 === t.length ? e : e + "?" + t.join("&");
|
|
682
682
|
}
|
|
683
683
|
|
|
684
|
-
function
|
|
684
|
+
function x(e) {
|
|
685
685
|
return new RegExp("^(?:".concat(e.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(t.g.location.host);
|
|
686
686
|
}
|
|
687
687
|
|
|
688
|
-
function
|
|
688
|
+
function N(e) {
|
|
689
689
|
return (t.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
|
|
690
690
|
return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
|
|
691
691
|
}).find(function (r) {
|
|
@@ -746,20 +746,20 @@
|
|
|
746
746
|
i = e.resourcesVersion;
|
|
747
747
|
if (t.g.CF.entryPoint[o]) r();else {
|
|
748
748
|
var a = n && !t.g[n],
|
|
749
|
-
s = "true" ===
|
|
749
|
+
s = "true" === N("debug") ? "" : ".min",
|
|
750
750
|
u = [],
|
|
751
751
|
l = {
|
|
752
752
|
v: i,
|
|
753
753
|
resourceZone: e.resourceZone
|
|
754
754
|
};
|
|
755
755
|
u.push(function (e) {
|
|
756
|
-
return B.e.styleSheet(D(
|
|
756
|
+
return B.e.styleSheet(D(R("static/public/styles/".concat(o).concat(s, ".css"), l)), !0, e);
|
|
757
757
|
}), u.push(function (e) {
|
|
758
|
-
return B.e.script(D(
|
|
758
|
+
return B.e.script(D(R("static/public/scripts/".concat(o).concat(s, ".js"), l)), e);
|
|
759
759
|
}), a && u.push(function (e) {
|
|
760
|
-
return B.e.styleSheet(D(
|
|
760
|
+
return B.e.styleSheet(D(R("static/public/styles/candy_".concat(n).concat(s, ".css"), l)), !1, e);
|
|
761
761
|
}, function (e) {
|
|
762
|
-
return B.e.script(D(
|
|
762
|
+
return B.e.script(D(R("static/public/scripts/candy_".concat(n).concat(s, ".js"), l)), e);
|
|
763
763
|
}), V(u, r);
|
|
764
764
|
}
|
|
765
765
|
}
|
|
@@ -772,20 +772,20 @@
|
|
|
772
772
|
}).catch(o);
|
|
773
773
|
}
|
|
774
774
|
|
|
775
|
-
function
|
|
775
|
+
function K(e) {
|
|
776
776
|
if (null != e) return t.g[e] && t.g[e].default;
|
|
777
777
|
}
|
|
778
778
|
|
|
779
|
-
function
|
|
779
|
+
function z(e, r) {
|
|
780
780
|
var o,
|
|
781
781
|
n,
|
|
782
|
-
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] :
|
|
782
|
+
i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : M,
|
|
783
783
|
a = null,
|
|
784
784
|
s = r.ns,
|
|
785
785
|
u = r.draftId;
|
|
786
|
-
if (
|
|
787
|
-
var l = null !== (o = r.resourceZone) && void 0 !== o ? o :
|
|
788
|
-
c =
|
|
786
|
+
if (x(S.Z.konturDomains) ? S.Z.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
|
|
787
|
+
var l = null !== (o = r.resourceZone) && void 0 !== o ? o : N("resourceZone"),
|
|
788
|
+
c = R(D((0, T.m)({
|
|
789
789
|
ns: s,
|
|
790
790
|
draftId: u
|
|
791
791
|
})), {
|
|
@@ -808,7 +808,7 @@
|
|
|
808
808
|
u,
|
|
809
809
|
c = o.gfv,
|
|
810
810
|
d = o.engineVersion,
|
|
811
|
-
f =
|
|
811
|
+
f = F(F(F({
|
|
812
812
|
authorized: S.Z.authorized,
|
|
813
813
|
cauldronApiUrl: S.Z.cauldronApiUrl,
|
|
814
814
|
isTestServer: S.Z.isTestServer,
|
|
@@ -848,8 +848,8 @@
|
|
|
848
848
|
theme: f.theme
|
|
849
849
|
}, function (o) {
|
|
850
850
|
if (!o && t.g.CF.entryPoint[c]) {
|
|
851
|
-
var n =
|
|
852
|
-
Z(e,
|
|
851
|
+
var n = K(d);
|
|
852
|
+
Z(e, F(F({}, f), {}, {
|
|
853
853
|
templatesApi: r.templatesApi,
|
|
854
854
|
renderForm: n
|
|
855
855
|
}), i);
|
|
@@ -863,12 +863,12 @@
|
|
|
863
863
|
var W,
|
|
864
864
|
$,
|
|
865
865
|
X = {
|
|
866
|
-
start:
|
|
866
|
+
start: z,
|
|
867
867
|
entryPoint: {},
|
|
868
|
-
partialRenderingForIE8:
|
|
868
|
+
partialRenderingForIE8: G("{partialRenderingForIE8}"),
|
|
869
869
|
keformsUrl: "{keformsUrl}"
|
|
870
870
|
};
|
|
871
|
-
t.g.CF = X, (W = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (W.register(
|
|
871
|
+
t.g.CF = X, (W = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (W.register(M, "defaultCallback", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(G, "parseBool", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(D, "url", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(R, "buildUrl", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(x, "isAllowed", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(N, "getParameterByName", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(V, "runParallel", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(function (e, r) {
|
|
872
872
|
try {
|
|
873
873
|
var t,
|
|
874
874
|
o,
|
|
@@ -890,7 +890,7 @@
|
|
|
890
890
|
} catch (e) {
|
|
891
891
|
return !1;
|
|
892
892
|
}
|
|
893
|
-
}, "isEngineVersionGreaterThanOrEqual", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(q, "loadForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(Z, "renderForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(
|
|
893
|
+
}, "isEngineVersionGreaterThanOrEqual", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(q, "loadForm", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(Z, "renderForm", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(K, "getEngineEntryPoint", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(z, "start", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts"), W.register(X, "CandyClientExports", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\Client.ts")), ($ = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && $(e);
|
|
894
894
|
},
|
|
895
895
|
68: function (e, r, t) {
|
|
896
896
|
var o;
|
|
@@ -916,7 +916,7 @@
|
|
|
916
916
|
resourcesVersion: "{resourcesVersion}",
|
|
917
917
|
konturDomains: "{konturDomains}"
|
|
918
918
|
};
|
|
919
|
-
(i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (i.register(n, "parseBool", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\ClientSettings.ts"), i.register(s, "clientSettings", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\ClientSettings.ts")), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
|
|
919
|
+
(i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && (i.register(n, "parseBool", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\ClientSettings.ts"), i.register(s, "clientSettings", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\ClientSettings.ts")), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
|
|
920
920
|
},
|
|
921
921
|
152: function (module, __webpack_exports__, __webpack_require__) {
|
|
922
922
|
__webpack_require__.d(__webpack_exports__, {
|
|
@@ -936,6 +936,37 @@
|
|
|
936
936
|
}, _typeof(e);
|
|
937
937
|
}
|
|
938
938
|
|
|
939
|
+
function asyncGeneratorStep(e, r, t, o, n, i, a) {
|
|
940
|
+
try {
|
|
941
|
+
var s = e[i](a),
|
|
942
|
+
u = s.value;
|
|
943
|
+
} catch (e) {
|
|
944
|
+
return void t(e);
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
s.done ? r(u) : Promise.resolve(u).then(o, n);
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
function _asyncToGenerator(e) {
|
|
951
|
+
return function () {
|
|
952
|
+
var r = this,
|
|
953
|
+
t = arguments;
|
|
954
|
+
return new Promise(function (o, n) {
|
|
955
|
+
var i = e.apply(r, t);
|
|
956
|
+
|
|
957
|
+
function a(e) {
|
|
958
|
+
asyncGeneratorStep(i, o, n, a, s, "next", e);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
function s(e) {
|
|
962
|
+
asyncGeneratorStep(i, o, n, a, s, "throw", e);
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
a(void 0);
|
|
966
|
+
});
|
|
967
|
+
};
|
|
968
|
+
}
|
|
969
|
+
|
|
939
970
|
function _classCallCheck(e, r) {
|
|
940
971
|
if (!(e instanceof r)) throw new TypeError("Cannot call a class as a function");
|
|
941
972
|
}
|
|
@@ -1021,6 +1052,8 @@
|
|
|
1021
1052
|
_classCallCheck(this, LegacyPublicForm), this.form = void 0, this.form = e;
|
|
1022
1053
|
}
|
|
1023
1054
|
|
|
1055
|
+
var _validateChildrenByPath;
|
|
1056
|
+
|
|
1024
1057
|
return _createClass(LegacyPublicForm, [{
|
|
1025
1058
|
key: "batchUpdate",
|
|
1026
1059
|
value: function (e) {
|
|
@@ -1036,6 +1069,22 @@
|
|
|
1036
1069
|
value: function (e) {
|
|
1037
1070
|
throw new Error("Method not implemented.");
|
|
1038
1071
|
}
|
|
1072
|
+
}, {
|
|
1073
|
+
key: "validateChildrenByPath",
|
|
1074
|
+
value: (_validateChildrenByPath = _asyncToGenerator(regeneratorRuntime.mark(function e(r) {
|
|
1075
|
+
return regeneratorRuntime.wrap(function (e) {
|
|
1076
|
+
for (;;) switch (e.prev = e.next) {
|
|
1077
|
+
case 0:
|
|
1078
|
+
throw new Error("Method not implemented.");
|
|
1079
|
+
|
|
1080
|
+
case 1:
|
|
1081
|
+
case "end":
|
|
1082
|
+
return e.stop();
|
|
1083
|
+
}
|
|
1084
|
+
}, e);
|
|
1085
|
+
})), function (e) {
|
|
1086
|
+
return _validateChildrenByPath.apply(this, arguments);
|
|
1087
|
+
})
|
|
1039
1088
|
}, {
|
|
1040
1089
|
key: "__INTERNAL__importFromEmployeeService",
|
|
1041
1090
|
value: function () {
|
|
@@ -1043,7 +1092,17 @@
|
|
|
1043
1092
|
}
|
|
1044
1093
|
}, {
|
|
1045
1094
|
key: "importEmployees",
|
|
1046
|
-
value: function (e) {
|
|
1095
|
+
value: function (e, r) {
|
|
1096
|
+
throw new Error("Method not implemented.");
|
|
1097
|
+
}
|
|
1098
|
+
}, {
|
|
1099
|
+
key: "print",
|
|
1100
|
+
value: function (e, r) {
|
|
1101
|
+
throw new Error("Method not implemented.");
|
|
1102
|
+
}
|
|
1103
|
+
}, {
|
|
1104
|
+
key: "runMassAction",
|
|
1105
|
+
value: function (e, r) {
|
|
1047
1106
|
throw new Error("Method not implemented.");
|
|
1048
1107
|
}
|
|
1049
1108
|
}, {
|
|
@@ -1064,12 +1123,7 @@
|
|
|
1064
1123
|
}, {
|
|
1065
1124
|
key: "onModelChange",
|
|
1066
1125
|
value: function (e, r) {
|
|
1067
|
-
|
|
1068
|
-
}
|
|
1069
|
-
}, {
|
|
1070
|
-
key: "offModelChange",
|
|
1071
|
-
value: function (e, r) {
|
|
1072
|
-
console.error("form.offModelChange() is not supported yet");
|
|
1126
|
+
throw Error("form.onModelChange() is not supported yet");
|
|
1073
1127
|
}
|
|
1074
1128
|
}, {
|
|
1075
1129
|
key: "save",
|
|
@@ -1092,6 +1146,16 @@
|
|
|
1092
1146
|
var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
|
|
1093
1147
|
return this.form.validator.validateAll(e);
|
|
1094
1148
|
}
|
|
1149
|
+
}, {
|
|
1150
|
+
key: "getAdditionalEmployeeInfo",
|
|
1151
|
+
value: function (e) {
|
|
1152
|
+
throw new Error("not implemented");
|
|
1153
|
+
}
|
|
1154
|
+
}, {
|
|
1155
|
+
key: "getWorkingEventsForEmployee",
|
|
1156
|
+
value: function (e) {
|
|
1157
|
+
throw new Error("not implemented");
|
|
1158
|
+
}
|
|
1095
1159
|
}, {
|
|
1096
1160
|
key: "hasErrors",
|
|
1097
1161
|
value: function () {
|
|
@@ -1156,10 +1220,30 @@
|
|
|
1156
1220
|
value: function (e) {
|
|
1157
1221
|
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1158
1222
|
}
|
|
1223
|
+
}, {
|
|
1224
|
+
key: "uuidGenerate",
|
|
1225
|
+
value: function () {
|
|
1226
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1227
|
+
}
|
|
1159
1228
|
}, {
|
|
1160
1229
|
key: "showModal",
|
|
1161
1230
|
value: function (e) {
|
|
1162
|
-
throw new
|
|
1231
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1232
|
+
}
|
|
1233
|
+
}, {
|
|
1234
|
+
key: "addSection",
|
|
1235
|
+
value: function (e) {
|
|
1236
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1237
|
+
}
|
|
1238
|
+
}, {
|
|
1239
|
+
key: "callInitSection",
|
|
1240
|
+
value: function (e) {
|
|
1241
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1242
|
+
}
|
|
1243
|
+
}, {
|
|
1244
|
+
key: "openEmployeeEditor",
|
|
1245
|
+
value: function (e) {
|
|
1246
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1163
1247
|
}
|
|
1164
1248
|
}, {
|
|
1165
1249
|
key: "removeInstance",
|
|
@@ -1186,6 +1270,16 @@
|
|
|
1186
1270
|
value: function (e) {
|
|
1187
1271
|
return Promise.resolve(void 0);
|
|
1188
1272
|
}
|
|
1273
|
+
}, {
|
|
1274
|
+
key: "ensureInstanceFullyLoaded",
|
|
1275
|
+
value: function (e) {
|
|
1276
|
+
throw new Error("Method not implemented.");
|
|
1277
|
+
}
|
|
1278
|
+
}, {
|
|
1279
|
+
key: "customNormalize",
|
|
1280
|
+
value: function (e, r) {
|
|
1281
|
+
throw new _Common_Errors__WEBPACK_IMPORTED_MODULE_0__.nj();
|
|
1282
|
+
}
|
|
1189
1283
|
}, {
|
|
1190
1284
|
key: "__reactstandin__regenerateByEval",
|
|
1191
1285
|
value: function __reactstandin__regenerateByEval(key, code) {
|
|
@@ -1200,7 +1294,7 @@
|
|
|
1200
1294
|
return new LegacyPublicForm(e);
|
|
1201
1295
|
}
|
|
1202
1296
|
|
|
1203
|
-
reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(modelChangeEventPath, "modelChangeEventPath", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(mapChunkValues, "mapChunkValues", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(reduceChunkValues, "reduceChunkValues", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(LegacyPublicForm, "LegacyPublicForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(createLegacyPublicForm, "createLegacyPublicForm", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
|
|
1297
|
+
reactHotLoader = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0, reactHotLoader && (reactHotLoader.register(modelChangeEventPath, "modelChangeEventPath", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(mapChunkValues, "mapChunkValues", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(reduceChunkValues, "reduceChunkValues", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(LegacyPublicForm, "LegacyPublicForm", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts"), reactHotLoader.register(createLegacyPublicForm, "createLegacyPublicForm", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Forms\\Client\\LegacyPublicForm\\CreateLegacyPublicForm.ts")), leaveModule = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0, leaveModule && leaveModule(module);
|
|
1204
1298
|
},
|
|
1205
1299
|
412: function (e, r, t) {
|
|
1206
1300
|
var o;
|
|
@@ -1258,7 +1352,7 @@
|
|
|
1258
1352
|
}], null && n(r.prototype, null), t && n(r, t), e;
|
|
1259
1353
|
}();
|
|
1260
1354
|
|
|
1261
|
-
(i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && i.register(s, "LoadIntoDocument", "C:\\BuildAgent\\work\\forms-root\\Engine\\src\\Helpers\\LoadIntoDocument.ts"), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
|
|
1355
|
+
(i = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.default : void 0) && i.register(s, "LoadIntoDocument", "C:\\BuildAgent\\work\\forms-root-candy\\keforms.engine\\Engine\\src\\Helpers\\LoadIntoDocument.ts"), (a = "undefined" != typeof reactHotLoaderGlobal ? reactHotLoaderGlobal.leaveModule : void 0) && a(e);
|
|
1262
1356
|
}
|
|
1263
1357
|
},
|
|
1264
1358
|
__webpack_module_cache__ = {};
|
|
@@ -1300,4 +1394,4 @@
|
|
|
1300
1394
|
|
|
1301
1395
|
var __webpack_exports__ = __webpack_require__(133);
|
|
1302
1396
|
})();
|
|
1303
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6L0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJBcHBsaWNhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImNvbnN0cnVjdG9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIk5vdFN1cHBvcnRlZEVycm9yIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwidW5kZWZpbmVkIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJhcmd1bWVudE5hbWUiLCJUeXBpbmdFcnJvciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiaW5wdXQiLCJzdHJpbmdpZnlVbmtub3duRXJyb3IiLCJlcnJvciIsImVuc3VyZU5vdE51bGxPclVuZGVmaW5lZCIsIm5vb3AiLCJyZWplY3QiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsIml0ZW1zIiwibWluTGVuZ3RoIiwibGVuZ3RoIiwibWluTGVuZ3RoT3JVbmRlZmluZWQiLCJhcnJheUhhc0xlbmd0aCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzQXRMZWFzdE9uZUl0ZW0iLCJlbnN1cmVBcnJheUlzTm90RW1wdHkiLCJlbnN1cmVBcnJheUhhc0xlbmd0aCIsImVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsIiwiZW5zdXJlTmV2ZXIiLCJuZXZlckFyZ3VtZW50IiwiZW5zdXJlQW5kR2V0U3RyaW5nIiwicnVuQXN5bmNBY3Rpb24iLCJhY3Rpb24iLCJpc051bGxPckVtcHR5IiwiaXNOb3ROdWxsT3JFbXB0eSIsImlzTnVsbE9yV2hpdGVTcGFjZSIsInRyaW0iLCJ0cmltTGFzdFNsYXNoIiwidXJsIiwic2xpY2UiLCJhc3NlcnRJcyIsInZhbHVlIiwiZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsImUiLCJvYmoiLCJEYXRhVmlldyIsInByb3RvdHlwZSIsImlzUHJvdG90eXBlT2YiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpbmRleE9mIiwiT2JqZWN0IiwidG9TdHJpbmciLCJjYWxsIiwibm9ybWFsaXplTmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJIZWFkZXJzIiwiaGVhZGVycyIsInRoaXMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm9sZFZhbHVlIiwiZ2V0IiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJzZXQiLCJjYWxsYmFjayIsInRoaXNBcmciLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJjb25zdW1lZCIsImJvZHkiLCJib2R5VXNlZCIsIlByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJyZWFkZXIiLCJyZXNvbHZlIiwib25sb2FkIiwicmVzdWx0Iiwib25lcnJvciIsInJlYWRCbG9iQXNBcnJheUJ1ZmZlciIsImJsb2IiLCJGaWxlUmVhZGVyIiwicHJvbWlzZSIsInJlYWRBc0FycmF5QnVmZmVyIiwicmVhZEFzVGV4dCIsImJ1ZiIsInZpZXciLCJVaW50OEFycmF5IiwiY2hhcnMiLCJpIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJtZXRob2RzIiwibWV0aG9kIiwidXBjYXNlZCIsInRvVXBwZXJDYXNlIiwiUmVxdWVzdCIsIm9wdGlvbnMiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInNwbGl0IiwiYnl0ZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyYXdIZWFkZXJzIiwic3Vic3RyIiwibGluZSIsInBhcnRzIiwia2V5IiwiUmVzcG9uc2UiLCJib2R5SW5pdCIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsInJlc3BvbnNlIiwicmVkaXJlY3RTdGF0dXNlcyIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiRE9NRXhjZXB0aW9uIiwiZXJyIiwic3RhY2siLCJjcmVhdGUiLCJmZXRjaCIsImluaXQiLCJyZXF1ZXN0IiwiYWJvcnRlZCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiYWJvcnRYaHIiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwic2V0VGltZW91dCIsIm9udGltZW91dCIsIm9uYWJvcnQiLCJocmVmIiwib3BlbiIsImZpeFVybCIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsInNldFJlcXVlc3RIZWFkZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZW5kIiwicG9seWZpbGwiLCJkZWZhdWx0Q2FsbGJhY2siLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXRoIiwicGFyYW1zIiwicXVlcnlQYXJ0cyIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpc0FsbG93ZWQiLCJkb21haW5zIiwiUmVnRXhwIiwiaG9zdCIsImdldFBhcmFtZXRlckJ5TmFtZSIsInNlYXJjaCIsInBhcmFtIiwiZmluZCIsInJ1blBhcmFsbGVsIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwiaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsInNldHRpbmdzIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsInJlc291cmNlc1ZlcnNpb24iLCJlbnRyeVBvaW50IiwiaXNOZWVkRW5naW5lIiwibWluIiwidiIsInJlc291cmNlWm9uZSIsIkxvYWRJbnRvRG9jdW1lbnQiLCJjYiIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJzdGFydCIsImNsaWVudFNldHRpbmdzIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImF1dGhvcml6ZWQiLCJjYXVsZHJvbkFwaVVybCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJrb250dXJEb21haW5zIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc0luZGl2aWR1YWwiLCJpc0ZvcmVpZ24iLCJmZWVkYmFja0VuYWJsZWQiLCJjYW5keVRvdXJBdmFpbGFibGUiLCJldmVudEVtaXR0ZXIiLCJmb3JtSW5mbyIsInByaW50SW5mbyIsInJlZ2lvbnMiLCJoYXNUZW1wbGF0ZXMiLCJtb2RlbCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwidGhlbWUiLCJsb2FkRXJyb3IiLCJyZW5kZXIiLCJ0ZW1wbGF0ZXNBcGkiLCJDYW5keUNsaWVudEV4cG9ydHMiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJmaWVsZE5hbWUiLCJtYXBDaHVua1ZhbHVlcyIsImNodW5rIiwiZmlsdGVyIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJjaHVua3MiLCJyZWR1Y2UiLCJMZWdhY3lQdWJsaWNGb3JtIiwidXBkYXRlUHJvYyIsImVycm9yTG9nIiwiZW1wbG95ZWVzIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnROYW1lIiwibGlzdGVuZXIiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNvbnNvbGUiLCJjaGFuZ2VTZXQiLCJzdG9wQXV0b3NlbmQiLCJ1bm1vdW50IiwiZ2V0Q2h1bmsiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJpbnN0YW5jZSIsImluc3RhbmNlcyIsImVuYWJsZWQiLCJwYXRoUHJlZml4ZXMiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJGdW5jdGlvbiIsIndpbmRvdyIsImhtZCIsImNoaWxkcmVuIiwicHJvcCIsIl9fd2VicGFja19leHBvcnRzX18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVPLGVBQVNBLENBQVQsQ0FBK0JDLENBQS9CLEVBQStCQTtBQUdsQyxlQUFBLFNBQUEsTUFBQSxDQUFnQkEsQ0FBQUEsQ0FBUUMsRUFBeEIsRUFBQSxVQUFBLEVBQUEsTUFBQSxDQUFxQ0QsQ0FBQUEsQ0FBUUEsT0FBN0MsRUFBQSxvQkFBQSxDQUFBOzs7Ozs7OzJUQUhZRCxDLEVBQUFBLHVCLEVBQUFBLHFHLEdBQUFBLEMsMEZBQUFBLEs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUNGSEcsZ0JBQUFBLEdBQWIsVUFBQSxNQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUEsQ0FBQSxnQkFBQSxFQUFBLE1BQUEsQ0FBQTs7QUFBQSxZQUFBLE1BQUEsR0FBQSxZQUFBLENBQUEsZ0JBQUEsQ0FBQTs7QUFDSSxpQkFBQSxnQkFBQSxDQUFtQkUsQ0FBbkIsRUFBbUJBO0FBQWlCLGNBQUEsQ0FBQTtB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IjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIgKyAobWVzc2FnZSAhPSB1bmRlZmluZWQgPyBcIjogXCIgKyBtZXNzYWdlIDogXCJcIikpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBhYm9uSWQ6IG9wdGlvbnMuYWJvbklkLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZ0lkLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogb3B0aW9ucy51c2VySWQsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGlzSW5kaXZpZHVhbDogY2xpZW50RHJhZnRJbmZvLmlzSW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgICBpc0ZvcmVpZ246IGNsaWVudERyYWZ0SW5mby5pc0ZvcmVpZ24sXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgY2FuZHlUb3VyQXZhaWxhYmxlOiBjbGllbnREcmFmdEluZm8uY2FuZHlUb3VyQXZhaWxhYmxlLFxuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcjogb3B0aW9ucy5ldmVudEVtaXR0ZXIsXG4gICAgICAgICAgICAgICAgZm9ybUluZm86IGNsaWVudERyYWZ0SW5mby5mb3JtSW5mbyxcbiAgICAgICAgICAgICAgICBwcmludEluZm86IGNsaWVudERyYWZ0SW5mby5wcmludEluZm8sXG4gICAgICAgICAgICAgICAgcmVnaW9uczogY2xpZW50RHJhZnRJbmZvLnJlZ2lvbnMsXG4gICAgICAgICAgICAgICAgaGFzVGVtcGxhdGVzOiBjbGllbnREcmFmdEluZm8uaGFzVGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5obWQgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0bW9kdWxlID0gT2JqZWN0LmNyZWF0ZShtb2R1bGUpO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsICdleHBvcnRzJywge1xuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0c2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqLCBwcm9wKSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTsgfSIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
1397
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vRXJyb3JzLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6L0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJBcHBsaWNhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImNvbnN0cnVjdG9yIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIk5vdFN1cHBvcnRlZEVycm9yIiwiSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIiwidW5kZWZpbmVkIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJhcmd1bWVudE5hbWUiLCJUeXBpbmdFcnJvciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiaW5wdXQiLCJzdHJpbmdpZnlVbmtub3duRXJyb3IiLCJlcnJvciIsImVuc3VyZU5vdE51bGxPclVuZGVmaW5lZCIsIm5vb3AiLCJyZWplY3QiLCJpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbCIsIml0ZW1zIiwibWluTGVuZ3RoIiwibGVuZ3RoIiwibWluTGVuZ3RoT3JVbmRlZmluZWQiLCJhcnJheUhhc0xlbmd0aCIsImFycmF5SXNOb3RFbXB0eSIsImFycmF5SGFzQXRMZWFzdE9uZUl0ZW0iLCJlbnN1cmVBcnJheUlzTm90RW1wdHkiLCJlbnN1cmVBcnJheUhhc0xlbmd0aCIsImVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsIiwiZW5zdXJlTmV2ZXIiLCJuZXZlckFyZ3VtZW50IiwiZW5zdXJlQW5kR2V0U3RyaW5nIiwicnVuQXN5bmNBY3Rpb24iLCJhY3Rpb24iLCJpc051bGxPckVtcHR5IiwiaXNOb3ROdWxsT3JFbXB0eSIsImlzTnVsbE9yV2hpdGVTcGFjZSIsInRyaW0iLCJ0cmltTGFzdFNsYXNoIiwidXJsIiwic2xpY2UiLCJhc3NlcnRJcyIsInZhbHVlIiwiZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsImUiLCJvYmoiLCJEYXRhVmlldyIsInByb3RvdHlwZSIsImlzUHJvdG90eXBlT2YiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpbmRleE9mIiwiT2JqZWN0IiwidG9TdHJpbmciLCJjYWxsIiwibm9ybWFsaXplTmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJIZWFkZXJzIiwiaGVhZGVycyIsInRoaXMiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiQXJyYXkiLCJpc0FycmF5IiwiaGVhZGVyIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIm9sZFZhbHVlIiwiZ2V0IiwiaGFzIiwiaGFzT3duUHJvcGVydHkiLCJzZXQiLCJjYWxsYmFjayIsInRoaXNBcmciLCJrZXlzIiwicHVzaCIsInZhbHVlcyIsImVudHJpZXMiLCJjb25zdW1lZCIsImJvZHkiLCJib2R5VXNlZCIsIlByb21pc2UiLCJmaWxlUmVhZGVyUmVhZHkiLCJyZWFkZXIiLCJyZXNvbHZlIiwib25sb2FkIiwicmVzdWx0Iiwib25lcnJvciIsInJlYWRCbG9iQXNBcnJheUJ1ZmZlciIsImJsb2IiLCJGaWxlUmVhZGVyIiwicHJvbWlzZSIsInJlYWRBc0FycmF5QnVmZmVyIiwicmVhZEFzVGV4dCIsImJ1ZiIsInZpZXciLCJVaW50OEFycmF5IiwiY2hhcnMiLCJpIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsImpzb24iLCJKU09OIiwicGFyc2UiLCJtZXRob2RzIiwibWV0aG9kIiwidXBjYXNlZCIsInRvVXBwZXJDYXNlIiwiUmVxdWVzdCIsIm9wdGlvbnMiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInNwbGl0IiwiYnl0ZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJyYXdIZWFkZXJzIiwic3Vic3RyIiwibGluZSIsInBhcnRzIiwia2V5IiwiUmVzcG9uc2UiLCJib2R5SW5pdCIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsInJlc3BvbnNlIiwicmVkaXJlY3RTdGF0dXNlcyIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiRE9NRXhjZXB0aW9uIiwiZXJyIiwic3RhY2siLCJjcmVhdGUiLCJmZXRjaCIsImluaXQiLCJyZXF1ZXN0IiwiYWJvcnRlZCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiYWJvcnRYaHIiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwic2V0VGltZW91dCIsIm9udGltZW91dCIsIm9uYWJvcnQiLCJocmVmIiwib3BlbiIsImZpeFVybCIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsInNldFJlcXVlc3RIZWFkZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJzZW5kIiwicG9seWZpbGwiLCJkZWZhdWx0Q2FsbGJhY2siLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXRoIiwicGFyYW1zIiwicXVlcnlQYXJ0cyIsInBhcmFtTmFtZSIsInBhcmFtVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpc0FsbG93ZWQiLCJkb21haW5zIiwiUmVnRXhwIiwiaG9zdCIsImdldFBhcmFtZXRlckJ5TmFtZSIsInNlYXJjaCIsInBhcmFtIiwiZmluZCIsInJ1blBhcmFsbGVsIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwiaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsInNldHRpbmdzIiwiZ2Z2IiwiZW5naW5lVmVyc2lvbiIsInJlc291cmNlc1ZlcnNpb24iLCJlbnRyeVBvaW50IiwiaXNOZWVkRW5naW5lIiwibWluIiwidiIsInJlc291cmNlWm9uZSIsIkxvYWRJbnRvRG9jdW1lbnQiLCJjYiIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJzdGFydCIsImNsaWVudFNldHRpbmdzIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImF1dGhvcml6ZWQiLCJjYXVsZHJvbkFwaVVybCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJrb250dXJEb21haW5zIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc0luZGl2aWR1YWwiLCJpc0ZvcmVpZ24iLCJmZWVkYmFja0VuYWJsZWQiLCJjYW5keVRvdXJBdmFpbGFibGUiLCJldmVudEVtaXR0ZXIiLCJmb3JtSW5mbyIsInByaW50SW5mbyIsInJlZ2lvbnMiLCJoYXNUZW1wbGF0ZXMiLCJtb2RlbCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwidGhlbWUiLCJsb2FkRXJyb3IiLCJyZW5kZXIiLCJ0ZW1wbGF0ZXNBcGkiLCJDYW5keUNsaWVudEV4cG9ydHMiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4IiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJmaWVsZE5hbWUiLCJtYXBDaHVua1ZhbHVlcyIsImNodW5rIiwiZmlsdGVyIiwicmVkdWNlQ2h1bmtWYWx1ZXMiLCJjaHVua3MiLCJyZWR1Y2UiLCJMZWdhY3lQdWJsaWNGb3JtIiwidXBkYXRlUHJvYyIsImVycm9yTG9nIiwiZW1wbG95ZWVzIiwicHJpbnRUeXBlIiwiYWN0aW9uSWQiLCJwYXJhbWV0ZXJzIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXREaWdlc3RBcGlQaWNrbGlzdCIsInF1ZXJ5IiwiZXZlbnROYW1lIiwibGlzdGVuZXIiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJnZXRDaHVuayIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJmaWx0ZXJzIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbXBsb3llZUlkIiwiaW5zdGFuY2UiLCJpbnN0YW5jZXMiLCJlbmFibGVkIiwicGF0aFByZWZpeGVzIiwiYmluZGluZ1BhdGgiLCJub3JtYWxpemVySWQiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImQiLCJkZWZpbml0aW9uIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImciLCJGdW5jdGlvbiIsIndpbmRvdyIsImhtZCIsImNoaWxkcmVuIiwicHJvcCIsIl9fd2VicGFja19leHBvcnRzX18iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVPLGVBQVNBLENBQVQsQ0FBK0JDLENBQS9CLEVBQStCQTtBQUdsQyxlQUFBLFNBQUEsTUFBQSxDQUFnQkEsQ0FBQUEsQ0FBUUMsRUFBeEIsRUFBQSxVQUFBLEVBQUEsTUFBQSxDQUFxQ0QsQ0FBQUEsQ0FBUUEsT0FBN0MsRUFBQSxvQkFBQSxDQUFBOzs7Ozs7OzJUQUhZRCxDLEVBQUFBLHVCLEVBQUFBLDJILEdBQUFBLEMsMEZBQUFBLEs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUNGSEcsZ0JBQUFBLEdBQWIsVUFBQSxNQUFBLEVBQUE7QUFBQSxRQUFBLFNBQUEsQ0FBQSxnQkFBQSxFQUFBLE1BQUEsQ0FBQTs7QUFBQSxZQUFBLE1BQUEsR0FB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M0IsQ0FBZ0NFLElBQWhDRixDQUFxQ1QsQ0FBckNTLEVBQTBDK1QsQ0FBMUMvVCxDQUFQO0FBQWlEK1QsR0hDL0ZsQjs7QUlFQSxNQUFJbUIsbUJBQUFBLEdBQXNCbkIsbUJBQUFBLENBQW9CLEdBQXBCQSxDQUExQjtBQUE4QyxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIgKyAobWVzc2FnZSAhPSB1bmRlZmluZWQgPyBcIjogXCIgKyBtZXNzYWdlIDogXCJcIikpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBhYm9uSWQ6IG9wdGlvbnMuYWJvbklkLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZ0lkLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogb3B0aW9ucy51c2VySWQsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGlzSW5kaXZpZHVhbDogY2xpZW50RHJhZnRJbmZvLmlzSW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgICBpc0ZvcmVpZ246IGNsaWVudERyYWZ0SW5mby5pc0ZvcmVpZ24sXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgY2FuZHlUb3VyQXZhaWxhYmxlOiBjbGllbnREcmFmdEluZm8uY2FuZHlUb3VyQXZhaWxhYmxlLFxuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcjogb3B0aW9ucy5ldmVudEVtaXR0ZXIsXG4gICAgICAgICAgICAgICAgZm9ybUluZm86IGNsaWVudERyYWZ0SW5mby5mb3JtSW5mbyxcbiAgICAgICAgICAgICAgICBwcmludEluZm86IGNsaWVudERyYWZ0SW5mby5wcmludEluZm8sXG4gICAgICAgICAgICAgICAgcmVnaW9uczogY2xpZW50RHJhZnRJbmZvLnJlZ2lvbnMsXG4gICAgICAgICAgICAgICAgaGFzVGVtcGxhdGVzOiBjbGllbnREcmFmdEluZm8uaGFzVGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImltcG9ydCB7IEVtcGxveWVlIH0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQge1xuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLWNvbW1vbi9zcmMvQ2xpZW50L1R5cGVzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10sIG9wdGlvbnM/OiB7IHNjZW5hcmlvPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHByaW50VHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRBZGRpdGlvbmFsRW1wbG95ZWVJbmZvKGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFJlcXVlc3QpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlTdWJ0cmVlKFxuICAgICAgICBzb3VyY2VCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YXJnZXRCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICBkb05vdENvcHlQYXRocz86IHN0cmluZ1tdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXVpZEdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VjdGlvbihvcHRpb25zOiBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsbEluaXRTZWN0aW9uKG9wdGlvbnM6IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbkVtcGxveWVlRWRpdG9yKGVtcGxveWVlSWQ6IHN0cmluZykge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVJbnN0YW5jZUZ1bGx5TG9hZGVkKFxuICAgICAgICBiaW5kaW5nUGF0aDogc3RyaW5nIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgLi4uaW5zdGFuY2VzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZCA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdFUyBNb2R1bGVzIG1heSBub3QgYXNzaWduIG1vZHVsZS5leHBvcnRzIG9yIGV4cG9ydHMuKiwgVXNlIEVTTSBleHBvcnQgc3ludGF4LCBpbnN0ZWFkOiAnICsgbW9kdWxlLmlkKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG4iXSwic291cmNlUm9vdCI6IiJ9
|