@kontur.candy/tools 2.160.0-linux-compat.1 → 2.160.0-linux-compat.3

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/distr/Common/AutoValidationUtils.js +9 -0
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +29 -14
  4. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +8 -20
  5. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +4 -9
  6. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +8 -27
  7. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +8 -10
  8. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +4 -8
  10. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +18 -14
  11. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  12. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  13. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  14. package/distr/Common/EndPoints.js +4 -2
  15. package/distr/Common/FSPrinterClient/FSPrinterClient.js +136 -0
  16. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
  17. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +44 -0
  18. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +53 -0
  19. package/distr/Common/ModelPath/BuildIterationSequence.js +20 -1
  20. package/distr/Common/ModelPath/Map/Map2.js +14 -1
  21. package/distr/Common/ModelPath/ModelPath.js +41 -69
  22. package/distr/Common/ModelPath/ModelPathHelper.js +23 -1
  23. package/distr/Common/ModelPath/Set/Set2.js +7 -2
  24. package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
  25. package/distr/Common/PicklistApiClient/PicklistApiClient.js +30 -0
  26. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +34 -0
  27. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
  28. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
  29. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
  30. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
  31. package/distr/Common/StringArrayKey.js +4 -2
  32. package/distr/Common/getRngSchemaFilename.js +10 -4
  33. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -2
  34. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  35. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  36. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +182 -171
  37. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  38. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +192 -192
  39. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  40. package/package.json +2 -2
  41. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -6
@@ -95,7 +95,7 @@
95
95
  var e = new Uint8Array(t.byteLength);
96
96
  return e.set(new Uint8Array(t)), e.buffer;
97
97
  }
98
- function g() {
98
+ function w() {
99
99
  return this.bodyUsed = !1, this._initBody = function (t) {
100
100
  var e;
101
101
  this.bodyUsed = this.bodyUsed, this._bodyInit = t, t ? "string" == typeof t ? this._bodyText = t : a && Blob.prototype.isPrototypeOf(t) ? this._bodyBlob = t : u && FormData.prototype.isPrototypeOf(t) ? this._bodyFormData = t : o && URLSearchParams.prototype.isPrototypeOf(t) ? this._bodyText = t.toString() : s && a && (e = t) && DataView.prototype.isPrototypeOf(e) ? (this._bodyArrayBuffer = b(t.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : s && (ArrayBuffer.prototype.isPrototypeOf(t) || l(t)) ? this._bodyArrayBuffer = b(t) : this._bodyText = t = Object.prototype.toString.call(t) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof t ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(t) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
@@ -157,7 +157,7 @@
157
157
  t.push([r, e]);
158
158
  }), d(t);
159
159
  }, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
160
- var w = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
160
+ var g = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
161
161
  function E(t, e) {
162
162
  if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
163
163
  var r,
@@ -167,7 +167,7 @@
167
167
  if (t.bodyUsed) throw new TypeError("Already read");
168
168
  this.url = t.url, this.credentials = t.credentials, e.headers || (this.headers = new p(t.headers)), this.method = t.method, this.mode = t.mode, this.signal = t.signal, o || null == t._bodyInit || (o = t._bodyInit, t.bodyUsed = !0);
169
169
  } else this.url = String(t);
170
- if (this.credentials = e.credentials || this.credentials || "same-origin", !e.headers && this.headers || (this.headers = new p(e.headers)), this.method = (n = (r = e.method || this.method || "GET").toUpperCase(), w.indexOf(n) > -1 ? n : r), this.mode = e.mode || this.mode || null, this.signal = e.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
170
+ if (this.credentials = e.credentials || this.credentials || "same-origin", !e.headers && this.headers || (this.headers = new p(e.headers)), this.method = (n = (r = e.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = e.mode || this.mode || null, this.signal = e.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
171
171
  if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== e.cache && "no-cache" !== e.cache)) {
172
172
  var i = /([?&])_=[^&]*/;
173
173
  i.test(this.url) ? this.url = this.url.replace(i, "$1_=" + new Date().getTime()) : this.url += (/\?/.test(this.url) ? "&" : "?") + "_=" + new Date().getTime();
@@ -192,7 +192,7 @@
192
192
  return new E(this, {
193
193
  body: this._bodyInit
194
194
  });
195
- }, g.call(E.prototype), g.call(k.prototype), k.prototype.clone = function () {
195
+ }, w.call(E.prototype), w.call(k.prototype), k.prototype.clone = function () {
196
196
  return new k(this._bodyInit, {
197
197
  status: this.status,
198
198
  statusText: this.statusText,
@@ -286,14 +286,14 @@
286
286
  function P(t, e) {
287
287
  if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function");
288
288
  }
289
- function T(t, e) {
289
+ function S(t, e) {
290
290
  for (var r = 0; r < e.length; r++) {
291
291
  var n = e[r];
292
292
  n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);
293
293
  }
294
294
  }
295
- function S(t, e, r) {
296
- return e && T(t.prototype, e), r && T(t, r), Object.defineProperty(t, "prototype", {
295
+ function T(t, e, r) {
296
+ return e && S(t.prototype, e), r && S(t, r), Object.defineProperty(t, "prototype", {
297
297
  writable: !1
298
298
  }), t;
299
299
  }
@@ -302,7 +302,7 @@
302
302
  function t() {
303
303
  P(this, t);
304
304
  }
305
- return S(t, null, [{
305
+ return T(t, null, [{
306
306
  key: "script",
307
307
  value: function (t, e) {
308
308
  var r = !1,
@@ -330,29 +330,26 @@
330
330
  }]), t;
331
331
  }();
332
332
  function B(t) {
333
- return "v1/ns/".concat(t.ns, "/drafts/").concat(t.draftId, "/client-draft-info");
334
- }
335
- function C(t) {
336
333
  return "string" == typeof t ? "false" !== t && "true" === t : Boolean(t);
337
334
  }
338
- var I = {
339
- authorized: C("{authorized}"),
335
+ var C = {
336
+ authorized: B("{authorized}"),
340
337
  cauldronApiUrl: "{cauldronApiUrl}",
341
- isTestServer: C("{isTestServer}"),
342
- renderCachingForIE8: C("{renderCachingForIE8}"),
343
- normalizationOnServer: C("{normalizationOnServer}"),
338
+ isTestServer: B("{isTestServer}"),
339
+ renderCachingForIE8: B("{renderCachingForIE8}"),
340
+ normalizationOnServer: B("{normalizationOnServer}"),
344
341
  normativeUrl: "{normativeUrl}",
345
342
  resourcesVersion: "{resourcesVersion}",
346
343
  konturDomains: "{konturDomains}"
347
344
  };
348
- function L(t) {
349
- return L = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
345
+ function I(t) {
346
+ return I = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
350
347
  return typeof t;
351
348
  } : function (t) {
352
349
  return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t;
353
- }, L(t);
350
+ }, I(t);
354
351
  }
355
- function F(t, e, r, n, o, i, a) {
352
+ function L(t, e, r, n, o, i, a) {
356
353
  try {
357
354
  var u = t[i](a),
358
355
  s = u.value;
@@ -361,17 +358,17 @@
361
358
  }
362
359
  u.done ? e(s) : Promise.resolve(s).then(n, o);
363
360
  }
364
- function U(t) {
361
+ function F(t) {
365
362
  return function () {
366
363
  var e = this,
367
364
  r = arguments;
368
365
  return new Promise(function (n, o) {
369
366
  var i = t.apply(e, r);
370
367
  function a(t) {
371
- F(i, n, o, a, u, "next", t);
368
+ L(i, n, o, a, u, "next", t);
372
369
  }
373
370
  function u(t) {
374
- F(i, n, o, a, u, "throw", t);
371
+ L(i, n, o, a, u, "throw", t);
375
372
  }
376
373
  a(void 0);
377
374
  });
@@ -394,40 +391,31 @@
394
391
  writable: !1
395
392
  }), e && D(t, e);
396
393
  }
397
- function M(t, e) {
398
- if (e && ("object" === L(e) || "function" == typeof e)) return e;
399
- if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
400
- return function (t) {
401
- if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
402
- return t;
403
- }(t);
404
- }
405
- function N(t) {
406
- return N = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
394
+ function U(t) {
395
+ return U = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
407
396
  return t.__proto__ || Object.getPrototypeOf(t);
408
- }, N(t);
397
+ }, U(t);
409
398
  }
410
- function V() {
411
- if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
412
- if (Reflect.construct.sham) return !1;
413
- if ("function" == typeof Proxy) return !0;
414
- try {
415
- return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
416
- } catch (t) {
417
- return !1;
418
- }
419
- }
420
- function G(t, e, r) {
421
- return G = V() ? Reflect.construct : function (t, e, r) {
399
+ function M(t, e, r) {
400
+ return M = function () {
401
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
402
+ if (Reflect.construct.sham) return !1;
403
+ if ("function" == typeof Proxy) return !0;
404
+ try {
405
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
406
+ } catch (t) {
407
+ return !1;
408
+ }
409
+ }() ? Reflect.construct : function (t, e, r) {
422
410
  var n = [null];
423
411
  n.push.apply(n, e);
424
412
  var o = new (Function.bind.apply(t, n))();
425
413
  return r && D(o, r.prototype), o;
426
- }, G.apply(null, arguments);
414
+ }, M.apply(null, arguments);
427
415
  }
428
- function z(t) {
416
+ function N(t) {
429
417
  var e = "function" == typeof Map ? new Map() : void 0;
430
- return z = function (t) {
418
+ return N = function (t) {
431
419
  if (null === t || (r = t, -1 === Function.toString.call(r).indexOf("[native code]"))) return t;
432
420
  var r;
433
421
  if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
@@ -436,7 +424,7 @@
436
424
  e.set(t, n);
437
425
  }
438
426
  function n() {
439
- return G(t, arguments, N(this).constructor);
427
+ return M(t, arguments, U(this).constructor);
440
428
  }
441
429
  return n.prototype = Object.create(t.prototype, {
442
430
  constructor: {
@@ -446,9 +434,9 @@
446
434
  configurable: !0
447
435
  }
448
436
  }), D(n, t);
449
- }, z(t);
437
+ }, N(t);
450
438
  }
451
- function q(t) {
439
+ function V(t) {
452
440
  var e = function () {
453
441
  if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
454
442
  if (Reflect.construct.sham) return !1;
@@ -461,32 +449,39 @@
461
449
  }();
462
450
  return function () {
463
451
  var r,
464
- n = N(t);
452
+ n = U(t);
465
453
  if (e) {
466
- var o = N(this).constructor;
454
+ var o = U(this).constructor;
467
455
  r = Reflect.construct(n, arguments, o);
468
456
  } else r = n.apply(this, arguments);
469
- return M(this, r);
457
+ return function (t, e) {
458
+ if (e && ("object" === I(e) || "function" == typeof e)) return e;
459
+ if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
460
+ return function (t) {
461
+ if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
462
+ return t;
463
+ }(t);
464
+ }(this, r);
470
465
  };
471
466
  }
472
- var H = function (t) {
467
+ var G = function (t) {
473
468
  R(r, t);
474
- var e = q(r);
469
+ var e = V(r);
475
470
  function r() {
476
471
  return P(this, r), e.call(this, "Operation not implemented");
477
472
  }
478
- return S(r);
473
+ return T(r);
479
474
  }(function (t) {
480
475
  R(r, t);
481
- var e = q(r);
476
+ var e = V(r);
482
477
  function r(t) {
483
478
  var n;
484
479
  return P(this, r), (n = e.call(this, t)).name = n.constructor.name, n;
485
480
  }
486
- return S(r);
487
- }(z(Error)));
488
- function Z() {
489
- Z = function () {
481
+ return T(r);
482
+ }(N(Error)));
483
+ function z() {
484
+ z = function () {
490
485
  return t;
491
486
  };
492
487
  var t = {},
@@ -548,20 +543,20 @@
548
543
  m = v && v(v(_([])));
549
544
  m && m !== e && r.call(m, i) && (y = m);
550
545
  var b = p.prototype = h.prototype = Object.create(y);
551
- function g(t) {
546
+ function w(t) {
552
547
  ["next", "throw", "return"].forEach(function (e) {
553
548
  s(t, e, function (t) {
554
549
  return this._invoke(e, t);
555
550
  });
556
551
  });
557
552
  }
558
- function w(t, e) {
553
+ function g(t, e) {
559
554
  function o(n, i, a, u) {
560
555
  var s = l(t[n], t, i);
561
556
  if ("throw" !== s.type) {
562
557
  var c = s.arg,
563
558
  f = c.value;
564
- return f && "object" == L(f) && r.call(f, "__await") ? e.resolve(f.__await).then(function (t) {
559
+ return f && "object" == I(f) && r.call(f, "__await") ? e.resolve(f.__await).then(function (t) {
565
560
  o("next", t, a, u);
566
561
  }, function (t) {
567
562
  o("throw", t, a, u);
@@ -685,15 +680,15 @@
685
680
  return {
686
681
  __await: t
687
682
  };
688
- }, g(w.prototype), s(w.prototype, a, function () {
683
+ }, w(g.prototype), s(g.prototype, a, function () {
689
684
  return this;
690
- }), t.AsyncIterator = w, t.async = function (e, r, n, o, i) {
685
+ }), t.AsyncIterator = g, t.async = function (e, r, n, o, i) {
691
686
  void 0 === i && (i = Promise);
692
- var a = new w(c(e, r, n, o), i);
687
+ var a = new g(c(e, r, n, o), i);
693
688
  return t.isGeneratorFunction(r) ? a : a.next().then(function (t) {
694
689
  return t.done ? t.value : a.next();
695
690
  });
696
- }, g(b), s(b, u, "Generator"), s(b, i, function () {
691
+ }, w(b), s(b, u, "Generator"), s(b, i, function () {
697
692
  return this;
698
693
  }), s(b, "toString", function () {
699
694
  return "[object Generator]";
@@ -789,7 +784,7 @@
789
784
  }
790
785
  }, t;
791
786
  }
792
- function $(t, e) {
787
+ function q(t, e) {
793
788
  var r = Object.keys(t);
794
789
  if (Object.getOwnPropertySymbols) {
795
790
  var n = Object.getOwnPropertySymbols(t);
@@ -799,25 +794,25 @@
799
794
  }
800
795
  return r;
801
796
  }
802
- function X(t) {
797
+ function H(t) {
803
798
  for (var r = 1; r < arguments.length; r++) {
804
799
  var n = null != arguments[r] ? arguments[r] : {};
805
- r % 2 ? $(Object(n), !0).forEach(function (r) {
800
+ r % 2 ? q(Object(n), !0).forEach(function (r) {
806
801
  e(t, r, n[r]);
807
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : $(Object(n)).forEach(function (e) {
802
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : q(Object(n)).forEach(function (e) {
808
803
  Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
809
804
  });
810
805
  }
811
806
  return t;
812
807
  }
813
- function Y(t, e) {
808
+ function Z(t, e) {
814
809
  if (null != e) {
815
810
  if (null == t) throw new Error("Path must be defined");
816
811
  return ["model", "change", t, e];
817
812
  }
818
813
  return null != t ? ["model", "change", t] : ["model", "change"];
819
814
  }
820
- function J(t) {
815
+ function $(t) {
821
816
  return Object.keys(t).filter(function (e) {
822
817
  return t[e] && Object.prototype.hasOwnProperty.call(t[e], "value");
823
818
  }).map(function (r) {
@@ -825,17 +820,17 @@
825
820
  return null == n ? {} : e({}, r, n.value);
826
821
  });
827
822
  }
828
- function W(t) {
823
+ function X(t) {
829
824
  return t.reduce(function (t, e) {
830
- return X(X({}, t), e);
825
+ return H(H({}, t), e);
831
826
  }, {});
832
827
  }
833
- var K = function () {
828
+ var Y = function () {
834
829
  function t(e) {
835
830
  P(this, t), this.form = void 0, this.form = e;
836
831
  }
837
- var r, n;
838
- return S(t, [{
832
+ var r, n, o;
833
+ return T(t, [{
839
834
  key: "batchUpdate",
840
835
  value: function (t) {
841
836
  throw new Error("Method not implemented.");
@@ -852,8 +847,8 @@
852
847
  }
853
848
  }, {
854
849
  key: "validateChildrenByPath",
855
- value: (n = U(Z().mark(function t(e) {
856
- return Z().wrap(function (t) {
850
+ value: (o = F(z().mark(function t(e) {
851
+ return z().wrap(function (t) {
857
852
  for (;;) switch (t.prev = t.next) {
858
853
  case 0:
859
854
  throw new Error("Method not implemented.");
@@ -863,13 +858,28 @@
863
858
  }
864
859
  }, t);
865
860
  })), function (t) {
866
- return n.apply(this, arguments);
861
+ return o.apply(this, arguments);
867
862
  })
868
863
  }, {
869
864
  key: "__INTERNAL__importFromEmployeeService",
870
865
  value: function () {
871
866
  throw new Error("Method not implemented.");
872
867
  }
868
+ }, {
869
+ key: "__INTERNAL__getSelectFunctionForDisableEmployeeInSS",
870
+ value: (n = F(z().mark(function t(e) {
871
+ return z().wrap(function (t) {
872
+ for (;;) switch (t.prev = t.next) {
873
+ case 0:
874
+ throw new Error("Method not implemented.");
875
+ case 1:
876
+ case "end":
877
+ return t.stop();
878
+ }
879
+ }, t);
880
+ })), function (t) {
881
+ return n.apply(this, arguments);
882
+ })
873
883
  }, {
874
884
  key: "importEmployees",
875
885
  value: function (t, e) {
@@ -933,8 +943,8 @@
933
943
  }
934
944
  }, {
935
945
  key: "reloadInner",
936
- value: (r = U(Z().mark(function t() {
937
- return Z().wrap(function (t) {
946
+ value: (r = F(z().mark(function t() {
947
+ return z().wrap(function (t) {
938
948
  for (;;) switch (t.prev = t.next) {
939
949
  case 0:
940
950
  throw new Error("not implemented");
@@ -960,22 +970,22 @@
960
970
  }, {
961
971
  key: "onErrorsCountChanged",
962
972
  value: function (t) {
963
- this.form.eventManager.on(Y(this.form.settings.formRoot, "errorsCount"), t);
973
+ this.form.eventManager.on(Z(this.form.settings.formRoot, "errorsCount"), t);
964
974
  }
965
975
  }, {
966
976
  key: "offErrorsCountChanged",
967
977
  value: function (t) {
968
- this.form.eventManager.off(Y(this.form.settings.formRoot, "errorsCount"), t);
978
+ this.form.eventManager.off(Z(this.form.settings.formRoot, "errorsCount"), t);
969
979
  }
970
980
  }, {
971
981
  key: "set",
972
982
  value: function (t, r) {
973
- if (null === t || "string" == typeof t || "object" !== L(t) || Array.isArray(t)) {
983
+ if (null === t || "string" == typeof t || "object" !== I(t) || Array.isArray(t)) {
974
984
  if ("string" != typeof t) throw new Error("form.set() parameter should be string path or object with path-value pairs");
975
985
  this.form.model.set(t, "value", r);
976
986
  } else {
977
987
  var n = Object.keys(t).reduce(function (r, n) {
978
- return X(e({}, n, {
988
+ return H(e({}, n, {
979
989
  value: t[n]
980
990
  }), r);
981
991
  }, {});
@@ -986,13 +996,13 @@
986
996
  key: "get",
987
997
  value: function (t) {
988
998
  var e = this;
989
- if (Array.isArray(t)) return W(t.map(function (t) {
990
- return J(e.form.model.getChunk(t));
999
+ if (Array.isArray(t)) return X(t.map(function (t) {
1000
+ return $(e.form.model.getChunk(t));
991
1001
  }).reduce(function (t, e) {
992
1002
  return t.concat(e);
993
1003
  }, []));
994
- if ("string" == typeof t) return W(J(this.form.model.getChunk(t)));
995
- if (void 0 === t) return W(J(this.form.model.getChunk(this.form.settings.formRoot)));
1004
+ if ("string" == typeof t) return X($(this.form.model.getChunk(t)));
1005
+ if (void 0 === t) return X($(this.form.model.getChunk(this.form.settings.formRoot)));
996
1006
  throw new Error("form.get() parameter should be string path or array of paths");
997
1007
  }
998
1008
  }, {
@@ -1003,67 +1013,62 @@
1003
1013
  }, {
1004
1014
  key: "copySubtree",
1005
1015
  value: function (t, e, r) {
1006
- throw new H();
1016
+ throw new G();
1007
1017
  }
1008
1018
  }, {
1009
1019
  key: "addInstance",
1010
1020
  value: function (t) {
1011
- throw new H();
1021
+ throw new G();
1012
1022
  }
1013
1023
  }, {
1014
1024
  key: "getChildren",
1015
1025
  value: function (t) {
1016
- throw new H();
1026
+ throw new G();
1017
1027
  }
1018
1028
  }, {
1019
1029
  key: "uuidGenerate",
1020
1030
  value: function () {
1021
- throw new H();
1031
+ throw new G();
1022
1032
  }
1023
1033
  }, {
1024
1034
  key: "showModal",
1025
1035
  value: function (t) {
1026
- throw new H();
1036
+ throw new G();
1027
1037
  }
1028
1038
  }, {
1029
1039
  key: "addSection",
1030
1040
  value: function (t) {
1031
- throw new H();
1041
+ throw new G();
1032
1042
  }
1033
1043
  }, {
1034
1044
  key: "callInitSection",
1035
1045
  value: function (t) {
1036
- throw new H();
1046
+ throw new G();
1037
1047
  }
1038
1048
  }, {
1039
1049
  key: "createFiasApiClient",
1040
1050
  value: function (t) {
1041
- throw new H();
1051
+ throw new G();
1042
1052
  }
1043
1053
  }, {
1044
1054
  key: "openEmployeeEditor",
1045
1055
  value: function (t) {
1046
- throw new H();
1056
+ throw new G();
1047
1057
  }
1048
1058
  }, {
1049
1059
  key: "removeInstance",
1050
1060
  value: function (t, e) {
1051
- throw new H();
1061
+ throw new G();
1052
1062
  }
1053
1063
  }, {
1054
1064
  key: "removeInstances",
1055
1065
  value: function (t, e) {
1056
- throw new H();
1066
+ throw new G();
1057
1067
  }
1058
1068
  }, {
1059
1069
  key: "focusOnControlIfExist",
1060
1070
  value: function (t) {
1061
- throw new H();
1062
- }
1063
- }, {
1064
- key: "setAllCheckboxesFor113103",
1065
- value: function (t) {
1066
- return Promise.resolve(void 0);
1071
+ throw new G();
1067
1072
  }
1068
1073
  }, {
1069
1074
  key: "setAutoFieldsToAutoValue",
@@ -1078,16 +1083,16 @@
1078
1083
  }, {
1079
1084
  key: "customNormalize",
1080
1085
  value: function (t, e) {
1081
- throw new H();
1086
+ throw new G();
1082
1087
  }
1083
1088
  }, {
1084
1089
  key: "removeInstancesByRules",
1085
1090
  value: function (t) {
1086
- throw new H();
1091
+ throw new G();
1087
1092
  }
1088
1093
  }]), t;
1089
1094
  }();
1090
- function Q(t, e) {
1095
+ function J(t, e) {
1091
1096
  var r = Object.keys(t);
1092
1097
  if (Object.getOwnPropertySymbols) {
1093
1098
  var n = Object.getOwnPropertySymbols(t);
@@ -1097,24 +1102,24 @@
1097
1102
  }
1098
1103
  return r;
1099
1104
  }
1100
- function tt(t) {
1105
+ function W(t) {
1101
1106
  for (var r = 1; r < arguments.length; r++) {
1102
1107
  var n = null != arguments[r] ? arguments[r] : {};
1103
- r % 2 ? Q(Object(n), !0).forEach(function (r) {
1108
+ r % 2 ? J(Object(n), !0).forEach(function (r) {
1104
1109
  e(t, r, n[r]);
1105
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : Q(Object(n)).forEach(function (e) {
1110
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(n)) : J(Object(n)).forEach(function (e) {
1106
1111
  Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(n, e));
1107
1112
  });
1108
1113
  }
1109
1114
  return t;
1110
1115
  }
1111
- function et() {}
1112
- function rt() {
1116
+ function K() {}
1117
+ function Q() {
1113
1118
  var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
1114
1119
  r = t.g.CF.keformsUrl || "";
1115
1120
  return "".concat(r, "/").concat(e).replace(/([^:])\/{2,}/g, "$1/");
1116
1121
  }
1117
- function nt(t, e) {
1122
+ function tt(t, e) {
1118
1123
  if (void 0 === e) return t;
1119
1124
  for (var r = [], n = 0, o = Object.keys(e); n < o.length; n++) {
1120
1125
  var i = o[n],
@@ -1123,10 +1128,7 @@
1123
1128
  }
1124
1129
  return 0 === r.length ? t : t + "?" + r.join("&");
1125
1130
  }
1126
- function ot(e) {
1127
- return new RegExp("^(?:".concat(e.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(t.g.location.host);
1128
- }
1129
- function it(e) {
1131
+ function et(e) {
1130
1132
  return (t.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (t) {
1131
1133
  return t.replace(/\+/g, " ").split("=").map(decodeURIComponent);
1132
1134
  }).find(function (t) {
@@ -1165,64 +1167,19 @@
1165
1167
  var n, o;
1166
1168
  }) || [])[1];
1167
1169
  }
1168
- function at(e, r) {
1169
- var n = e.gfv,
1170
- o = e.engineVersion,
1171
- i = e.resourcesVersion;
1172
- if (t.g.CF.entryPoint[n]) r();else {
1173
- var a = o && !t.g[o],
1174
- u = "true" === it("debug") ? "" : ".min",
1175
- s = [],
1176
- c = {
1177
- v: i,
1178
- resourceZone: e.resourceZone
1179
- };
1180
- s.push(function (t) {
1181
- return x.styleSheet(rt(nt("static/public/styles/".concat(n).concat(u, ".css"), c)), !0, t);
1182
- }), s.push(function (t) {
1183
- return x.script(rt(nt("static/public/scripts/".concat(n).concat(u, ".js"), c)), t);
1184
- }), a && s.push(function (t) {
1185
- return x.styleSheet(rt(nt("static/public/styles/candy_".concat(o).concat(u, ".css"), c)), !1, t);
1186
- }, function (t) {
1187
- return x.script(rt(nt("static/public/scripts/candy_".concat(o).concat(u, ".js"), c)), t);
1188
- }), function (t, e) {
1189
- var r = 0;
1190
- t.forEach(function (n) {
1191
- n(function (n) {
1192
- if (r !== t.length) {
1193
- if (n) return r = t.length, void e(n);
1194
- (r += 1) === t.length && e();
1195
- }
1196
- });
1197
- });
1198
- }(s, r);
1199
- }
1200
- }
1201
- function ut(e, r, n) {
1202
- var o;
1203
- (null !== (o = t.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (t) {
1204
- throw "string" == typeof t || null == t ? new Error(null != t ? t : "Undefined is not allowed") : t;
1205
- }("Form entry point ".concat(r.gfv, " not found.")))(e, r).then(function (t) {
1206
- var e = t.publicForm || function (t) {
1207
- return new K(t);
1208
- }(t);
1209
- n(null, e);
1210
- }).catch(n);
1211
- }
1212
- function st(e) {
1213
- if (null != e) return t.g[e] && t.g[e].default;
1214
- }
1215
- var ct = {
1170
+ var rt = {
1216
1171
  start: function (e, r) {
1217
1172
  var n,
1218
1173
  o,
1219
- i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : et,
1174
+ i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : K,
1220
1175
  a = null,
1221
1176
  u = r.ns,
1222
1177
  s = r.draftId;
1223
- if (ot(I.konturDomains) ? I.authorized ? s ? u || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
1224
- var c = null !== (n = r.resourceZone) && void 0 !== n ? n : it("resourceZone"),
1225
- l = nt(rt(B({
1178
+ if (new RegExp("^(?:".concat(C.konturDomains.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-._]+"), ")$")).test(t.g.location.host) ? C.authorized ? s ? u || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
1179
+ var c = null !== (n = r.resourceZone) && void 0 !== n ? n : et("resourceZone"),
1180
+ l = tt(Q(function (t) {
1181
+ return "v1/ns/".concat(t.ns, "/drafts/").concat(t.draftId, "/client-draft-info");
1182
+ }({
1226
1183
  ns: u,
1227
1184
  draftId: s
1228
1185
  })), {
@@ -1235,8 +1192,7 @@
1235
1192
  var h;
1236
1193
  f.credentials = "omit", f.headers = null !== (h = f.headers) && void 0 !== h ? h : {}, f.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
1237
1194
  } else f.credentials = "omit";
1238
- var d = null !== (o = r.fetch) && void 0 !== o ? o : _;
1239
- d(l, f).then(function (t) {
1195
+ (null !== (o = r.fetch) && void 0 !== o ? o : _)(l, f).then(function (t) {
1240
1196
  return t.json();
1241
1197
  }).then(function (n) {
1242
1198
  var o,
@@ -1245,15 +1201,15 @@
1245
1201
  s,
1246
1202
  l = n.gfv,
1247
1203
  f = n.engineVersion,
1248
- h = tt(tt(tt({
1249
- authorized: I.authorized,
1250
- cauldronApiUrl: I.cauldronApiUrl,
1251
- isTestServer: I.isTestServer,
1252
- renderCachingForIE8: I.renderCachingForIE8,
1253
- normalizationOnServer: I.normalizationOnServer,
1254
- normativeUrl: I.normativeUrl,
1255
- resourcesVersion: I.resourcesVersion,
1256
- konturDomains: I.konturDomains
1204
+ h = W(W(W({
1205
+ authorized: C.authorized,
1206
+ cauldronApiUrl: C.cauldronApiUrl,
1207
+ isTestServer: C.isTestServer,
1208
+ renderCachingForIE8: C.renderCachingForIE8,
1209
+ normalizationOnServer: C.normalizationOnServer,
1210
+ normativeUrl: C.normativeUrl,
1211
+ resourcesVersion: C.resourcesVersion,
1212
+ konturDomains: C.konturDomains
1257
1213
  }, r), n), {}, {
1258
1214
  gfv: l,
1259
1215
  engineVersion: f,
@@ -1263,7 +1219,39 @@
1263
1219
  isDisabledCloseAndSaveButton: null !== (s = r.isDisabledCloseAndSaveButton) && void 0 !== s && s,
1264
1220
  resourceZone: c
1265
1221
  });
1266
- at({
1222
+ !function (e, r) {
1223
+ var n = e.gfv,
1224
+ o = e.engineVersion,
1225
+ i = e.resourcesVersion;
1226
+ if (t.g.CF.entryPoint[n]) r();else {
1227
+ var a = o && !t.g[o],
1228
+ u = "true" === et("debug") ? "" : ".min",
1229
+ s = [],
1230
+ c = {
1231
+ v: i,
1232
+ resourceZone: e.resourceZone
1233
+ };
1234
+ s.push(function (t) {
1235
+ return x.styleSheet(Q(tt("static/public/styles/".concat(n).concat(u, ".css"), c)), !0, t);
1236
+ }), s.push(function (t) {
1237
+ return x.script(Q(tt("static/public/scripts/".concat(n).concat(u, ".js"), c)), t);
1238
+ }), a && s.push(function (t) {
1239
+ return x.styleSheet(Q(tt("static/public/styles/candy_".concat(o).concat(u, ".css"), c)), !1, t);
1240
+ }, function (t) {
1241
+ return x.script(Q(tt("static/public/scripts/candy_".concat(o).concat(u, ".js"), c)), t);
1242
+ }), function (t, e) {
1243
+ var r = 0;
1244
+ t.forEach(function (n) {
1245
+ n(function (n) {
1246
+ if (r !== t.length) {
1247
+ if (n) return r = t.length, void e(n);
1248
+ (r += 1) === t.length && e();
1249
+ }
1250
+ });
1251
+ });
1252
+ }(s, r);
1253
+ }
1254
+ }({
1267
1255
  gfv: h.gfv,
1268
1256
  engineVersion: h.engineVersion,
1269
1257
  resourceZone: h.resourceZone,
@@ -1271,8 +1259,20 @@
1271
1259
  theme: h.theme
1272
1260
  }, function (n) {
1273
1261
  if (!n && t.g.CF.entryPoint[l]) {
1274
- var o = st(f);
1275
- ut(e, tt(tt({}, h), {}, {
1262
+ var o = function (e) {
1263
+ if (null != e) return t.g[e] && t.g[e].default;
1264
+ }(f);
1265
+ !function (e, r, n) {
1266
+ var o;
1267
+ (null !== (o = t.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (t) {
1268
+ throw "string" == typeof t || null == t ? new Error(null != t ? t : "Undefined is not allowed") : t;
1269
+ }("Form entry point ".concat(r.gfv, " not found.")))(e, r).then(function (t) {
1270
+ var e = t.publicForm || function (t) {
1271
+ return new Y(t);
1272
+ }(t);
1273
+ n(null, e);
1274
+ }).catch(n);
1275
+ }(e, W(W({}, h), {}, {
1276
1276
  templatesApi: r.templatesApi,
1277
1277
  renderForm: o
1278
1278
  }), i);
@@ -1285,6 +1285,6 @@
1285
1285
  partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
1286
1286
  keformsUrl: "{keformsUrl}"
1287
1287
  };
1288
- t.g.CF = ct;
1288
+ t.g.CF = rt;
1289
1289
  }();
1290
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsImlzUHJvdG90eXBlT2YiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJEYXRhVmlldyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJoZWFkZXJzIiwiZ2V0IiwidHlwZSIsImJsb2IiLCJyZXNvbHZlIiwiRXJyb3IiLCJhcnJheUJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJ0aGVuIiwidGV4dCIsInJlYWRBc1RleHQiLCJmcm9tQ2hhckNvZGUiLCJqb2luIiwiZm9ybURhdGEiLCJPIiwianNvbiIsIkpTT04iLCJwYXJzZSIsImRlbGV0ZSIsImhhcyIsImhhc093blByb3BlcnR5Iiwia2V5cyIsInB1c2giLCJ2YWx1ZXMiLCJlbnRyaWVzIiwidyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJQIiwiVCIsImtleSIsIlMiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsImNvbmNhdCIsIm5zIiwiZHJhZnRJZCIsIkMiLCJCb29sZWFuIiwiSSIsImF1dGhvcml6ZWQiLCJjYXVsZHJvbkFwaVVybCIsImlzVGVzdFNlcnZlciIsInJlbmRlckNhY2hpbmdGb3JJRTgiLCJub3JtYWxpemF0aW9uT25TZXJ2ZXIiLCJub3JtYXRpdmVVcmwiLCJyZXNvdXJjZXNWZXJzaW9uIiwia29udHVyRG9tYWlucyIsIkwiLCJGIiwiVSIsImFyZ3VtZW50cyIsImFwcGx5IiwiRCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiUiIsIk0iLCJSZWZlcmVuY2VFcnJvciIsIk4iLCJnZXRQcm90b3R5cGVPZiIsIlYiLCJSZWZsZWN0IiwiY29uc3RydWN0Iiwic2hhbSIsIlByb3h5IiwidmFsdWVPZiIsIkciLCJiaW5kIiwieiIsIk1hcCIsIl93cmFwTmF0aXZlU3VwZXIiLCJxIiwiSCIsIloiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCIkIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiWCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWSIsIkoiLCJXIiwicmVkdWNlIiwiSyIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsIlEiLCJ0dCIsImV0IiwicnQiLCJDRiIsImtlZm9ybXNVcmwiLCJudCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm90IiwiUmVnRXhwIiwiaG9zdCIsIml0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJhdCIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJlbnRyeVBvaW50IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsInNjcmlwdCIsInV0IiwicHVibGljRm9ybSIsInN0IiwiZGVmYXVsdCIsImN0Iiwic3RhcnQiLCJhdXRoZW50aWNhdGlvbiIsImF1dGhTaWQiLCJBdXRob3JpemF0aW9uIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsInRlbXBsYXRlc0FwaSIsInJlbmRlckZvcm0iLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4Il0sInNvdXJjZXMiOlsid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0dldENsaWVudERyYWZ0SW5mb1VybC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9DbGllbnRTZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS93cmFwTmF0aXZlU3VwZXIuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL1R5cGluZ1V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcblxuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIyW2ldID0gYXJyW2ldO1xuICB9XG5cbiAgcmV0dXJuIGFycjI7XG59IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJ2YXIgZ2xvYmFsID1cbiAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYpIHx8XG4gICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbnZhciBzdXBwb3J0ID0ge1xuICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgaXRlcmFibGU6ICdTeW1ib2wnIGluIGdsb2JhbCAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgYmxvYjpcbiAgICAnRmlsZVJlYWRlcicgaW4gZ2xvYmFsICYmXG4gICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgIChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBCbG9iKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSkoKSxcbiAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICBhcnJheUJ1ZmZlcjogJ0FycmF5QnVmZmVyJyBpbiBnbG9iYWxcbn1cblxuZnVuY3Rpb24gaXNEYXRhVmlldyhvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiBEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihvYmopXG59XG5cbmlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICBdXG5cbiAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICBBcnJheUJ1ZmZlci5pc1ZpZXcgfHxcbiAgICBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTmFtZShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBuYW1lID0gU3RyaW5nKG5hbWUpXG4gIH1cbiAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZTogXCInICsgbmFtZSArICdcIicpXG4gIH1cbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICB9XG4gIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgdmFyIGl0ZXJhdG9yID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gaXRlbXMuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBpdGVyYXRvcltTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlcmF0b3Jcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhlYWRlcnMoaGVhZGVycykge1xuICB0aGlzLm1hcCA9IHt9XG5cbiAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICB0aGlzLmFwcGVuZChoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9LCB0aGlzKVxuICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgfSwgdGhpcylcbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxuICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHJldHVybiB0aGlzLmhhcyhuYW1lKSA/IHRoaXMubWFwW25hbWVdIDogbnVsbFxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShub3JtYWxpemVOYW1lKG5hbWUpKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLm1hcCkge1xuICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICB9XG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKG5hbWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICBpdGVtcy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gIH0pXG4gIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcbn1cblxuZnVuY3Rpb24gY29uc3VtZWQoYm9keSkge1xuICBpZiAoYm9keS5ib2R5VXNlZCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgfVxuICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpXG4gICAgfVxuICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZWplY3QocmVhZGVyLmVycm9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gIHZhciBjaGFycyA9IG5ldyBBcnJheSh2aWV3Lmxlbmd0aClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgfVxuICByZXR1cm4gY2hhcnMuam9pbignJylcbn1cblxuZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmKSB7XG4gIGlmIChidWYuc2xpY2UpIHtcbiAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gIH0gZWxzZSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aClcbiAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICB9XG59XG5cbmZ1bmN0aW9uIEJvZHkoKSB7XG4gIHRoaXMuYm9keVVzZWQgPSBmYWxzZVxuXG4gIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgIC8qXG4gICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICBwcm92aWRlIHVzZWZ1bCB0ZXN0IGhhcm5lc3MgZmVhdHVyZXMgc3VjaCBhcyBmbHVzaC4gSG93ZXZlciwgb25cbiAgICAgIEVTNSBicm93c2VycyB3aXRob3V0IGZldGNoIG9yIFByb3h5IHN1cHBvcnQgcG9sbHlmaWxscyBtdXN0IGJlIHVzZWQ7XG4gICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgb24gdGhlIG9iamVjdCBiZWZvcmUgdGhlIFByb3h5IGlzIGNyZWF0ZWQuIFRoaXMgY2hhbmdlIGVuc3VyZXNcbiAgICAgIFJlc3BvbnNlLmJvZHlVc2VkIGV4aXN0cyBvbiB0aGUgaW5zdGFuY2UsIHdoaWxlIG1haW50YWluaW5nIHRoZVxuICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgIF9pbml0Qm9keSBpcyBjYWxsZWQuXG4gICAgKi9cbiAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgIHRoaXMuX2JvZHlJbml0ID0gYm9keVxuICAgIGlmICghYm9keSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QmxvYiA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgLy8gSUUgMTAtMTEgY2FuJ3QgaGFuZGxlIGEgRGF0YVZpZXcgYm9keS5cbiAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlCbG9iICYmIHRoaXMuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSlcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICB2YXIgaXNDb25zdW1lZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgcmV0dXJuIGlzQ29uc3VtZWRcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0ICsgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVMZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICByZXR1cm4gcmVhZEJsb2JBc1RleHQodGhpcy5fYm9keUJsb2IpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVhZEFycmF5QnVmZmVyQXNUZXh0KHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5VGV4dClcbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICB9XG4gIH1cblxuICB0aGlzLmpzb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG52YXIgbWV0aG9kcyA9IFsnREVMRVRFJywgJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUE9TVCcsICdQVVQnXVxuXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QobWV0aG9kKSB7XG4gIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgcmV0dXJuIG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xID8gdXBjYXNlZCA6IG1ldGhvZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdChpbnB1dCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpXG4gICAgfVxuICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGlucHV0LmNyZWRlbnRpYWxzXG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kXG4gICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsXG4gICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICBib2R5ID0gaW5wdXQuX2JvZHlJbml0XG4gICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpXG4gIH1cblxuICB0aGlzLmNyZWRlbnRpYWxzID0gb3B0aW9ucy5jcmVkZW50aWFscyB8fCB0aGlzLmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbidcbiAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB9XG4gIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGxcbiAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbFxuICB0aGlzLnJlZmVycmVyID0gbnVsbFxuXG4gIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gIH1cbiAgdGhpcy5faW5pdEJvZHkoYm9keSlcblxuICBpZiAodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAvLyBTZWFyY2ggZm9yIGEgJ18nIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nXG4gICAgICB2YXIgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgICAgaWYgKHJlUGFyYW1TZWFyY2gudGVzdCh0aGlzLnVybCkpIHtcbiAgICAgICAgLy8gSWYgaXQgYWxyZWFkeSBleGlzdHMgdGhlbiBzZXQgdGhlIHZhbHVlIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB0aGlzLnVybCA9IHRoaXMudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGEgbmV3ICdfJyBwYXJhbWV0ZXIgdG8gdGhlIGVuZCB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdmFyIHJlUXVlcnlTdHJpbmcgPSAvXFw/L1xuICAgICAgICB0aGlzLnVybCArPSAocmVRdWVyeVN0cmluZy50ZXN0KHRoaXMudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHtib2R5OiB0aGlzLl9ib2R5SW5pdH0pXG59XG5cbmZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgYm9keVxuICAgIC50cmltKClcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGJ5dGVzKSB7XG4gICAgICBpZiAoYnl0ZXMpIHtcbiAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICB2YXIgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgLy8gUmVwbGFjZSBpbnN0YW5jZXMgb2YgXFxyXFxuIGFuZCBcXG4gZm9sbG93ZWQgYnkgYXQgbGVhc3Qgb25lIHNwYWNlIG9yIGhvcml6b250YWwgdGFiIHdpdGggYSBzcGFjZVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKVxuICAvLyBBdm9pZGluZyBzcGxpdCB2aWEgcmVnZXggdG8gd29yayBhcm91bmQgYSBjb21tb24gSUUxMSBidWcgd2l0aCB0aGUgY29yZS1qcyAzLjYuMCByZWdleCBwb2x5ZmlsbFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzc1MVxuICBwcmVQcm9jZXNzZWRIZWFkZXJzXG4gICAgLnNwbGl0KCdcXHInKVxuICAgIC5tYXAoZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyLmluZGV4T2YoJ1xcbicpID09PSAwID8gaGVhZGVyLnN1YnN0cigxLCBoZWFkZXIubGVuZ3RoKSA6IGhlYWRlclxuICAgIH0pXG4gICAgLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbkJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQbGVhc2UgdXNlIHRoZSBcIm5ld1wiIG9wZXJhdG9yLCB0aGlzIERPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLicpXG4gIH1cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9XG4gIH1cblxuICB0aGlzLnR5cGUgPSAnZGVmYXVsdCdcbiAgdGhpcy5zdGF0dXMgPSBvcHRpb25zLnN0YXR1cyA9PT0gdW5kZWZpbmVkID8gMjAwIDogb3B0aW9ucy5zdGF0dXNcbiAgdGhpcy5vayA9IHRoaXMuc3RhdHVzID49IDIwMCAmJiB0aGlzLnN0YXR1cyA8IDMwMFxuICB0aGlzLnN0YXR1c1RleHQgPSBvcHRpb25zLnN0YXR1c1RleHQgPT09IHVuZGVmaW5lZCA/ICcnIDogJycgKyBvcHRpb25zLnN0YXR1c1RleHRcbiAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICB0aGlzLnVybCA9IG9wdGlvbnMudXJsIHx8ICcnXG4gIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgdXJsOiB0aGlzLnVybFxuICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogMCwgc3RhdHVzVGV4dDogJyd9KVxuICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwge3N0YXR1czogc3RhdHVzLCBoZWFkZXJzOiB7bG9jYXRpb246IHVybH19KVxufVxuXG5leHBvcnQgdmFyIERPTUV4Y2VwdGlvbiA9IGdsb2JhbC5ET01FeGNlcHRpb25cbnRyeSB7XG4gIG5ldyBET01FeGNlcHRpb24oKVxufSBjYXRjaCAoZXJyKSB7XG4gIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpXG4gICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrXG4gIH1cbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRE9NRXhjZXB0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaChpbnB1dCwgaW5pdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCAmJiByZXF1ZXN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgIH1cblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgZnVuY3Rpb24gYWJvcnRYaHIoKSB7XG4gICAgICB4aHIuYWJvcnQoKVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIHx8ICcnKVxuICAgICAgfVxuICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHRcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZml4VXJsKHVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9wZW4ocmVxdWVzdC5tZXRob2QsIGZpeFVybChyZXF1ZXN0LnVybCksIHRydWUpXG5cbiAgICBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYidcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgJiZcbiAgICAgICAgcmVxdWVzdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykuaW5kZXhPZignYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJykgIT09IC0xXG4gICAgICApIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcidcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbml0LmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCBub3JtYWxpemVWYWx1ZShpbml0LmhlYWRlcnNbbmFtZV0pKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBET05FIChzdWNjZXNzIG9yIGZhaWx1cmUpXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIuc2VuZCh0eXBlb2YgcmVxdWVzdC5fYm9keUluaXQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHJlcXVlc3QuX2JvZHlJbml0KVxuICB9KVxufVxuXG5mZXRjaC5wb2x5ZmlsbCA9IHRydWVcblxuaWYgKCFnbG9iYWwuZmV0Y2gpIHtcbiAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgZ2xvYmFsLkhlYWRlcnMgPSBIZWFkZXJzXG4gIGdsb2JhbC5SZXF1ZXN0ID0gUmVxdWVzdFxuICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn0iLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iLCIvLyB0c2xpbnQ6ZGlzYWJsZSBuby11bnNhZmUtYW55XG5leHBvcnQgY2xhc3MgTG9hZEludG9Eb2N1bWVudCB7XG4gICAgcHVibGljIHN0YXRpYyBzY3JpcHQodXJpOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNjcmlwdC5yZWFkeVN0YXRlIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5nIHRoZSB1c2VyIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgY29tcGxldGVzIHRvIGxvYWQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gSUUgZXZlbiB1cG9uIGVycm9yLiBJbiBhbnlcbiAgICAgICAgLy8gY2FzZSBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmlwdCByYW5cbiAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZEhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBsb2FkSGFuZGxlcjtcblxuICAgICAgICAvLyBBZGQgYW4gZXJyb3IgY2FsbGJhY2suXG4gICAgICAgIC8vIE5PVEUodXNlcik6IE5vdCBzdXBwb3J0ZWQgaW4gSUUuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0LlwiKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzY3JpcHQgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFNhZmFyaSBuZXZlciBsb2FkcyB0aGUgc2NyaXB0IGlmIHdlIGRvbid0IHNldFxuICAgICAgICAvLyB0aGUgc3JjIGF0dHJpYnV0ZSBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICBzY3JpcHQuc3JjID0gdXJpO1xuICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwgXCJ1c2UtY3JlZGVudGlhbHNcIik7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlU2hlZXQodXJpOiBzdHJpbmcsIGlnbm9yZUVycm9yOiBib29sZWFuLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpZ25vcmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc3R5bGVzaGVldC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJzdHlsZXNoZWV0XCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCJmdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHtcbiAgICBhdXRob3JpemVkOiBwYXJzZUJvb2woXCJ7YXV0aG9yaXplZH1cIiksXG4gICAgY2F1bGRyb25BcGlVcmw6IFwie2NhdWxkcm9uQXBpVXJsfVwiLFxuICAgIGlzVGVzdFNlcnZlcjogcGFyc2VCb29sKFwie2lzVGVzdFNlcnZlcn1cIiksXG4gICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogcGFyc2VCb29sKFwie3JlbmRlckNhY2hpbmdGb3JJRTh9XCIpLFxuICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogcGFyc2VCb29sKFwie25vcm1hbGl6YXRpb25PblNlcnZlcn1cIiksXG4gICAgbm9ybWF0aXZlVXJsOiBcIntub3JtYXRpdmVVcmx9XCIsXG4gICAgcmVzb3VyY2VzVmVyc2lvbjogXCJ7cmVzb3VyY2VzVmVyc2lvbn1cIixcbiAgICBrb250dXJEb21haW5zOiBcIntrb250dXJEb21haW5zfVwiLFxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGluZm8uZG9uZSkge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG5cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJleHBvcnQgY2xhc3MgQXBwbGljYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSA/PyBcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQcm9ncmFtU3RhdGVFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIgKyAobWVzc2FnZSAhPSB1bmRlZmluZWQgPyBcIjogXCIgKyBtZXNzYWdlIDogXCJcIikpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIEVtcGxveWVlLFxuICAgIEVtcGxveWVlTGlzdCxcbiAgICBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0LFxuICAgIEdldFdvcmtpbmdFdmVudExpc3RSZXF1ZXN0LFxuICAgIFdvcmtpbmdFdmVudExpc3QsXG59IGZyb20gXCJAc2tia29udHVyL3N0YWZmLXNlbGVjdG9yLXdpZGdldFwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcIkVuZ2luZS9zcmMvRW5naW5lL0Zvcm0vTW9kZWxDaGFuZ2VFdmVudExpc3RlbmVyXCI7XG5cbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1BhdGgsIE1vZGVsVmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEV4dGVybmFsSG9va0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9FeHRlcm5hbEV2ZW50cy9FeHRlcm5hbEhvb2tGdW5jdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkb25seU1vZGVsQ2h1bmsgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvTW9kZWxTdG9yaW5nL01vZGVsQ2h1bmtcIjtcbmltcG9ydCB0eXBlIHsgUGlja2xpc3RRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB7IE1vZGVsRXZlbnRzTGlzdGVuZXIgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L01vZGVsRXZlbnRzL01vZGVsRXZlbnRcIjtcbmltcG9ydCB7IERpZ2VzdFF1ZXJ5RmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvVHlwZXMvRGlnZXN0UXVlcnlGaWx0ZXJcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvSU1vZGFsU3RhdGVcIjtcbmltcG9ydCB7IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcbmltcG9ydCB7IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMsIEluaXRTZWN0aW9uRm9ybUxpZ2h0Ym94T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0luaXRTZWN0aW9uTGlnaHRib3hcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IEZpYXNDbGllbnRJbml0T3B0aW9ucywgRmlhc0FwaSB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9WYWx1ZUVkaXRvcnMvRmlhcy9GaWFzSW5wdXQvRmlhc0FwaVwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVDaGlsZHJlbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIF9fSU5URVJOQUxfX2ltcG9ydEZyb21FbXBsb3llZVNlcnZpY2UoKTogUHJvbWlzZTxFbXBsb3llZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMoZW1wbG95ZWVzOiBFbXBsb3llZVtdLCBvcHRpb25zPzogeyBzY2VuYXJpbz86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludChwcmludFR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIHRocm93IEVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc3RvcEF1dG9zZW5kKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udW5tb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnVubW91bnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY2hhbmdlU2V0LnNlbmQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VG91clN0ZXBzKCk6IFN0ZXBbXSB7XG4gICAgICAgIC8vIEZvciBvbGQga2V3ZWJcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0QWRkaXRpb25hbEVtcGxveWVlSW5mbyhmaWx0ZXJzOiBHZXRFbXBsb3llZUxpc3RSZXF1ZXN0KTogUHJvbWlzZTxFbXBsb3llZUxpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWxvYWRJbm5lcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXb3JraW5nRXZlbnRzRm9yRW1wbG95ZWUoZmlsdGVyczogR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QpOiBQcm9taXNlPFdvcmtpbmdFdmVudExpc3QgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0KHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5U3VidHJlZShcbiAgICAgICAgc291cmNlQmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgdGFyZ2V0QmluZGluZ1BhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgZG9Ob3RDb3B5UGF0aHM/OiBzdHJpbmdbXVxuICAgICk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHV1aWRHZW5lcmF0ZSgpOiBzdHJpbmcge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93TW9kYWwob3B0aW9uczogTW9kYWxPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlY3Rpb24ob3B0aW9uczogSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbGxJbml0U2VjdGlvbihvcHRpb25zOiBDYWxsSW5pdFNlY3Rpb25MaWdodGJveFByb3BzKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpYXNBcGlDbGllbnQob3B0aW9uczogRmlhc0NsaWVudEluaXRPcHRpb25zKTogRmlhc0FwaSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5FbXBsb3llZUVkaXRvcihlbXBsb3llZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2UocGF0aDogc3RyaW5nLCBpbnN0YW5jZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlcyhwYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNPbkNvbnRyb2xJZkV4aXN0KHBhdGg6IEJpbmRpbmdQYXRoKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5zdXJlSW5zdGFuY2VGdWxseUxvYWRlZChcbiAgICAgICAgYmluZGluZ1BhdGg6IHN0cmluZyB8IEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGgsXG4gICAgICAgIC4uLmluc3RhbmNlczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzQnlSdWxlcyhydWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5jbGllbnREcmFmdEluZm8sXG4gICAgICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsZWFuRm9ybTogb3B0aW9ucy5pc0Rpc2FibGVkQ2xlYW5Gb3JtID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbjogb3B0aW9ucy5pc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbG9hZEZvcm0oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBnZnY6IGV4dGVuZGVkU2V0dGluZ3MuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLmVuZ2luZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2VzVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgdGhlbWU6IGV4dGVuZGVkU2V0dGluZ3MudGhlbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsb2FkRXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9hZEVycm9yIHx8ICFnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYGR5bmFtaWMgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBnZnYgJHtnZnZ9YCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4dGVuZGVkU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzQXBpOiBvcHRpb25zLnRlbXBsYXRlc0FwaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtOiByZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spO1xufVxuXG5jb25zdCBDYW5keUNsaWVudEV4cG9ydHM6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIgPSB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVudHJ5UG9pbnQ6IHt9LFxuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IHBhcnNlQm9vbChcIntwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4fVwiKSxcbiAgICBrZWZvcm1zVXJsOiBcIntrZWZvcm1zVXJsfVwiLFxufTtcblxuZ2xvYmFsLkNGID0gQ2FuZHlDbGllbnRFeHBvcnRzO1xuXG5leHBvcnQgeyBDYW5keUNsaWVudEV4cG9ydHMgfTtcbiIsImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheUxpbWl0IGZyb20gXCIuL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcblxuICBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgX2FyciA9IFtdO1xuICB2YXIgX24gPSB0cnVlO1xuICB2YXIgX2QgPSBmYWxzZTtcblxuICB2YXIgX3MsIF9lO1xuXG4gIHRyeSB7XG4gICAgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuICAgICAgX2Fyci5wdXNoKF9zLnZhbHVlKTtcblxuICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2QgPSB0cnVlO1xuICAgIF9lID0gZXJyO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9hcnI7XG59IiwiaW1wb3J0IGFycmF5TGlrZVRvQXJyYXkgZnJvbSBcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikge1xuICBpZiAoIW8pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xuICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gIGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7XG4gIGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pO1xuICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufSIsIi8qKipcbiAqINCh0YLRgNC+0LPQvtGC0LjQv9C40LfQuNGA0L7QstCw0L3QvdCw0Y8g0LfQsNC80LXQvdCwINC00LvRjyBCb29sZWFuKC4uLilcbiAqINCe0LHRi9GH0L3QviDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LTQu9GPIFsuLi5dLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogaW5wdXQgaXMgTm9uTnVsbGFibGU8VD4ge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlVbmtub3duRXJyb3IoZXJyb3I6IHVua25vd24pOiB1bmRlZmluZWQgfCBzdHJpbmcge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgZXJyb3I/LltcIm1lc3NhZ2VcIl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQpOiBhc3NlcnRzIGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICBpZiAoIWlzTm90TnVsbE9yVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIG11c3QgYmUgZGVmaW5lZGApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKTogdm9pZCB7XG4gICAgLy8gbm9vcFxufVxuXG5leHBvcnQgdHlwZSBFcnJvckZpcnN0Q2FsbGJhY2s8VD4gPSAoLi4uYXJnczogW0Vycm9yLCBudWxsIHwgdW5kZWZpbmVkXSB8IFtudWxsIHwgdW5kZWZpbmVkLCBUXSB8IFtFcnJvcl0pID0+IHZvaWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWplY3QobWVzc2FnZT86IHN0cmluZyB8IEVycm9yKTogbmV2ZXIge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiB8fCBtZXNzYWdlID09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlVuZGVmaW5lZCBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBtZXNzYWdlO1xuICAgIH1cbn1cblxudHlwZSBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHsgbGVuZ3RoOiBUTGVuZ3RoIH1cbiAgICA/IFRSZXN0XG4gICAgOiBBcnJheU9mTGVuZ3RoPFRJdGVtLCBUTGVuZ3RoLCBbVEl0ZW0sIC4uLlRSZXN0XT47XG5cbmV4cG9ydCB0eXBlIE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoIGV4dGVuZHMgbnVtYmVyLCBUUmVzdCBleHRlbmRzIFRJdGVtW10gPSBbXT4gPSBUUmVzdCBleHRlbmRzIHtcbiAgICBsZW5ndGg6IFRMZW5ndGg7XG59XG4gICAgPyBbLi4uVFJlc3QsIC4uLlRJdGVtW11dXG4gICAgOiBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCwgWy4uLlRSZXN0LCBUSXRlbV0+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbkxlbmd0aE9yVW5kZWZpbmVkPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiB1bmRlZmluZWQgfCBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgaWYgKGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsKGl0ZW1zLCBtaW5MZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID09PSBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SGFzQXRMZWFzdE9uZUl0ZW08VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICByZXR1cm4gaXRlbXMubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogYXNzZXJ0cyBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgaWYgKCFhcnJheUlzTm90RW1wdHkoaXRlbXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgbXVzdCBiZSBub3QgZW1wdHlgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogYXNzZXJ0cyBpdGVtcyBpcyBBcnJheU9mTGVuZ3RoPFQsIFROdW0+IHtcbiAgICBpZiAoIWFycmF5SGFzTGVuZ3RoKGl0ZW1zLCBsZW5ndGgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQXJyYXkgc2hvdWxkIGhhcyBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWw8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgaGF2ZSBtaW5pbWFsIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke25ldmVyQXJndW1lbnR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkFzeW5jQWN0aW9uKGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICBhY3Rpb24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGlucHV0ID09IHVuZGVmaW5lZCB8fCBpbnB1dCA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm90TnVsbE9yRW1wdHkoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGlucHV0IGlzIHN0cmluZyB7XG4gICAgcmV0dXJuICFpc051bGxPckVtcHR5KGlucHV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGlucHV0IGlzIHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQudHJpbSgpID09PSBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbUxhc3RTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2Vy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
1290
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0IiwiZSIsInIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwibGVuZ3RoIiwibiIsIkFycmF5IiwiZyIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIndpbmRvdyIsInNlbGYiLCJvIiwiaSIsIlN5bWJvbCIsImEiLCJCbG9iIiwidSIsInMiLCJjIiwibCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImYiLCJTdHJpbmciLCJ0ZXN0IiwiVHlwZUVycm9yIiwidG9Mb3dlckNhc2UiLCJoIiwiZCIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJpdGVyYXRvciIsInAiLCJtYXAiLCJmb3JFYWNoIiwiYXBwZW5kIiwiaXNBcnJheSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ5IiwiYm9keVVzZWQiLCJQcm9taXNlIiwicmVqZWN0IiwidiIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJlcnJvciIsIm0iLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJiIiwic2xpY2UiLCJVaW50OEFycmF5IiwiYnl0ZUxlbmd0aCIsInNldCIsImJ1ZmZlciIsInciLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJpc1Byb3RvdHlwZU9mIiwiX2JvZHlCbG9iIiwiRm9ybURhdGEiLCJfYm9keUZvcm1EYXRhIiwiVVJMU2VhcmNoUGFyYW1zIiwiRGF0YVZpZXciLCJfYm9keUFycmF5QnVmZmVyIiwiaGVhZGVycyIsImdldCIsInR5cGUiLCJibG9iIiwicmVzb2x2ZSIsIkVycm9yIiwiYXJyYXlCdWZmZXIiLCJieXRlT2Zmc2V0IiwidGhlbiIsInRleHQiLCJyZWFkQXNUZXh0IiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImZvcm1EYXRhIiwiTyIsImpzb24iLCJKU09OIiwicGFyc2UiLCJkZWxldGUiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsIkUiLCJib2R5IiwidXJsIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJtb2RlIiwic2lnbmFsIiwidG9VcHBlckNhc2UiLCJyZWZlcnJlciIsImNhY2hlIiwicmVwbGFjZSIsIkRhdGUiLCJnZXRUaW1lIiwidHJpbSIsInNwbGl0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiayIsInN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsImNsb25lIiwiaiIsInJlZGlyZWN0IiwiUmFuZ2VFcnJvciIsImxvY2F0aW9uIiwiQSIsIkRPTUV4Y2VwdGlvbiIsIm1lc3NhZ2UiLCJuYW1lIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl8iLCJhYm9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInN1YnN0ciIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsIm9wZW4iLCJocmVmIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJQIiwiUyIsImtleSIsIlQiLCJwb2x5ZmlsbCIsImZldGNoIiwiSGVhZGVycyIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIngiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiQiIsIkJvb2xlYW4iLCJDIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiaXNUZXN0U2VydmVyIiwicmVuZGVyQ2FjaGluZ0ZvcklFOCIsIm5vcm1hbGl6YXRpb25PblNlcnZlciIsIm5vcm1hdGl2ZVVybCIsInJlc291cmNlc1ZlcnNpb24iLCJrb250dXJEb21haW5zIiwiSSIsIkwiLCJGIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJEIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJSIiwiVSIsImdldFByb3RvdHlwZU9mIiwiTSIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiYmluZCIsIk4iLCJNYXAiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiViIsIlJlZmVyZW5jZUVycm9yIiwiRyIsInoiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiYXN5bmNJdGVyYXRvciIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiYXJnIiwid3JhcCIsIl9pbnZva2UiLCJfX2F3YWl0IiwiZGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJldHVybiIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiYXdyYXAiLCJBc3luY0l0ZXJhdG9yIiwiYXN5bmMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJjYXRjaCIsImRlbGVnYXRlWWllbGQiLCJxIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiWiIsIiQiLCJYIiwicmVkdWNlIiwiWSIsImZvcm0iLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE1hbmFnZXIiLCJvbiIsIm9mZiIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZmlsbCIsImNvbmNhdCIsIkoiLCJXIiwiSyIsIlEiLCJDRiIsImtlZm9ybXNVcmwiLCJ0dCIsImVuY29kZVVSSUNvbXBvbmVudCIsImV0Iiwic2VhcmNoIiwiZmluZCIsImZyb20iLCJydCIsInN0YXJ0IiwibnMiLCJkcmFmdElkIiwiUmVnRXhwIiwiaG9zdCIsInJlc291cmNlWm9uZSIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsIkF1dGhvcml6YXRpb24iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZmVlZGJhY2tFbmFibGVkIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJlbnRyeVBvaW50Iiwic3R5bGVTaGVldCIsInNjcmlwdCIsInRoZW1lIiwiZGVmYXVsdCIsInB1YmxpY0Zvcm0iLCJ0ZW1wbGF0ZXNBcGkiLCJyZW5kZXJGb3JtIiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYXJyMltpXSA9IGFycltpXTtcbiAgfVxuXG4gIHJldHVybiBhcnIyO1xufSIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwidmFyIGdsb2JhbCA9XG4gICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmKSB8fFxuICAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsKVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBnbG9iYWwsXG4gIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBnbG9iYWwgJiYgJ2l0ZXJhdG9yJyBpbiBTeW1ib2wsXG4gIGJsb2I6XG4gICAgJ0ZpbGVSZWFkZXInIGluIGdsb2JhbCAmJlxuICAgICdCbG9iJyBpbiBnbG9iYWwgJiZcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0pKCksXG4gIGZvcm1EYXRhOiAnRm9ybURhdGEnIGluIGdsb2JhbCxcbiAgYXJyYXlCdWZmZXI6ICdBcnJheUJ1ZmZlcicgaW4gZ2xvYmFsXG59XG5cbmZ1bmN0aW9uIGlzRGF0YVZpZXcob2JqKSB7XG4gIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgXVxuXG4gIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3IHx8XG4gICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgbmFtZSA9IFN0cmluZyhuYW1lKVxuICB9XG4gIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+IV0vaS50ZXN0KG5hbWUpIHx8IG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSlcbiAgfVxuICByZXR1cm4gdmFsdWVcbn1cblxuLy8gQnVpbGQgYSBkZXN0cnVjdGl2ZSBpdGVyYXRvciBmb3IgdGhlIHZhbHVlIGxpc3RcbmZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gIHZhciBpdGVyYXRvciA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdGhpcy5tYXAgPSB7fVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgdGhpcy5hcHBlbmQoaGVhZGVyWzBdLCBoZWFkZXJbMV0pXG4gICAgfSwgdGhpcylcbiAgfSBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgIH0sIHRoaXMpXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgdGhpcy5tYXBbbmFtZV0gPSBvbGRWYWx1ZSA/IG9sZFZhbHVlICsgJywgJyArIHZhbHVlIDogdmFsdWVcbn1cblxuSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICBkZWxldGUgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5tYXAuaGFzT3duUHJvcGVydHkobm9ybWFsaXplTmFtZShuYW1lKSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5tYXBbbm9ybWFsaXplTmFtZShuYW1lKV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbn1cblxuSGVhZGVycy5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gdGhpcy5tYXApIHtcbiAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5tYXBbbmFtZV0sIG5hbWUsIHRoaXMpXG4gICAgfVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChuYW1lKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXRlbXMgPSBbXVxuICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpdGVtcy5wdXNoKHZhbHVlKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgaXRlbXMucHVzaChbbmFtZSwgdmFsdWVdKVxuICB9KVxuICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbmlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVkKGJvZHkpIHtcbiAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJykpXG4gIH1cbiAgYm9keS5ib2R5VXNlZCA9IHRydWVcbn1cblxuZnVuY3Rpb24gZmlsZVJlYWRlclJlYWR5KHJlYWRlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVzb2x2ZShyZWFkZXIucmVzdWx0KVxuICAgIH1cbiAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxuICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gIH1cbiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwKVxuICB9IGVsc2Uge1xuICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICByZXR1cm4gdmlldy5idWZmZXJcbiAgfVxufVxuXG5mdW5jdGlvbiBCb2R5KCkge1xuICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICB0aGlzLl9pbml0Qm9keSA9IGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAvKlxuICAgICAgZmV0Y2gtbW9jayB3cmFwcyB0aGUgUmVzcG9uc2Ugb2JqZWN0IGluIGFuIEVTNiBQcm94eSB0b1xuICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICBFUzUgYnJvd3NlcnMgd2l0aG91dCBmZXRjaCBvciBQcm94eSBzdXBwb3J0IHBvbGx5ZmlsbHMgbXVzdCBiZSB1c2VkO1xuICAgICAgdGhlIHByb3h5LXBvbGx5ZmlsbCBpcyB1bmFibGUgdG8gcHJveHkgYW4gYXR0cmlidXRlIHVubGVzcyBpdCBleGlzdHNcbiAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICBSZXNwb25zZS5ib2R5VXNlZCBleGlzdHMgb24gdGhlIGluc3RhbmNlLCB3aGlsZSBtYWludGFpbmluZyB0aGVcbiAgICAgIHNlbWFudGljIG9mIHNldHRpbmcgUmVxdWVzdC5ib2R5VXNlZCBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlXG4gICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICovXG4gICAgdGhpcy5ib2R5VXNlZCA9IHRoaXMuYm9keVVzZWRcbiAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gJydcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmJsb2IgJiYgQmxvYi5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5Rm9ybURhdGEgPSBib2R5XG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcilcbiAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiAoQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkgfHwgaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpKSB7XG4gICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICB0aGlzLmJsb2IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgYmxvYicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5VGV4dF0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICBpZiAoaXNDb25zdW1lZCkge1xuICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5idWZmZXIuc2xpY2UoXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ibG9iKCkudGhlbihyZWFkQmxvYkFzQXJyYXlCdWZmZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3RlZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlYWRBcnJheUJ1ZmZlckFzVGV4dCh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFkIEZvcm1EYXRhIGJvZHkgYXMgdGV4dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihkZWNvZGUpXG4gICAgfVxuICB9XG5cbiAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlcXVlc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgaWYgKGlucHV0LmJvZHlVc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICB0aGlzLnVybCA9IGlucHV0LnVybFxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKVxuICAgIH1cbiAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgIHRoaXMubW9kZSA9IGlucHV0Lm1vZGVcbiAgICB0aGlzLnNpZ25hbCA9IGlucHV0LnNpZ25hbFxuICAgIGlmICghYm9keSAmJiBpbnB1dC5fYm9keUluaXQgIT0gbnVsbCkge1xuICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICB9XG5cbiAgdGhpcy5jcmVkZW50aWFscyA9IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgdGhpcy5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG4gIGlmIChvcHRpb25zLmhlYWRlcnMgfHwgIXRoaXMuaGVhZGVycykge1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgfVxuICB0aGlzLm1ldGhvZCA9IG5vcm1hbGl6ZU1ldGhvZChvcHRpb25zLm1ldGhvZCB8fCB0aGlzLm1ldGhvZCB8fCAnR0VUJylcbiAgdGhpcy5tb2RlID0gb3B0aW9ucy5tb2RlIHx8IHRoaXMubW9kZSB8fCBudWxsXG4gIHRoaXMuc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgfHwgdGhpcy5zaWduYWxcbiAgdGhpcy5yZWZlcnJlciA9IG51bGxcblxuICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMnKVxuICB9XG4gIHRoaXMuX2luaXRCb2R5KGJvZHkpXG5cbiAgaWYgKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgaWYgKG9wdGlvbnMuY2FjaGUgPT09ICduby1zdG9yZScgfHwgb3B0aW9ucy5jYWNoZSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgLy8gU2VhcmNoIGZvciBhICdfJyBwYXJhbWV0ZXIgaW4gdGhlIHF1ZXJ5IHN0cmluZ1xuICAgICAgdmFyIHJlUGFyYW1TZWFyY2ggPSAvKFs/Jl0pXz1bXiZdKi9cbiAgICAgIGlmIChyZVBhcmFtU2VhcmNoLnRlc3QodGhpcy51cmwpKSB7XG4gICAgICAgIC8vIElmIGl0IGFscmVhZHkgZXhpc3RzIHRoZW4gc2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLnVybC5yZXBsYWNlKHJlUGFyYW1TZWFyY2gsICckMV89JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBhIG5ldyAnXycgcGFyYW1ldGVyIHRvIHRoZSBlbmQgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHZhciByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICAgICAgdGhpcy51cmwgKz0gKHJlUXVlcnlTdHJpbmcudGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpICsgJ189JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblJlcXVlc3QucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxufVxuXG5mdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gIGJvZHlcbiAgICAudHJpbSgpXG4gICAgLnNwbGl0KCcmJylcbiAgICAuZm9yRWFjaChmdW5jdGlvbihieXRlcykge1xuICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgIHZhciBzcGxpdCA9IGJ5dGVzLnNwbGl0KCc9JylcbiAgICAgICAgdmFyIG5hbWUgPSBzcGxpdC5zaGlmdCgpLnJlcGxhY2UoL1xcKy9nLCAnICcpXG4gICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICBmb3JtLmFwcGVuZChkZWNvZGVVUklDb21wb25lbnQobmFtZSksIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGZvcm1cbn1cblxuZnVuY3Rpb24gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIHtcbiAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgdmFyIHByZVByb2Nlc3NlZEhlYWRlcnMgPSByYXdIZWFkZXJzLnJlcGxhY2UoL1xccj9cXG5bXFx0IF0rL2csICcgJylcbiAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9pc3N1ZXMvNzQ4XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy83NTFcbiAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgIC5zcGxpdCgnXFxyJylcbiAgICAubWFwKGZ1bmN0aW9uKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICB9KVxuICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKClcbiAgICAgICAgaGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICByZXR1cm4gaGVhZGVyc1xufVxuXG5Cb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpXG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICB9XG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fVxuICB9XG5cbiAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzXG4gIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDBcbiAgdGhpcy5zdGF0dXNUZXh0ID0gb3B0aW9ucy5zdGF0dXNUZXh0ID09PSB1bmRlZmluZWQgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG4gIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJ1xuICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbn1cblxuQm9keS5jYWxsKFJlc3BvbnNlLnByb3RvdHlwZSlcblxuUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgUmVzcG9uc2UodGhpcy5fYm9keUluaXQsIHtcbiAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpLFxuICAgIHVybDogdGhpcy51cmxcbiAgfSlcbn1cblxuUmVzcG9uc2UuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbnZhciByZWRpcmVjdFN0YXR1c2VzID0gWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XVxuXG5SZXNwb25zZS5yZWRpcmVjdCA9IGZ1bmN0aW9uKHVybCwgc3RhdHVzKSB7XG4gIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gIH1cblxuICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICBuZXcgRE9NRXhjZXB0aW9uKClcbn0gY2F0Y2ggKGVycikge1xuICBET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgIHRoaXMuc3RhY2sgPSBlcnJvci5zdGFja1xuICB9XG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSlcbiAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERPTUV4Y2VwdGlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcblxuICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgeGhyLmFib3J0KClcbiAgICB9XG5cbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMudXJsID0gJ3Jlc3BvbnNlVVJMJyBpbiB4aHIgPyB4aHIucmVzcG9uc2VVUkwgOiBvcHRpb25zLmhlYWRlcnMuZ2V0KCdYLVJlcXVlc3QtVVJMJylcbiAgICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpeFVybCh1cmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cmwgPT09ICcnICYmIGdsb2JhbC5sb2NhdGlvbi5ocmVmID8gZ2xvYmFsLmxvY2F0aW9uLmhyZWYgOiB1cmxcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhocikge1xuICAgICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdXBwb3J0LmFycmF5QnVmZmVyICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpLmluZGV4T2YoJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpICE9PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluaXQgJiYgdHlwZW9mIGluaXQuaGVhZGVycyA9PT0gJ29iamVjdCcgJiYgIShpbml0LmhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW5pdC5oZWFkZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgIHJlcXVlc3Quc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG5cbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICByZXF1ZXN0LnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdClcbiAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gIGdsb2JhbC5mZXRjaCA9IGZldGNoXG4gIGdsb2JhbC5IZWFkZXJzID0gSGVhZGVyc1xuICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgZ2xvYmFsLlJlc3BvbnNlID0gUmVzcG9uc2Vcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59IiwiLy8gdHNsaW50OmRpc2FibGUgbm8tdW5zYWZlLWFueVxuZXhwb3J0IGNsYXNzIExvYWRJbnRvRG9jdW1lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgc2NyaXB0KHVyaTogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3Qgc2NyaXB0OiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKHNjcmlwdExvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFzY3JpcHQucmVhZHlTdGF0ZSB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZyB0aGUgdXNlciBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGNvbXBsZXRlcyB0byBsb2FkLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIElFIGV2ZW4gdXBvbiBlcnJvci4gSW4gYW55XG4gICAgICAgIC8vIGNhc2UgaXQgaXMgdGhlIGNsaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIHZlcmlmeSB0aGF0IHRoZSBzY3JpcHQgcmFuXG4gICAgICAgIC8vIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRIYW5kbGVyO1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbG9hZEhhbmRsZXI7XG5cbiAgICAgICAgLy8gQWRkIGFuIGVycm9yIGNhbGxiYWNrLlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBOb3Qgc3VwcG9ydGVkIGluIElFLlxuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIHNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHNjcmlwdC5cIikpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEFkZCB0aGUgc2NyaXB0IGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAvLyBOT1RFKHVzZXIpOiBTYWZhcmkgbmV2ZXIgbG9hZHMgdGhlIHNjcmlwdCBpZiB3ZSBkb24ndCBzZXRcbiAgICAgICAgLy8gdGhlIHNyYyBhdHRyaWJ1dGUgYmVmb3JlIGFwcGVuZGluZy5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHVyaTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIsIFwidXNlLWNyZWRlbnRpYWxzXCIpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzdHlsZVNoZWV0KHVyaTogc3RyaW5nLCBpZ25vcmVFcnJvcjogYm9vbGVhbiwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc29sdmUgPSAoKSA9PiBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCByZWplY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoXCJFcnJvciB3aGlsZSBsb2FkaW5nIHN0eWxlc2hlZXQuXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwicmVsXCIsIFwic3R5bGVzaGVldFwiKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwidGV4dC9jc3NcIik7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb2x2ZSk7XG4gICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmkpO1xuICAgIH1cbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpO1xuICAgIHZhciB2YWx1ZSA9IGluZm8udmFsdWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cblxuICAgICAgX25leHQodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH0gZWxzZSBpZiAoY2FsbCAhPT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRW1wbG95ZWUsXG4gICAgRW1wbG95ZWVMaXN0LFxuICAgIEdldEVtcGxveWVlTGlzdFJlcXVlc3QsXG4gICAgR2V0V29ya2luZ0V2ZW50TGlzdFJlcXVlc3QsXG4gICAgV29ya2luZ0V2ZW50TGlzdCxcbn0gZnJvbSBcIkBza2Jrb250dXIvc3RhZmYtc2VsZWN0b3Itd2lkZ2V0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwiRW5naW5lL3NyYy9FbmdpbmUvRm9ybS9Nb2RlbENoYW5nZUV2ZW50TGlzdGVuZXJcIjtcblxuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vRXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IFN0ZXAgfSBmcm9tIFwiLi4vLi4vLi4vQ29udHJvbHMvRm9ybVBhcnRzL1RvdXIvVG91clR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nUGF0aCwgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtTW9kZWxBY2Nlc3NvclwiO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGFsTWFuYWdlci9JTW9kYWxTdGF0ZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuaW1wb3J0IHsgQ2FsbEluaXRTZWN0aW9uTGlnaHRib3hQcm9wcywgSW5pdFNlY3Rpb25Gb3JtTGlnaHRib3hPcHRpb25zIH0gZnJvbSBcIi4uLy4uL1B1YmxpY0Zvcm0vSW5pdFNlY3Rpb25MaWdodGJveFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgRmlhc0NsaWVudEluaXRPcHRpb25zLCBGaWFzQXBpIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL1ZhbHVlRWRpdG9ycy9GaWFzL0ZpYXNJbnB1dC9GaWFzQXBpXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuXG5pbXBvcnQgeyBJTGVnYWN5Rm9ybSB9IGZyb20gXCIuL0lMZWdhY3lGb3JtXCI7XG5cbmV4cG9ydCB0eXBlIE1vZGVsRXZlbnRQYXRoID1cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIl07XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbENoYW5nZUV2ZW50UGF0aChwYXRoPzogc3RyaW5nLCBmaWVsZE5hbWU/OiBzdHJpbmcpOiBNb2RlbEV2ZW50UGF0aCB7XG4gICAgaWYgKGZpZWxkTmFtZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aCwgZmllbGROYW1lXTtcbiAgICB9XG4gICAgaWYgKHBhdGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdO1xufVxuXG5mdW5jdGlvbiBtYXBDaHVua1ZhbHVlcyhjaHVuazogUmVhZG9ubHlNb2RlbENodW5rKTogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNodW5rKVxuICAgICAgICAuZmlsdGVyKHBhdGggPT4gY2h1bmtbcGF0aF0gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNodW5rW3BhdGhdLCBcInZhbHVlXCIpKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2h1bmtbcGF0aF07XG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IFtwYXRoXTogcmVzdWx0LnZhbHVlIH07XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWR1Y2VDaHVua1ZhbHVlcyhjaHVua3M6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgIHJldHVybiBjaHVua3MucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCBjaHVuaykgPT4gKHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIC4uLmNodW5rLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5jbGFzcyBMZWdhY3lQdWJsaWNGb3JtIGltcGxlbWVudHMgSVB1YmxpY0Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybTogSUxlZ2FjeUZvcm07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZm9ybTogSUxlZ2FjeUZvcm0pIHtcbiAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYmF0Y2hVcGRhdGUodXBkYXRlUHJvYzogKHVwZGF0ZUFjY2Vzc29yOiBJVXBkYXRlRm9ybU1vZGVsQWNjZXNzb3IpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bkNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RXJyb3JMb2coZXJyb3JMb2c6IFBhcnRpYWw8U2VydmVyRXJyb3JMb2c+KTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNoaWxkcmVuQnlQYXRoKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIF9fSU5URVJOQUxfX2dldFNlbGVjdEZ1bmN0aW9uRm9yRGlzYWJsZUVtcGxveWVlSW5TUyhcbiAgICAgICAgcGF0aFNwZWM6IHN0cmluZ1xuICAgICk6IFByb21pc2U8KGVtcGxveWVlOiBFbXBsb3llZSkgPT4gYm9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhlbXBsb3llZXM6IEVtcGxveWVlW10sIG9wdGlvbnM/OiB7IHNjZW5hcmlvPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHByaW50VHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IERpZ2VzdFF1ZXJ5RmlsdGVyKTogUHJvbWlzZTxQaWNrbGlzdFF1ZXJ5UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5waWNrbGlzdHNQcm92aWRlci5nZXREaWdlc3RBcGlQaWNrbGlzdChnSWQpLnF1ZXJ5KGZpbHRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXh0ZXJuYWxIb29rRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYoW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2UocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIGxpc3RlbmVyOiB1bmtub3duKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtLm9uTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgLy8gRm9yIG9sZCBrZXdlYlxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpO1xuICAgICAgICAvLyBAdHMtaWdub3JlINCt0YLQviDQsiDRgdGC0LDRgNGL0YUg0LTQstC40LbQutCw0YUg0YLRg9GCINGC0LDQutC+0Lkg0LLRi9C30L7QslxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZGF0b3IudmFsaWRhdGVBbGwoa2V5cyk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXRBZGRpdGlvbmFsRW1wbG95ZWVJbmZvKGZpbHRlcnM6IEdldEVtcGxveWVlTGlzdFJlcXVlc3QpOiBQcm9taXNlPEVtcGxveWVlTGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbG9hZElubmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdvcmtpbmdFdmVudHNGb3JFbXBsb3llZShmaWx0ZXJzOiBHZXRXb3JraW5nRXZlbnRMaXN0UmVxdWVzdCk6IFByb21pc2U8V29ya2luZ0V2ZW50TGlzdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0Vycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb3VudCA9IHRoaXMuZm9ybS5tb2RlbC5nZXQodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpO1xuICAgICAgICByZXR1cm4gZXJyb3JDb3VudCAhPSB1bmRlZmluZWQgJiYgZXJyb3JDb3VudCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24obW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9KTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcsIHZhbHVlOiBNb2RlbFZhbHVlKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgcHVibGljIHNldChcbiAgICAgICAgcGF0aE9yTW9kZWxDaHVuazogc3RyaW5nIHwgeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sXG4gICAgICAgIHZhbHVlPzogTW9kZWxWYWx1ZVxuICAgICk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aE9yTW9kZWxDaHVuayAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShwYXRoT3JNb2RlbENodW5rKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVyQ2h1bmsgPSBPYmplY3Qua2V5cyhwYXRoT3JNb2RlbENodW5rKS5yZWR1Y2U8UmVhZG9ubHlNb2RlbENodW5rPihcbiAgICAgICAgICAgICAgICAocmVzdWx0LCBwYXRoKSA9PiAoeyBbcGF0aF06IHsgdmFsdWU6IHBhdGhPck1vZGVsQ2h1bmtbcGF0aF0gfSwgLi4ucmVzdWx0IH0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuZmlsbChpbm5lckNodW5rKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLnNldChwYXRoT3JNb2RlbENodW5rLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uc2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBvYmplY3Qgd2l0aCBwYXRoLXZhbHVlIHBhaXJzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQocGF0aE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdKTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yQXJyYXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMoXG4gICAgICAgICAgICAgICAgcGF0aE9yQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChwYXRoID0+IG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoKSkpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZTxBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+PigocmVzdWx0LCBhcnJheSkgPT4gcmVzdWx0LmNvbmNhdChhcnJheSksIFtdKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aE9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsocGF0aE9yQXJyYXkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0aE9yQXJyYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5nZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIGFycmF5IG9mIHBhdGhzXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZShwYXRoOiBzdHJpbmcpOiBNb2RlbFZhbHVlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ubW9kZWwuZ2V0KHBhdGgsIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlTdWJ0cmVlKFxuICAgICAgICBzb3VyY2VCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICB0YXJnZXRCaW5kaW5nUGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoLFxuICAgICAgICBkb05vdENvcHlQYXRocz86IHN0cmluZ1tdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluc3RhbmNlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENoaWxkcmVuKHBhdGg6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXVpZEdlbmVyYXRlKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dNb2RhbChvcHRpb25zOiBNb2RhbE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VjdGlvbihvcHRpb25zOiBJbml0U2VjdGlvbkZvcm1MaWdodGJveE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FsbEluaXRTZWN0aW9uKG9wdGlvbnM6IENhbGxJbml0U2VjdGlvbkxpZ2h0Ym94UHJvcHMpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmlhc0FwaUNsaWVudChvcHRpb25zOiBGaWFzQ2xpZW50SW5pdE9wdGlvbnMpOiBGaWFzQXBpIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlbkVtcGxveWVlRWRpdG9yKGVtcGxveWVlSWQ6IHN0cmluZykge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c09uQ29udHJvbElmRXhpc3QocGF0aDogQmluZGluZ1BhdGgpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXV0b0ZpZWxkc1RvQXV0b1ZhbHVlKHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVJbnN0YW5jZUZ1bGx5TG9hZGVkKFxuICAgICAgICBiaW5kaW5nUGF0aDogc3RyaW5nIHwgQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCxcbiAgICAgICAgLi4uaW5zdGFuY2VzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZXNCeVJ1bGVzKHJ1bGVzOiBJbnN0YW5jZXNEZWxldGluZ1J1bGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5pbXBvcnQgeyBBbGxJY29uTmFtZXMgfSBmcm9tIFwicmVhY3QtdWlcIjtcblxuaW1wb3J0IHsgRXJyb3JGaXJzdENhbGxiYWNrLCByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IElGb3JtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9Gb3JtL0lGb3JtXCI7XG5pbXBvcnQgeyBMb2FkSW50b0RvY3VtZW50IH0gZnJvbSBcIi4uLy4uL0hlbHBlcnMvTG9hZEludG9Eb2N1bWVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgdHlwZSB7IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudCB9IGZyb20gXCIuLi9UeXBlcy9JS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgZ2V0Q2xpZW50RHJhZnRJbmZvVXJsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DbGllbnREcmFmdEluZm8vR2V0Q2xpZW50RHJhZnRJbmZvVXJsXCI7XG5pbXBvcnQgeyBBVU9PcHRpb25zIH0gZnJvbSBcIi4uL1R5cGVzL0FVT09wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgTGF5b3V0RXZlbnRzU3RhdGljIH0gZnJvbSBcIi4uLy4uL0NvbnRyb2xzL0ludGVybmFscy9MYXlvdXRFdmVudHMvTGF5b3V0RXZlbnRzXCI7XG5cbmltcG9ydCB7IGNsaWVudFNldHRpbmdzIH0gZnJvbSBcIi4vQ2xpZW50U2V0dGluZ3NcIjtcbmltcG9ydCB7IGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm1cIjtcblxudHlwZSBGb3JtQ29udGFpbmVyID0gc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG5cbnR5cGUgRW5naW5lRW50cnlQb2ludCA9ICgpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uRGVzY3JpcHRpb24ge1xuICAgIGljb246IEFsbEljb25OYW1lcztcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIG9uQ2xpY2s6ICgpID0+IHZvaWQ7XG4gICAgaGludD86IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpZD86IHN0cmluZztcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG4gICAgcGFuZWxBY3Rpb25zPzogQWN0aW9uRGVzY3JpcHRpb25bXTtcbn1cblxudHlwZSBTdGFydEZvcm1GdW5jID0gKHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLCBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MpID0+IFByb21pc2U8SUZvcm0+O1xuXG5pbnRlcmZhY2UgQ2FuZHlHbG9iYWxJbmplY3RlZFZhciB7XG4gICAgc3RhcnQ6IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucywgY2FsbGJhY2s/OiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+KSA9PiB2b2lkO1xuICAgIGtlZm9ybXNVcmw/OiBzdHJpbmc7XG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogYm9vbGVhbjtcbiAgICBlbnRyeVBvaW50OiB7IFtrZXk6IHN0cmluZ106IFN0YXJ0Rm9ybUZ1bmMgfTtcbiAgICBsb2FkRXJyb3I/OiB1bmtub3duO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG4gICAgbmFtZXNwYWNlIE5vZGVKUyB7XG4gICAgICAgIGludGVyZmFjZSBHbG9iYWwge1xuICAgICAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmRlY2xhcmUgY29uc3QgZ2xvYmFsOiBXaW5kb3c7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvKiBlbXB0eSAqL1xufVxuXG5mdW5jdGlvbiBwYXJzZUJvb2wodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVybChyZWxhdGl2ZVVybDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVybCA9IGdsb2JhbC5DRi5rZWZvcm1zVXJsIHx8IFwiXCI7XG5cbiAgICByZXR1cm4gYCR7YmFzZVVybH0vJHtyZWxhdGl2ZVVybH1gLnJlcGxhY2UoLyhbXjpdKVxcL3syLH0vZywgXCIkMS9cIik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHVuZGVmaW5lZCB8IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBwYXJhbU5hbWUgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gcGFyYW1zW3BhcmFtTmFtZV07XG4gICAgICAgIGlmIChwYXJhbVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcXVlcnlQYXJ0cy5wdXNoKGAke3BhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHF1ZXJ5UGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aCArIFwiP1wiICsgcXVlcnlQYXJ0cy5qb2luKFwiJlwiKTtcbn1cblxuZnVuY3Rpb24gaXNBbGxvd2VkKGRvbWFpbnM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86JHtkb21haW5zLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuXCIpLnJlcGxhY2UoL1xcKi9nLCBcIlthLXowLTktLl9dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBwYW5lbEFjdGlvbnM/OiBBY3Rpb25EZXNjcmlwdGlvbltdO1xuICAgIGV2ZW50RW1pdHRlcj86IExheW91dEV2ZW50c1N0YXRpYztcbiAgICBlbXBsb3llcklkPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb246IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmcpOiB1bmRlZmluZWQgfCBFbmdpbmVFbnRyeVBvaW50IHtcbiAgICBpZiAoZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIGdsb2JhbFtlbmdpbmVWZXJzaW9uXSAmJiBnbG9iYWxbZW5naW5lVmVyc2lvbl0uZGVmYXVsdDtcbn1cblxuZnVuY3Rpb24gc3RhcnQoXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgb3B0aW9uczogU3RhcnRGb3JtT3B0aW9ucyxcbiAgICBjYWxsYmFjazogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPiA9IGRlZmF1bHRDYWxsYmFja1xuKTogdm9pZCB7XG4gICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICBjb25zdCB7IG5zLCBkcmFmdElkIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFpc0FsbG93ZWQoY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucykpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJkb21haW4udW50cnVzdGVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIWNsaWVudFNldHRpbmdzLmF1dGhvcml6ZWQpIHtcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJ1c2VyLnVuYXV0aGVudGljYXRlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFkcmFmdElkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5kcmFmdElkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH0gZWxzZSBpZiAoIW5zKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwib3B0aW9ucy5ucyBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2Vab25lID0gb3B0aW9ucy5yZXNvdXJjZVpvbmUgPz8gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVzb3VyY2Vab25lXCIpO1xuICAgIGNvbnN0IGNsaWVudERyYWZ0VXJsID0gYnVpbGRVcmwodXJsKGdldENsaWVudERyYWZ0SW5mb1VybCh7IG5zOiBucywgZHJhZnRJZDogZHJhZnRJZCB9KSksIHtcbiAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogUmVxdWVzdEluaXQgPSB7IG1ldGhvZDogXCJHRVRcIiB9O1xuICAgIGlmIChvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmF1dGhlbnRpY2F0aW9uID09PSBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJpbmNsdWRlXCI7XG4gICAgfSBlbHNlIGlmIChcImF1dGhTaWRcIiBpbiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uICYmIG9wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEFVVEguU0lEICR7b3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcIm9taXRcIjtcbiAgICB9XG4gICAgY29uc3QgZmV0Y2hJbXBsID0gb3B0aW9ucy5mZXRjaCA/PyBmZXRjaDtcblxuICAgIGZldGNoSW1wbChjbGllbnREcmFmdFVybCwgcmVxdWVzdE9wdGlvbnMpXG4gICAgICAgIC50aGVuKHggPT4geC5qc29uKCkpXG4gICAgICAgIC50aGVuKChjbGllbnREcmFmdEluZm86IENsaWVudERyYWZ0SW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBjbGllbnREcmFmdEluZm8uZ2Z2O1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uO1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5kZWRTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkOiBjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkLFxuICAgICAgICAgICAgICAgIGNhdWxkcm9uQXBpVXJsOiBjbGllbnRTZXR0aW5ncy5jYXVsZHJvbkFwaVVybCxcbiAgICAgICAgICAgICAgICBpc1Rlc3RTZXJ2ZXI6IGNsaWVudFNldHRpbmdzLmlzVGVzdFNlcnZlcixcbiAgICAgICAgICAgICAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBjbGllbnRTZXR0aW5ncy5yZW5kZXJDYWNoaW5nRm9ySUU4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25PblNlcnZlcjogY2xpZW50U2V0dGluZ3Mubm9ybWFsaXphdGlvbk9uU2VydmVyLFxuICAgICAgICAgICAgICAgIG5vcm1hdGl2ZVVybDogY2xpZW50U2V0dGluZ3Mubm9ybWF0aXZlVXJsLFxuICAgICAgICAgICAgICAgIHJlc291cmNlc1ZlcnNpb246IGNsaWVudFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAga29udHVyRG9tYWluczogY2xpZW50U2V0dGluZ3Mua29udHVyRG9tYWlucyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIC4uLmNsaWVudERyYWZ0SW5mbyxcbiAgICAgICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgICAgICAgICBlbmdpbmVWZXJzaW9uOiBlbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsb2FkRm9ybShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGdmdjogZXh0ZW5kZWRTZXR0aW5ncy5nZnYsXG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVZlcnNpb246IGV4dGVuZGVkU2V0dGluZ3MuZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICB0aGVtZTogZXh0ZW5kZWRTZXR0aW5ncy50aGVtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxvYWRFcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2FkRXJyb3IgfHwgIWdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgZHluYW1pYyBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGdmdiAke2dmdn1gKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uKTtcblxuICAgICAgICAgICAgICAgICAgICByZW5kZXJGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXh0ZW5kZWRTZXR0aW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNBcGk6IG9wdGlvbnMudGVtcGxhdGVzQXBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm06IHJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IENhbmR5Q2xpZW50RXhwb3J0czogQ2FuZHlHbG9iYWxJbmplY3RlZFZhciA9IHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW50cnlQb2ludDoge30sXG4gICAgcGFydGlhbFJlbmRlcmluZ0ZvcklFODogcGFyc2VCb29sKFwie3BhcnRpYWxSZW5kZXJpbmdGb3JJRTh9XCIpLFxuICAgIGtlZm9ybXNVcmw6IFwie2tlZm9ybXNVcmx9XCIsXG59O1xuXG5nbG9iYWwuQ0YgPSBDYW5keUNsaWVudEV4cG9ydHM7XG5cbmV4cG9ydCB7IENhbmR5Q2xpZW50RXhwb3J0cyB9O1xuIiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHtcbiAgdmFyIF9pID0gYXJyID09IG51bGwgPyBudWxsIDogdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuXG4gIGlmIChfaSA9PSBudWxsKSByZXR1cm47XG4gIHZhciBfYXJyID0gW107XG4gIHZhciBfbiA9IHRydWU7XG4gIHZhciBfZCA9IGZhbHNlO1xuXG4gIHZhciBfcywgX2U7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7XG4gICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG4gICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfZCA9IHRydWU7XG4gICAgX2UgPSBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gX2Fycjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudERyYWZ0SW5mb1VybChkcmFmdElkOiBEcmFmdEZ1bGxJZCkge1xuICAgIC8vIE5PVEUg0K3RgtCwINGE0YPQvdC60YbQuNGPINC+0LHRitGP0LLQu9C10L3QsCDQvtGC0LTQtdC70YzQvdC+LCDQuNCx0L4g0L7QvdCwINCy0YXQvtC00LjRgiDQsiDRgdC+0YHRgtCw0LIgY2xpZW50LmpzINC4XG4gICAgLy8g0L3QtSDQtNC+0LvQttC90L4g0L/RgNC+0LjRgdGF0L7QtNC40YLRjCDRg9GC0LXQttC10LvQtdC90LjRjyBjbGllbnQuanMt0LBcbiAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRJZC5uc30vZHJhZnRzLyR7ZHJhZnRJZC5kcmFmdElkfS9jbGllbnQtZHJhZnQtaW5mb2A7XG59XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0VBQ0EsSUFBSUEsQ0FBQSxHQUFzQixDQUFDO0VDRFosU0FBU0MsRUFBZ0JELENBQUEsRUFBS0MsQ0FBQSxFQUFLQyxDQUFBO0lBWWhELE9BWElELENBQUEsSUFBT0QsQ0FBQSxHQUNURyxNQUFBLENBQU9DLGNBQUEsQ0FBZUosQ0FBQSxFQUFLQyxDQUFBLEVBQUs7TUFDOUJJLEtBQUEsRUFBT0gsQ0FBQTtNQUNQSSxVQUFBLEdBQVk7TUFDWkMsWUFBQSxHQUFjO01BQ2RDLFFBQUEsR0FBVTtJQUFBLEtBR1pSLENBQUEsQ0FBSUMsQ0FBQSxJQUFPQyxDQUFBLEVBR05GLENBQ1Q7RUFBQTtFQ2JlLFNBQVNFLEVBQWtCRixDQUFBLEVBQUtDLENBQUE7SUFBQSxDQUNsQyxRQUFQQSxDQUFBLElBQWVBLENBQUEsR0FBTUQsQ0FBQSxDQUFJUyxNQUFBLE1BQVFSLENBQUEsR0FBTUQsQ0FBQSxDQUFJUyxNQUFBO0lBRS9DLEtBQUssSUFBSVAsQ0FBQSxHQUFJLEdBQUdRLENBQUEsR0FBTyxJQUFJQyxLQUFBLENBQU1WLENB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