@kontur.candy/tools 2.135.0 → 2.136.0
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 +8 -0
- package/README.md +8 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +9 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +5 -1
- package/distr/Common/KCLangRuntimeUtils.js +5 -1
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +25 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +99 -54
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +9 -9
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +18 -13
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +13 -8
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +48 -9
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +8 -2
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +46 -11
- package/distr/Tools/src/CandyCLI.js +81 -29
- package/distr/Tools/src/Commons/Logging/Logger.js +2 -2
- 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 +6 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +19 -14
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
}).prototype = Object.create(Error.prototype), T.prototype.constructor = T;
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
function
|
|
258
|
+
function k(e, t) {
|
|
259
259
|
return new Promise(function (r, o) {
|
|
260
260
|
var i = new E(e, t);
|
|
261
261
|
if (i.signal && i.signal.aborted) return o(new T("Aborted", "AbortError"));
|
|
@@ -316,7 +316,7 @@
|
|
|
316
316
|
});
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
function
|
|
319
|
+
function P(e, t) {
|
|
320
320
|
if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
|
|
321
321
|
}
|
|
322
322
|
|
|
@@ -333,11 +333,11 @@
|
|
|
333
333
|
}), e;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
-
|
|
336
|
+
k.polyfill = !0, n.fetch || (n.fetch = k, n.Headers = p, n.Request = E, n.Response = A);
|
|
337
337
|
|
|
338
338
|
var C = function () {
|
|
339
339
|
function e() {
|
|
340
|
-
|
|
340
|
+
P(this, e);
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
return _(e, null, [{
|
|
@@ -403,7 +403,7 @@
|
|
|
403
403
|
}, R(e, t);
|
|
404
404
|
}
|
|
405
405
|
|
|
406
|
-
function
|
|
406
|
+
function x(e, t) {
|
|
407
407
|
if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
|
|
408
408
|
e.prototype = Object.create(t && t.prototype, {
|
|
409
409
|
constructor: {
|
|
@@ -416,7 +416,7 @@
|
|
|
416
416
|
}), t && R(e, t);
|
|
417
417
|
}
|
|
418
418
|
|
|
419
|
-
function
|
|
419
|
+
function F(e, t) {
|
|
420
420
|
if (t && ("object" === D(t) || "function" == typeof t)) return t;
|
|
421
421
|
if (void 0 !== t) throw new TypeError("Derived constructors may only return object or undefined");
|
|
422
422
|
return function (e) {
|
|
@@ -501,26 +501,26 @@
|
|
|
501
501
|
r = Reflect.construct(n, arguments, o);
|
|
502
502
|
} else r = n.apply(this, arguments);
|
|
503
503
|
|
|
504
|
-
return
|
|
504
|
+
return F(this, r);
|
|
505
505
|
};
|
|
506
506
|
}
|
|
507
507
|
|
|
508
508
|
var q = function (e) {
|
|
509
|
-
|
|
509
|
+
x(r, e);
|
|
510
510
|
var t = N(r);
|
|
511
511
|
|
|
512
512
|
function r() {
|
|
513
|
-
return
|
|
513
|
+
return P(this, r), t.call(this, "Operation not implemented");
|
|
514
514
|
}
|
|
515
515
|
|
|
516
516
|
return r;
|
|
517
517
|
}(function (e) {
|
|
518
|
-
|
|
518
|
+
x(r, e);
|
|
519
519
|
var t = N(r);
|
|
520
520
|
|
|
521
521
|
function r(e) {
|
|
522
522
|
var n;
|
|
523
|
-
return
|
|
523
|
+
return P(this, r), (n = t.call(this, e)).name = n.constructor.name, n;
|
|
524
524
|
}
|
|
525
525
|
|
|
526
526
|
return r;
|
|
@@ -578,7 +578,7 @@
|
|
|
578
578
|
|
|
579
579
|
var J = function () {
|
|
580
580
|
function e(t) {
|
|
581
|
-
|
|
581
|
+
P(this, e), this.form = void 0, this.form = t;
|
|
582
582
|
}
|
|
583
583
|
|
|
584
584
|
return _(e, [{
|
|
@@ -731,6 +731,11 @@
|
|
|
731
731
|
value: function (e, t) {
|
|
732
732
|
throw new q();
|
|
733
733
|
}
|
|
734
|
+
}, {
|
|
735
|
+
key: "focusOnControlIfExist",
|
|
736
|
+
value: function (e) {
|
|
737
|
+
throw new q();
|
|
738
|
+
}
|
|
734
739
|
}, {
|
|
735
740
|
key: "setAllCheckboxesFor113103",
|
|
736
741
|
value: function (e) {
|
|
@@ -911,7 +916,7 @@
|
|
|
911
916
|
var h;
|
|
912
917
|
l.credentials = "omit", l.headers = null !== (h = l.headers) && void 0 !== h ? h : {}, l.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
|
|
913
918
|
} else l.credentials = "omit";
|
|
914
|
-
var d = null !== (o = r.fetch) && void 0 !== o ? o :
|
|
919
|
+
var d = null !== (o = r.fetch) && void 0 !== o ? o : k;
|
|
915
920
|
d(f, l).then(function (e) {
|
|
916
921
|
return e.json();
|
|
917
922
|
}).then(function (n) {
|
|
@@ -977,4 +982,4 @@
|
|
|
977
982
|
};
|
|
978
983
|
e.g.CF = ae;
|
|
979
984
|
}();
|
|
980
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJfc2V0UHJvdG90eXBlT2YiLCJvIiwicCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJSZWZlcmVuY2VFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsImFyZ3MiLCJDbGFzcyIsImEiLCJhcHBseSIsImJpbmQiLCJhcmd1bWVudHMiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiX2NhY2hlIiwiTWFwIiwiV3JhcHBlciIsImZuIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY29uc29sZSIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJlbmFibGVkIiwicGF0aFByZWZpeGVzIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQsV0FYSUQsQ0FBQUEs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QUFBQSxDQUFpQjBCO0FBTDVCLFdBREp2QyxFQVFJLFVBQUEsQ0FBQSxFQUFBO0FBQ0ksZ0JBQUEsQ0FBSXdDLENBQUosSUFBa0J4VixDQUFBQSxDQUFBQSxDQUFBQSxDQUFPNlIsRUFBUDdSLENBQVVtVCxVQUFWblQsQ0FBcUJpVCxDQUFyQmpULENBQWxCLEVBQUE7QUFJQSxrQkFBTXlWLENBQUFBLEdBQVN6QixFQUFBQSxDQUFvQmQsQ0FBcEJjLENBQWY7QUFFQUwsY0FBQUEsRUFBQUEsQ0FDSUMsQ0FESkQsRUFBVSxDQUFBLENBQUMsQ0FBQSxDQUFBLEVBQUEsRUFHQUUsQ0FIQSxDQUFELEVBQUEsRUFBQSxFQUFBO0FBSUY2QixnQkFBQUEsWUFBQUEsRUFBY2xQLENBQUFBLENBQVFrUCxZQUpwQjtBQUtGL0IsZ0JBQUFBLFVBQUFBLEVBQVk4QjtBQUxWLGVBQUEsQ0FBVjlCLEVBT0lqUixDQVBKaVIsQ0FBQUE7QUFPSWpSLGFBYkosTUFDSUEsQ0FBQUEsQ0FBUyxJQUFJNkMsS0FBSixDQUFBLDRDQUFBLE1BQUEsQ0FBc0QwTixDQUF0RCxDQUFBLENBQVR2USxDQUFBQTtBQUErRHVRLFdBVjNFRCxDQUFBQTtBQVUyRUMsU0FoRG5Gb0IsRUFBQUEsS0FBQUEsQ0FpRVczUixDQWpFWDJSO0FBaUVXM1I7QUFBQUEsS0FHb0M7QUFFL0N5USxJQUFBQSxVQUFBQSxFQUFZLEVBRm1DO0FBRy9DMEMsSUFBQUEsc0JBQUFBLEdBQWtDLDRCQUFBLENBeFMxQmhYLENBd1NSZ1gsQ0FIK0M7QUFJL0MvRCxJQUFBQSxVQUFBQSxFQUFZO0FBSm1DLEdBQW5EO0FBT0E5UixFQUFBQSxDQUFBQSxDQUFBQSxDQUFBQSxDQUFPNlIsRUFBUDdSLEdBQVkyVixFQUFaM1YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGZyb20gXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlRnVuY3Rpb24gZnJvbSBcIi4vaXNOYXRpdmVGdW5jdGlvbi5qc1wiO1xuaW1wb3J0IGNvbnN0cnVjdCBmcm9tIFwiLi9jb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtcblxuICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCBDbGFzcyk7XG4gIH07XG5cbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRW1wbG95ZWUgfSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1zZWxlY3Rvci13aWRnZXRcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5pbXBvcnQgeyBEaWdlc3RRdWVyeUZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvRGlnZXN0QXBpQ2xpZW50L1R5cGVzL0RpZ2VzdFF1ZXJ5RmlsdGVyXCI7XG5pbXBvcnQgeyBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1Nb2RlbEFjY2Vzc29yXCI7XG5pbXBvcnQgeyBNb2RhbE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kYWxNYW5hZ2VyL0lNb2RhbFN0YXRlXCI7XG5pbXBvcnQgeyBCaW5kaW5nUGF0aCB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weVN1YnRyZWUoXG4gICAgICAgIHNvdXJjZUJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIHRhcmdldEJpbmRpbmdQYXRoOiBCaW5kaW5nUGF0aCB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIGRvTm90Q29weVBhdGhzPzogc3RyaW5nW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/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+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
985
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJfc2V0UHJvdG90eXBlT2YiLCJvIiwicCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJSZWZlcmVuY2VFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsImFyZ3MiLCJDbGFzcyIsImEiLCJhcHBseSIsImJpbmQiLCJhcmd1bWVudHMiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiX2NhY2hlIiwiTWFwIiwiV3JhcHBlciIsImZuIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJlbXBsb3llZXMiLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY29uc29sZSIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJzb3VyY2VCaW5kaW5nUGF0aCIsInRhcmdldEJpbmRpbmdQYXRoIiwiZG9Ob3RDb3B5UGF0aHMiLCJpbnN0YW5jZXMiLCJlbmFibGVkIiwicGF0aFByZWZpeGVzIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQs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fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4uL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnREcmFmdEluZm9VcmwoZHJhZnRJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAvLyBOT1RFINCt0YLQsCDRhNGD0L3QutGG0LjRjyDQvtCx0YrRj9Cy0LvQtdC90LAg0L7RgtC00LXQu9GM0L3Qviwg0LjQsdC+INC+0L3QsCDQstGF0L7QtNC40YIg0LIg0YHQvtGB0YLQsNCyIGNsaWVudC5qcyDQuFxuICAgIC8vINC90LUg0LTQvtC70LbQvdC+INC/0YDQvtC40YHRhdC+0LTQuNGC0Ywg0YPRgtC10LbQtdC70LXQvdC40Y8gY2xpZW50LmpzLdCwXG4gICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0SWQubnN9L2RyYWZ0cy8ke2RyYWZ0SWQuZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gO1xufVxuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBpc1Rlc3RTZXJ2ZXI6IHBhcnNlQm9vbChcIntpc1Rlc3RTZXJ2ZXJ9XCIpLFxuICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntyZW5kZXJDYWNoaW5nRm9ySUU4fVwiKSxcbiAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IHBhcnNlQm9vbChcIntub3JtYWxpemF0aW9uT25TZXJ2ZXJ9XCIpLFxuICAgIG5vcm1hdGl2ZVVybDogXCJ7bm9ybWF0aXZlVXJsfVwiLFxuICAgIHJlc291cmNlc1ZlcnNpb246IFwie3Jlc291cmNlc1ZlcnNpb259XCIsXG4gICAga29udHVyRG9tYWluczogXCJ7a29udHVyRG9tYWluc31cIixcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGZyb20gXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlRnVuY3Rpb24gZnJvbSBcIi4vaXNOYXRpdmVGdW5jdGlvbi5qc1wiO1xuaW1wb3J0IGNvbnN0cnVjdCBmcm9tIFwiLi9jb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtcblxuICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCBDbGFzcyk7XG4gIH07XG5cbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59IiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgcHJvZ3JhbSBzdGF0ZVwiICsgKG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gXCI6IFwiICsgbWVzc2FnZSA6IFwiXCIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihhcmd1bWVudE5hbWU6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIG1lc3NhZ2UgIT0gdW5kZWZpbmVkID8gYCR7bWVzc2FnZX0gKGFyZ3VtZW50OiAke2FyZ3VtZW50TmFtZX0pYCA6IGBJbnZhbGlkIGFyZ3VtZW50IHZhbHVlOiAke2FyZ3VtZW50TmFtZX1gXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwaW5nRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCB0eXBpbmdcIik7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRW1wbG95ZWUgfSBmcm9tIFwiQHNrYmtvbnR1ci9zdGFmZi1zZWxlY3Rvci13aWRnZXRcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBfX0lOVEVSTkFMX19pbXBvcnRGcm9tRW1wbG95ZWVTZXJ2aWNlKCk6IFByb21pc2U8RW1wbG95ZWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKGVtcGxveWVlczogRW1wbG95ZWVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJmb3JtLm9mZk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXMocGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzT25Db250cm9sSWZFeGlzdChwYXRoOiBCaW5kaW5nUGF0aCk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBdXRvRmllbGRzVG9BdXRvVmFsdWUocGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtOiBJRm9ybSk6IElQdWJsaWNGb3JtIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIG5ldyBMZWdhY3lQdWJsaWNGb3JtKGZvcm0gYXMgSUxlZ2FjeUZvcm0pO1xufVxuIiwiLyogdHNsaW50OmRpc2FibGU6bm8tbnVsbC1rZXl3b3JkIG5vLWFueSBuby11bnNhZmUtYW55ICovXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gXCJ3aGF0d2ctZmV0Y2hcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBSZW5kZXJGb3JtU2V0dGluZ3Mge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlbmRlckZvcm06IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQ7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xufVxuXG50eXBlIFN0YXJ0Rm9ybUZ1bmMgPSAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncykgPT4gUHJvbWlzZTxJRm9ybT47XG5cbmludGVyZmFjZSBDYW5keUdsb2JhbEluamVjdGVkVmFyIHtcbiAgICBzdGFydDogKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLCBjYWxsYmFjaz86IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4pID0+IHZvaWQ7XG4gICAga2Vmb3Jtc1VybD86IHN0cmluZztcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBib29sZWFuO1xuICAgIGVudHJ5UG9pbnQ6IHsgW2tleTogc3RyaW5nXTogU3RhcnRGb3JtRnVuYyB9O1xuICAgIGxvYWRFcnJvcj86IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiB9ID0gc2V0dGluZ3M7XG5cbiAgICBpZiAoZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmVlZEVuZ2luZSA9IGVuZ2luZVZlcnNpb24gJiYgIWdsb2JhbFtlbmdpbmVWZXJzaW9uXTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0YXNrczogVGFza1tdID0gW107XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7IHY6IHJlc291cmNlc1ZlcnNpb24sIHJlc291cmNlWm9uZTogc2V0dGluZ3MucmVzb3VyY2Vab25lIH07XG4gICAgaWYgKG5lZWRMb2FkU3R5bGVzRm9yR2Z2KSB7XG4gICAgICAgIHRhc2tzLnB1c2goY2IgPT5cbiAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzLyR7Z2Z2fSR7bWlufS5jc3NgLCBwYXJhbXMpKSwgdHJ1ZSwgY2IpXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRhc2tzLnB1c2goY2IgPT4gTG9hZEludG9Eb2N1bWVudC5zY3JpcHQodXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtnZnZ9JHttaW59LmpzYCwgcGFyYW1zKSksIGNiKSk7XG5cbiAgICBpZiAoaXNOZWVkRW5naW5lKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc3R5bGVTaGVldChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmNzc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnNjcmlwdChcbiAgICAgICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7bWlufS5qc2AsIHBhcmFtcykpLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBydW5QYXJhbGxlbCh0YXNrcywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZW5kZXJGb3JtKFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIGV4dGVuZGVkU2V0dGluZ3M6IFJlbmRlckZvcm1TZXR0aW5ncyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPlxuKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUVudHJ5UG9pbnQgPVxuICAgICAgICBnbG9iYWwuQ0YuZW50cnlQb2ludFtleHRlbmRlZFNldHRpbmdzLmdmdl0gPz8gcmVqZWN0KGBGb3JtIGVudHJ5IHBvaW50ICR7ZXh0ZW5kZWRTZXR0aW5ncy5nZnZ9IG5vdCBmb3VuZC5gKTtcbiAgICBmb3JtRW50cnlQb2ludChwYWdlQ29udGVudCwgZXh0ZW5kZWRTZXR0aW5ncylcbiAgICAgICAgLnRoZW4oZm9ybSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNGb3JtID0gZm9ybS5wdWJsaWNGb3JtIHx8IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybSk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHB1YmxpY0Zvcm0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Rm9ybU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPEFVT09wdGlvbnM+IHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG4gICAgZXZlbnRFbWl0dGVyPzogTGF5b3V0RXZlbnRzU3RhdGljO1xuICAgIGVtcGxveWVySWQ/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWlzQWxsb3dlZChjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zKSkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcImRvbWFpbi51bnRydXN0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcInVzZXIudW5hdXRoZW50aWNhdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWRyYWZ0SWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLmRyYWZ0SWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIGlmICghbnMpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJvcHRpb25zLm5zIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVpvbmUgPSBvcHRpb25zLnJlc291cmNlWm9uZSA/PyBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJyZXNvdXJjZVpvbmVcIik7XG4gICAgY29uc3QgY2xpZW50RHJhZnRVcmwgPSBidWlsZFVybCh1cmwoZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKHsgbnM6IG5zLCBkcmFmdElkOiBkcmFmdElkIH0pKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdmdiA9IGNsaWVudERyYWZ0SW5mby5nZnY7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uID0gY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWQ6IGNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgY2F1bGRyb25BcGlVcmw6IGNsaWVudFNldHRpbmdzLmNhdWxkcm9uQXBpVXJsLFxuICAgICAgICAgICAgICAgIGlzVGVzdFNlcnZlcjogY2xpZW50U2V0dGluZ3MuaXNUZXN0U2VydmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckNhY2hpbmdGb3JJRTg6IGNsaWVudFNldHRpbmdzLnJlbmRlckNhY2hpbmdGb3JJRTgsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBjbGllbnRTZXR0aW5ncy5ub3JtYWxpemF0aW9uT25TZXJ2ZXIsXG4gICAgICAgICAgICAgICAgbm9ybWF0aXZlVXJsOiBjbGllbnRTZXR0aW5ncy5ub3JtYXRpdmVVcmwsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogY2xpZW50U2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICBrb250dXJEb21haW5zOiBjbGllbnRTZXR0aW5ncy5rb250dXJEb21haW5zLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgYWJvbklkOiBvcHRpb25zLmFib25JZCxcbiAgICAgICAgICAgICAgICBvcmdJZDogb3B0aW9ucy5vcmdJZCxcbiAgICAgICAgICAgICAgICB1c2VySWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBpc0luZGl2aWR1YWw6IGNsaWVudERyYWZ0SW5mby5pc0luZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgaXNGb3JlaWduOiBjbGllbnREcmFmdEluZm8uaXNGb3JlaWduLFxuICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tFbmFibGVkOiBvcHRpb25zLmZlZWRiYWNrRW5hYmxlZCA/PyBjbGllbnREcmFmdEluZm8uZmVlZGJhY2tFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNhbmR5VG91ckF2YWlsYWJsZTogY2xpZW50RHJhZnRJbmZvLmNhbmR5VG91ckF2YWlsYWJsZSxcbiAgICAgICAgICAgICAgICBldmVudEVtaXR0ZXI6IG9wdGlvbnMuZXZlbnRFbWl0dGVyLFxuICAgICAgICAgICAgICAgIGZvcm1JbmZvOiBjbGllbnREcmFmdEluZm8uZm9ybUluZm8sXG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvOiBjbGllbnREcmFmdEluZm8ucHJpbnRJbmZvLFxuICAgICAgICAgICAgICAgIHJlZ2lvbnM6IGNsaWVudERyYWZ0SW5mby5yZWdpb25zLFxuICAgICAgICAgICAgICAgIGhhc1RlbXBsYXRlczogY2xpZW50RHJhZnRJbmZvLmhhc1RlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgYXV0aGVudGljYXRpb246IG9wdGlvbnMuYXV0aGVudGljYXRpb24sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqKlxuICog0KHRgtGA0L7Qs9C+0YLQuNC/0LjQt9C40YDQvtCy0LDQvdC90LDRjyDQt9Cw0LzQtdC90LAg0LTQu9GPIEJvb2xlYW4oLi4uKVxuICog0J7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8gWy4uLl0uZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVVua25vd25FcnJvcihlcnJvcjogdW5rbm93bik6IHVuZGVmaW5lZCB8IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvcj8uW1wibWVzc2FnZVwiXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGFzc2VydHMgaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIGlmICghaXNOb3ROdWxsT3JVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgbXVzdCBiZSBkZWZpbmVkYCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nIHwgRXJyb3IpOiBuZXZlciB7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiIHx8IG1lc3NhZ2UgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG1lc3NhZ2U7XG4gICAgfVxufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUxlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBoYXZlIG1pbmltYWwgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZU5ldmVyKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQW5kR2V0U3RyaW5nKG5ldmVyQXJndW1lbnQ6IG5ldmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bmV2ZXJBcmd1bWVudH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuQXN5bmNBY3Rpb24oYWN0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIGFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0ID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb3ROdWxsT3JFbXB0eShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogaW5wdXQgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHkoaW5wdXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JXaGl0ZVNwYWNlKGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dC50cmltKCkgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltTGFzdFNsYXNoKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNsaWNlKC0xKSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXM8VD4odmFsdWU6IFQpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|