@getopenpay/openpay-js-react 0.5.2 → 0.5.3-alpha.06a0f22

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 (23) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-ClqPz4cT-B63iamRE.js → Resource-vMTYzHnH-rvlNMnjl.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-Nr_3vHRR-DpwU9Aab.js → SimpleSpanProcessor-Cza16vjV-BxJK0M6w.js} +7 -7
  4. package/dist/{detect-resources-Bqpyh1Oz-DbIsf0pI.js → detect-resources-Ci98P4IY-DDYqc---.js} +7 -7
  5. package/dist/{diag-api-BL9yo0U7-CzLzw4JZ.js → diag-api-DUHYukMW-CSfPAY48.js} +2 -2
  6. package/dist/{index-SXk-qCno-CDmD9jUc.js → index-BDhIvQX0-B_JQNCPs.js} +5 -5
  7. package/dist/{index-CH9cpqGO-V1k-wL1j.js → index-BaTbkF8M-UZLB4k05.js} +6 -6
  8. package/dist/{index-BsUTJmEM-BcWcG78s.js → index-BnnW1rC5-CnjXsIEi.js} +2 -2
  9. package/dist/{index-D13E8mA3.js → index-BxLG8KOU.js} +180 -181
  10. package/dist/{index-De02Z0PM-DxhXBN8Z.js → index-C2IubpCq-DRIrh3js.js} +2 -2
  11. package/dist/{index-C7jh2Wln-B4-4VQCM.js → index-C6ufRvNF-CizjFdpJ.js} +2 -2
  12. package/dist/{index-DQmhSl2i-BNMgdwyf.js → index-D0Vc2R2I-DvaXNNYJ.js} +5 -5
  13. package/dist/{index-DvRkl7fn-DqTHFOHX.js → index-D3XRtQyO-DuEFUy65.js} +5 -5
  14. package/dist/{index-D_nykiTR-C6hMmTZk.js → index-DK5ZdQ5i-C3VM5nh_.js} +6 -6
  15. package/dist/{index-Dmrzgy93-BunD1EqM.js → index-DNntq8aU-CXDCzFwp.js} +2 -2
  16. package/dist/index.d.ts +3 -13
  17. package/dist/index.js +1 -1
  18. package/dist/{metrics-api-Cq7Yy_0G-oH7wSx2L.js → metrics-api-twSlCzy8-BXDlL26U.js} +2 -2
  19. package/dist/{sdk-info-dGKZKiMh-DY-lzyLf.js → sdk-info-BR744-Co-CJxbWmkd.js} +2 -2
  20. package/dist/{url-Cs3e5iPM-IFosTaBW.js → url-vZYDLDqv-D6TOr8OV.js} +2 -2
  21. package/dist/{utils-BSElv7-s-BRESJkjR.js → utils-B87eBo34-CyTUnMYt.js} +2 -2
  22. package/dist/{utils-BMDrIg4l-xbgtXIR8.js → utils-kdGzYc-2-BQl4zHJC.js} +4 -4
  23. package/package.json +1 -1
@@ -3,7 +3,7 @@ import { z as n } from "zod";
3
3
  import Te from "chalk";
4
4
  import { v4 as Ge } from "uuid";
5
5
  import { jsx as he, Fragment as ir } from "react/jsx-runtime";
6
- import { createContext as vi, useContext as bi, useState as Ee, useRef as wi, useMemo as ar, useEffect as fr } from "react";
6
+ import { createContext as vi, useContext as wi, useState as Ee, useRef as bi, useMemo as ar, useEffect as fr } from "react";
7
7
  function Pi(e, t) {
8
8
  var r = Object.setPrototypeOf;
9
9
  r ? r(e, t) : e.__proto__ = t;
@@ -759,8 +759,8 @@ function ma(e, t, r) {
759
759
  }
760
760
  function c(p, y) {
761
761
  o[p] && (i[p] = function(f) {
762
- return new Promise(function(v, w) {
763
- a.push([p, f, v, w]) > 1 || l(p, f);
762
+ return new Promise(function(v, b) {
763
+ a.push([p, f, v, b]) > 1 || l(p, f);
764
764
  });
765
765
  }, y && (i[p] = y(i[p])));
766
766
  }
@@ -957,7 +957,7 @@ var Tr = function(e) {
957
957
  return o.isStopped = !1, r ? (o.destination = r, Kn(r) && r.add(o)) : o.destination = ga, o;
958
958
  }
959
959
  return t.create = function(r, o, i) {
960
- return new br(r, o, i);
960
+ return new wr(r, o, i);
961
961
  }, t.prototype.next = function(r) {
962
962
  this.isStopped || this._next(r);
963
963
  }, t.prototype.error = function(r) {
@@ -1016,7 +1016,7 @@ var _a = function() {
1016
1016
  It(r);
1017
1017
  }
1018
1018
  }, e;
1019
- }(), br = function(e) {
1019
+ }(), wr = function(e) {
1020
1020
  Re(t, e);
1021
1021
  function t(r, o, i) {
1022
1022
  var a = e.call(this) || this, s;
@@ -1057,7 +1057,7 @@ var ga = {
1057
1057
  function va(e) {
1058
1058
  return e;
1059
1059
  }
1060
- function ba(e) {
1060
+ function wa(e) {
1061
1061
  return e.length === 0 ? va : e.length === 1 ? e[0] : function(r) {
1062
1062
  return e.reduce(function(o, i) {
1063
1063
  return i(o);
@@ -1072,7 +1072,7 @@ var Ce = function() {
1072
1072
  var r = new e();
1073
1073
  return r.source = this, r.operator = t, r;
1074
1074
  }, e.prototype.subscribe = function(t, r, o) {
1075
- var i = this, a = Pa(t) ? t : new br(t, r, o);
1075
+ var i = this, a = Pa(t) ? t : new wr(t, r, o);
1076
1076
  return Lt(function() {
1077
1077
  var s = i, c = s.operator, l = s.source;
1078
1078
  a.add(c ? c.call(a, l) : l ? i._subscribe(a) : i._trySubscribe(a));
@@ -1086,7 +1086,7 @@ var Ce = function() {
1086
1086
  }, e.prototype.forEach = function(t, r) {
1087
1087
  var o = this;
1088
1088
  return r = en(r), new r(function(i, a) {
1089
- var s = new br({
1089
+ var s = new wr({
1090
1090
  next: function(c) {
1091
1091
  try {
1092
1092
  t(c);
@@ -1107,7 +1107,7 @@ var Ce = function() {
1107
1107
  }, e.prototype.pipe = function() {
1108
1108
  for (var t = [], r = 0; r < arguments.length; r++)
1109
1109
  t[r] = arguments[r];
1110
- return ba(t)(this);
1110
+ return wa(t)(this);
1111
1111
  }, e.prototype.toPromise = function(t) {
1112
1112
  var r = this;
1113
1113
  return t = en(t), new t(function(o, i) {
@@ -1128,11 +1128,11 @@ function en(e) {
1128
1128
  var t;
1129
1129
  return (t = e ?? Jn.Promise) !== null && t !== void 0 ? t : Promise;
1130
1130
  }
1131
- function wa(e) {
1131
+ function ba(e) {
1132
1132
  return e && z(e.next) && z(e.error) && z(e.complete);
1133
1133
  }
1134
1134
  function Pa(e) {
1135
- return e && e instanceof Tr || wa(e) && Kn(e);
1135
+ return e && e instanceof Tr || ba(e) && Kn(e);
1136
1136
  }
1137
1137
  function Ea(e) {
1138
1138
  return z(e == null ? void 0 : e.lift);
@@ -1603,7 +1603,7 @@ function rs(e, t) {
1603
1603
  if (o == null && i == null)
1604
1604
  throw new TypeError("No timeout provided.");
1605
1605
  return Sa(function(_, h) {
1606
- var p, y, f = null, v = 0, w = function(b) {
1606
+ var p, y, f = null, v = 0, b = function(w) {
1607
1607
  y = Ja(h, l, function() {
1608
1608
  try {
1609
1609
  p.unsubscribe(), $a(s({
@@ -1614,13 +1614,13 @@ function rs(e, t) {
1614
1614
  } catch (S) {
1615
1615
  h.error(S);
1616
1616
  }
1617
- }, b);
1617
+ }, w);
1618
1618
  };
1619
- p = _.subscribe(Ca(h, function(b) {
1620
- y == null || y.unsubscribe(), v++, h.next(f = b), i > 0 && w(i);
1619
+ p = _.subscribe(Ca(h, function(w) {
1620
+ y == null || y.unsubscribe(), v++, h.next(f = w), i > 0 && b(i);
1621
1621
  }, void 0, void 0, function() {
1622
1622
  y != null && y.closed || y == null || y.unsubscribe(), f = null;
1623
- })), !v && w(o != null ? typeof o == "number" ? o : +o - l.now() : i);
1623
+ })), !v && b(o != null ? typeof o == "number" ? o : +o - l.now() : i);
1624
1624
  });
1625
1625
  }
1626
1626
  function ns(e) {
@@ -1976,7 +1976,7 @@ n.object({
1976
1976
  environment: n.string()
1977
1977
  })
1978
1978
  });
1979
- var vs = /* @__PURE__ */ ((e) => (e.Local = "local", e.Development = "development", e.Staging = "staging", e.Demo = "demo", e.Production = "production", e))(vs || {}), bs = /* @__PURE__ */ ((e) => (e.METHOD_CREATION_FAILED = "methodCreationFailed", e.INSUFFICIENT_BALANCE = "insufficientBalance", e.INSUFFICIENT_AUTHORIZATION = "insufficientAuthorization", e.SIGNED_MESSAGE_REQUIRED = "signedMessageRequired", e.CUSTOMER_CREATION_FAILED = "customerCreationFailed", e.PAYMENT_FAILED = "paymentFailed", e.TRANSACTION_FAILED = "transactionFailed", e))(bs || {}), ws = /* @__PURE__ */ ((e) => (e.IDLE = "idle", e.CONFIRMING_BALANCE = "confirmingBalance", e.CONFIRMING_AUTHORIZATION = "confirmingAuthorization", e.UPDATING_AUTHORIZATION = "updatingAuthorization", e.SIGNING_MESSAGE = "signingMessage", e.CREATING_CUSTOMER = "creatingCustomer", e.CREATING_PAYMENT_METHOD = "creatingPaymentMethod", e.PROCESSING_PAYMENT = "processingPayment", e.CREATING_PAYMENT = "creatingPayment", e.CONFIRMING_PAYMENT = "confirmingPayment", e.COMPLETE = "complete", e.AUTHORIZED = "authorized", e))(ws || {});
1979
+ var vs = /* @__PURE__ */ ((e) => (e.Local = "local", e.Development = "development", e.Staging = "staging", e.Demo = "demo", e.Production = "production", e))(vs || {}), ws = /* @__PURE__ */ ((e) => (e.METHOD_CREATION_FAILED = "methodCreationFailed", e.INSUFFICIENT_BALANCE = "insufficientBalance", e.INSUFFICIENT_AUTHORIZATION = "insufficientAuthorization", e.SIGNED_MESSAGE_REQUIRED = "signedMessageRequired", e.CUSTOMER_CREATION_FAILED = "customerCreationFailed", e.PAYMENT_FAILED = "paymentFailed", e.TRANSACTION_FAILED = "transactionFailed", e))(ws || {}), bs = /* @__PURE__ */ ((e) => (e.IDLE = "idle", e.CONFIRMING_BALANCE = "confirmingBalance", e.CONFIRMING_AUTHORIZATION = "confirmingAuthorization", e.UPDATING_AUTHORIZATION = "updatingAuthorization", e.SIGNING_MESSAGE = "signingMessage", e.CREATING_CUSTOMER = "creatingCustomer", e.CREATING_PAYMENT_METHOD = "creatingPaymentMethod", e.PROCESSING_PAYMENT = "processingPayment", e.CREATING_PAYMENT = "creatingPayment", e.CONFIRMING_PAYMENT = "confirmingPayment", e.COMPLETE = "complete", e.AUTHORIZED = "authorized", e))(bs || {});
1980
1980
  const Ps = {
1981
1981
  isAvailable: !1,
1982
1982
  isLoading: !0,
@@ -2055,7 +2055,7 @@ Pe.NOOP = () => {
2055
2055
  const r = new Pe();
2056
2056
  return r.setCallbacks(sn.parse(t)), r;
2057
2057
  };
2058
- let wr = Pe;
2058
+ let br = Pe;
2059
2059
  var to = /* @__PURE__ */ ((e) => (e.pockytPaypal = "pockyt-paypal", e.applePay = "apple-pay", e.googlePay = "google-pay", e.loopCrypto = "loop-crypto", e.paypal = "paypal", e.airwallexGooglePay = "airwallex-google-pay", e.airwallexApplePay = "airwallex-apple-pay", e.authorizenetGooglePay = "authorizenet-google-pay", e.authorizenetApplePay = "authorizenet-apple-pay", e.adyenGooglePay = "adyen-google-pay", e.adyenApplePay = "adyen-apple-pay", e))(to || {});
2060
2060
  n.nativeEnum(to);
2061
2061
  const Ss = (e) => JSON.stringify(e), cn = {
@@ -2140,19 +2140,19 @@ const Ss = (e) => JSON.stringify(e), cn = {
2140
2140
  },
2141
2141
  baseUrl: ""
2142
2142
  }), Ts = () => {
2143
- const e = bi(ro);
2143
+ const e = wi(ro);
2144
2144
  if (!e)
2145
2145
  throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
2146
2146
  return e;
2147
2147
  }, Qt = (e) => {
2148
- const { elementType: t, styles: r } = e, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = Ts(), u = t.toLowerCase(), [d, _] = Ee(!1), h = wi(null), p = ar(() => r ? Ss(r) : "", [r]), y = ar(() => ({
2148
+ const { elementType: t, styles: r } = e, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = Ts(), u = t.toLowerCase(), [d, _] = Ee(!1), h = bi(null), p = ar(() => r ? Ss(r) : "", [r]), y = ar(() => ({
2149
2149
  border: "none",
2150
2150
  width: "100%",
2151
2151
  height: a
2152
2152
  }), [a]), f = ar(() => {
2153
2153
  if (!s || !i) return "";
2154
- const w = new URLSearchParams();
2155
- return w.append("referer", i), w.append("styles", p), w.append("formId", o), w.append("secureToken", s), w.toString();
2154
+ const b = new URLSearchParams();
2155
+ return b.append("referer", i), b.append("styles", p), b.append("formId", o), b.append("secureToken", s), b.toString();
2156
2156
  }, [p, o, i, s]);
2157
2157
  if (fr(() => _(!0), []), fr(() => {
2158
2158
  !h.current || !d || c(t, h.current);
@@ -2216,8 +2216,8 @@ var m = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "last
2216
2216
  const no = n.nativeEnum(m);
2217
2217
  var oo = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(oo || {});
2218
2218
  const io = n.nativeEnum(oo), ao = n.union([no, io]);
2219
- var we = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(we || {});
2220
- const Os = n.nativeEnum(we), Wt = n.object({
2219
+ var be = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e.CDE_BRIDGE = "cde-bridge", e))(be || {});
2220
+ const Os = n.nativeEnum(be), Wt = n.object({
2221
2221
  provider: n.string(),
2222
2222
  processor_name: F(n.string()),
2223
2223
  metadata: F(n.record(n.string(), n.any()))
@@ -2631,14 +2631,14 @@ const vc = n.object({
2631
2631
  new_customer_first_name: n.string().optional(),
2632
2632
  new_customer_address: Vt,
2633
2633
  new_customer_shipping_address: Vt.optional()
2634
- }), bc = n.object({
2634
+ }), wc = n.object({
2635
2635
  price_id: n.string(),
2636
2636
  quantity: n.number().int()
2637
2637
  }), yo = n.object({
2638
- line_items: n.array(bc),
2638
+ line_items: n.array(wc),
2639
2639
  promotion_code: n.string().optional(),
2640
2640
  displayed_total_amount_atom: n.number().int()
2641
- }), wc = n.object({
2641
+ }), bc = n.object({
2642
2642
  processor_specific_metadata: E(n.record(n.string(), n.any()))
2643
2643
  });
2644
2644
  n.object({
@@ -2649,7 +2649,7 @@ n.object({
2649
2649
  use_pay_first_flow: n.boolean().optional(),
2650
2650
  pay_first_flow_cart_info: yo.optional(),
2651
2651
  customer_language: n.string().optional()
2652
- }).extend(vc.shape).extend(wc.shape);
2652
+ }).extend(vc.shape).extend(bc.shape);
2653
2653
  const _o = n.object({
2654
2654
  required_user_actions: n.array(n.record(n.string(), n.any())),
2655
2655
  checkout_attempt_id: E(n.string())
@@ -2993,8 +2993,8 @@ function Gc(e, t, r) {
2993
2993
  }
2994
2994
  function c(p, y) {
2995
2995
  o[p] && (i[p] = function(f) {
2996
- return new Promise(function(v, w) {
2997
- a.push([p, f, v, w]) > 1 || l(p, f);
2996
+ return new Promise(function(v, b) {
2997
+ a.push([p, f, v, b]) > 1 || l(p, f);
2998
2998
  });
2999
2999
  }, y && (i[p] = y(i[p])));
3000
3000
  }
@@ -3150,13 +3150,13 @@ var St = function() {
3150
3150
  return t.closed = !0, t;
3151
3151
  }(), e;
3152
3152
  }(), vo = St.EMPTY;
3153
- function bo(e) {
3153
+ function wo(e) {
3154
3154
  return e instanceof St || e && "closed" in e && H(e.remove) && H(e.add) && H(e.unsubscribe);
3155
3155
  }
3156
3156
  function dn(e) {
3157
3157
  H(e) ? e() : e.unsubscribe();
3158
3158
  }
3159
- var wo = {
3159
+ var bo = {
3160
3160
  onUnhandledError: null,
3161
3161
  onStoppedNotification: null,
3162
3162
  Promise: void 0,
@@ -3187,7 +3187,7 @@ var Lr = function(e) {
3187
3187
  Le(t, e);
3188
3188
  function t(r) {
3189
3189
  var o = e.call(this) || this;
3190
- return o.isStopped = !1, r ? (o.destination = r, bo(r) && r.add(o)) : o.destination = Bc, o;
3190
+ return o.isStopped = !1, r ? (o.destination = r, wo(r) && r.add(o)) : o.destination = Bc, o;
3191
3191
  }
3192
3192
  return t.create = function(r, o, i) {
3193
3193
  return new Sr(r, o, i);
@@ -3261,7 +3261,7 @@ var zc = function() {
3261
3261
  };
3262
3262
  else {
3263
3263
  var c;
3264
- a && wo.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
3264
+ a && bo.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
3265
3265
  return a.unsubscribe();
3266
3266
  }, s = {
3267
3267
  next: r.next && ur(r.next, c),
@@ -3359,13 +3359,13 @@ var ke = function() {
3359
3359
  }();
3360
3360
  function mn(e) {
3361
3361
  var t;
3362
- return (t = e ?? wo.Promise) !== null && t !== void 0 ? t : Promise;
3362
+ return (t = e ?? bo.Promise) !== null && t !== void 0 ? t : Promise;
3363
3363
  }
3364
3364
  function Kc(e) {
3365
3365
  return e && H(e.next) && H(e.error) && H(e.complete);
3366
3366
  }
3367
3367
  function Jc(e) {
3368
- return e && e instanceof Lr || Kc(e) && bo(e);
3368
+ return e && e instanceof Lr || Kc(e) && wo(e);
3369
3369
  }
3370
3370
  function Qc(e) {
3371
3371
  return H(e == null ? void 0 : e.lift);
@@ -3685,11 +3685,11 @@ function fl(e) {
3685
3685
  if (sl(e))
3686
3686
  return vl(e);
3687
3687
  if (cl(e))
3688
- return bl(e);
3688
+ return wl(e);
3689
3689
  if (ul(e))
3690
3690
  return So(e);
3691
3691
  if (hl(e))
3692
- return wl(e);
3692
+ return bl(e);
3693
3693
  if (_l(e))
3694
3694
  return Pl(e);
3695
3695
  }
@@ -3710,7 +3710,7 @@ function vl(e) {
3710
3710
  t.complete();
3711
3711
  });
3712
3712
  }
3713
- function bl(e) {
3713
+ function wl(e) {
3714
3714
  return new ke(function(t) {
3715
3715
  e.then(function(r) {
3716
3716
  t.closed || (t.next(r), t.complete());
@@ -3719,7 +3719,7 @@ function bl(e) {
3719
3719
  }).then(null, Po);
3720
3720
  });
3721
3721
  }
3722
- function wl(e) {
3722
+ function bl(e) {
3723
3723
  return new ke(function(t) {
3724
3724
  var r, o;
3725
3725
  try {
@@ -3836,7 +3836,7 @@ function Nl(e, t) {
3836
3836
  if (o == null && i == null)
3837
3837
  throw new TypeError("No timeout provided.");
3838
3838
  return Wc(function(_, h) {
3839
- var p, y, f = null, v = 0, w = function(b) {
3839
+ var p, y, f = null, v = 0, b = function(w) {
3840
3840
  y = Sl(h, l, function() {
3841
3841
  try {
3842
3842
  p.unsubscribe(), fl(s({
@@ -3847,13 +3847,13 @@ function Nl(e, t) {
3847
3847
  } catch (S) {
3848
3848
  h.error(S);
3849
3849
  }
3850
- }, b);
3850
+ }, w);
3851
3851
  };
3852
- p = _.subscribe(Xc(h, function(b) {
3853
- y == null || y.unsubscribe(), v++, h.next(f = b), i > 0 && w(i);
3852
+ p = _.subscribe(Xc(h, function(w) {
3853
+ y == null || y.unsubscribe(), v++, h.next(f = w), i > 0 && b(i);
3854
3854
  }, void 0, void 0, function() {
3855
3855
  y != null && y.closed || y == null || y.unsubscribe(), f = null;
3856
- })), !v && w(o != null ? typeof o == "number" ? o : +o - l.now() : i);
3856
+ })), !v && b(o != null ? typeof o == "number" ? o : +o - l.now() : i);
3857
3857
  });
3858
3858
  }
3859
3859
  function Rl(e) {
@@ -4068,8 +4068,8 @@ const ql = n.object({
4068
4068
  brl: "brl"
4069
4069
  }, rr = async (e) => {
4070
4070
  for (let t = 0; t < 10; t++)
4071
- bn() || await nr(500);
4072
- if (!bn())
4071
+ wn() || await nr(500);
4072
+ if (!wn())
4073
4073
  throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
4074
4074
  return new Stripe(e);
4075
4075
  }, zl = async (e, t) => {
@@ -4096,7 +4096,7 @@ const ql = n.object({
4096
4096
  });
4097
4097
  }, nr = (e) => new Promise((t) => {
4098
4098
  setTimeout(t, e);
4099
- }), bn = () => "Stripe" in window, Bl = async (e) => new Promise((t, r) => {
4099
+ }), wn = () => "Stripe" in window, Bl = async (e) => new Promise((t, r) => {
4100
4100
  try {
4101
4101
  e.on("paymentmethod", async (o) => {
4102
4102
  console.log("paymentmethod EVT:: ", o), t(o);
@@ -4128,9 +4128,9 @@ const ql = n.object({
4128
4128
  `${((r = a.error) == null ? void 0 : r.message) ?? ((i = (o = a.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : i.message) ?? "Payment failed, please click submit again to pay."}`
4129
4129
  );
4130
4130
  };
4131
- var Kl = typeof globalThis == "object" ? globalThis : typeof self == "object" ? self : typeof window == "object" ? window : typeof global == "object" ? global : {}, De = "1.9.0", wn = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
4131
+ var Kl = typeof globalThis == "object" ? globalThis : typeof self == "object" ? self : typeof window == "object" ? window : typeof global == "object" ? global : {}, De = "1.9.0", bn = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
4132
4132
  function Jl(e) {
4133
- var t = /* @__PURE__ */ new Set([e]), r = /* @__PURE__ */ new Set(), o = e.match(wn);
4133
+ var t = /* @__PURE__ */ new Set([e]), r = /* @__PURE__ */ new Set(), o = e.match(bn);
4134
4134
  if (!o)
4135
4135
  return function() {
4136
4136
  return !1;
@@ -4156,7 +4156,7 @@ function Jl(e) {
4156
4156
  return !0;
4157
4157
  if (r.has(c))
4158
4158
  return !1;
4159
- var l = c.match(wn);
4159
+ var l = c.match(bn);
4160
4160
  if (!l)
4161
4161
  return a(c);
4162
4162
  var u = {
@@ -4185,7 +4185,7 @@ function Mr(e, t, r, o) {
4185
4185
  }
4186
4186
  return a[e] = t, r.debug("@opentelemetry/api: Registered a global for " + e + " v" + De + "."), !0;
4187
4187
  }
4188
- function bt(e) {
4188
+ function wt(e) {
4189
4189
  var t, r, o = (t = vt[gt]) === null || t === void 0 ? void 0 : t.version;
4190
4190
  if (!(!o || !Ql(o)))
4191
4191
  return (r = vt[gt]) === null || r === void 0 ? void 0 : r[e];
@@ -4245,7 +4245,7 @@ var Xl = function(e, t) {
4245
4245
  }()
4246
4246
  );
4247
4247
  function lt(e, t, r) {
4248
- var o = bt("diag");
4248
+ var o = wt("diag");
4249
4249
  if (o)
4250
4250
  return r.unshift(t), o[e].apply(o, eu([], Xl(r), !1));
4251
4251
  }
@@ -4296,7 +4296,7 @@ var nu = function(e, t) {
4296
4296
  return function() {
4297
4297
  for (var a = [], s = 0; s < arguments.length; s++)
4298
4298
  a[s] = arguments[s];
4299
- var c = bt("diag");
4299
+ var c = wt("diag");
4300
4300
  if (c)
4301
4301
  return c[i].apply(c, ou([], nu(a), !1));
4302
4302
  };
@@ -4310,7 +4310,7 @@ var nu = function(e, t) {
4310
4310
  typeof a == "number" && (a = {
4311
4311
  logLevel: a
4312
4312
  });
4313
- var d = bt("diag"), _ = ru((c = a.logLevel) !== null && c !== void 0 ? c : X.INFO, i);
4313
+ var d = wt("diag"), _ = ru((c = a.logLevel) !== null && c !== void 0 ? c : X.INFO, i);
4314
4314
  if (d && !a.suppressOverrideMessage) {
4315
4315
  var h = (l = new Error().stack) !== null && l !== void 0 ? l : "<failed to generate stacktrace>";
4316
4316
  d.warn("Current logger will be overwritten from " + h), _.warn("Current logger will overwrite one already registered from " + h);
@@ -4425,7 +4425,7 @@ var su = (
4425
4425
  }, e.prototype.bind = function(t, r) {
4426
4426
  return this._getContextManager().bind(t, r);
4427
4427
  }, e.prototype._getContextManager = function() {
4428
- return bt(pr) || hu;
4428
+ return wt(pr) || hu;
4429
4429
  }, e.prototype.disable = function() {
4430
4430
  this._getContextManager().disable(), jr(pr, Bt.instance());
4431
4431
  }, e;
@@ -4486,15 +4486,15 @@ function No(e) {
4486
4486
  var t;
4487
4487
  return (t = Fr(e)) === null || t === void 0 ? void 0 : t.spanContext();
4488
4488
  }
4489
- var vu = /^([0-9a-f]{32})$/i, bu = /^[0-9a-f]{16}$/i;
4490
- function wu(e) {
4489
+ var vu = /^([0-9a-f]{32})$/i, wu = /^[0-9a-f]{16}$/i;
4490
+ function bu(e) {
4491
4491
  return vu.test(e) && e !== To;
4492
4492
  }
4493
4493
  function Pu(e) {
4494
- return bu.test(e) && e !== Ao;
4494
+ return wu.test(e) && e !== Ao;
4495
4495
  }
4496
4496
  function Ro(e) {
4497
- return wu(e.traceId) && Pu(e.spanId);
4497
+ return bu(e.traceId) && Pu(e.spanId);
4498
4498
  }
4499
4499
  function Eu(e) {
4500
4500
  return new yt(e);
@@ -4569,10 +4569,10 @@ var Cu = new Lo(), ku = (
4569
4569
  return (i = this._delegate) === null || i === void 0 ? void 0 : i.getTracer(t, r, o);
4570
4570
  }, e;
4571
4571
  }()
4572
- ), wt;
4572
+ ), bt;
4573
4573
  (function(e) {
4574
4574
  e[e.INTERNAL = 0] = "INTERNAL", e[e.SERVER = 1] = "SERVER", e[e.CLIENT = 2] = "CLIENT", e[e.PRODUCER = 3] = "PRODUCER", e[e.CONSUMER = 4] = "CONSUMER";
4575
- })(wt || (wt = {}));
4575
+ })(bt || (bt = {}));
4576
4576
  var Ne;
4577
4577
  (function(e) {
4578
4578
  e[e.UNSET = 0] = "UNSET", e[e.OK = 1] = "OK", e[e.ERROR = 2] = "ERROR";
@@ -4589,7 +4589,7 @@ var Je = Dr.getInstance(), hr = "trace", Tu = (
4589
4589
  var r = Mr(hr, this._proxyTracerProvider, Bt.instance());
4590
4590
  return r && this._proxyTracerProvider.setDelegate(t), r;
4591
4591
  }, e.prototype.getTracerProvider = function() {
4592
- return bt(hr) || this._proxyTracerProvider;
4592
+ return wt(hr) || this._proxyTracerProvider;
4593
4593
  }, e.prototype.getTracer = function(t, r) {
4594
4594
  return this.getTracerProvider().getTracer(t, r);
4595
4595
  }, e.prototype.disable = function() {
@@ -4601,7 +4601,7 @@ const Nu = async (e, t, r) => {
4601
4601
  const o = tt.getTracer("openpay-js"), i = Je.active(), a = o.startSpan(
4602
4602
  `cde.${t.type}`,
4603
4603
  {
4604
- kind: wt.CLIENT,
4604
+ kind: bt.CLIENT,
4605
4605
  attributes: {
4606
4606
  "message.type": t.type,
4607
4607
  ...e.tracingContext && {
@@ -4636,7 +4636,7 @@ const Nu = async (e, t, r) => {
4636
4636
  const r = tt.getTracer("openpay-js"), o = Je.active(), i = r.startSpan(
4637
4637
  `form.${e.spanName}`,
4638
4638
  {
4639
- kind: wt.CLIENT,
4639
+ kind: bt.CLIENT,
4640
4640
  attributes: {
4641
4641
  "ojs.checkoutSecureToken": e.checkoutSecureToken,
4642
4642
  "ojs.deviceToken": e.deviceToken,
@@ -5398,7 +5398,7 @@ const cd = ({
5398
5398
  processor_account_name: n.string(),
5399
5399
  google_pay_merchant_id: n.string().nullish()
5400
5400
  })
5401
- }), { log__: vd, err__: bd } = x("common-cc"), wd = ({
5401
+ }), { log__: vd, err__: wd } = x("common-cc"), bd = ({
5402
5402
  require_zip_code: e,
5403
5403
  require_full_billing_address: t,
5404
5404
  require_full_shipping_address: r,
@@ -5416,14 +5416,14 @@ const cd = ({
5416
5416
  }
5417
5417
  }
5418
5418
  e[m.IS_SHIPPING_SAME_AS_BILLING] = !!e[m.IS_SHIPPING_SAME_AS_BILLING], e[m.IS_SHIPPING_SAME_AS_BILLING] && (e[m.SHIPPING_LINE1] = e[m.LINE1], e[m.SHIPPING_LINE2] = e[m.LINE2], e[m.SHIPPING_LINE3] = e[m.LINE3], e[m.SHIPPING_CITY] = e[m.CITY], e[m.SHIPPING_STATE] = e[m.STATE], e[m.SHIPPING_COUNTRY] = e[m.COUNTRY], e[m.SHIPPING_ZIP_CODE] = e[m.ZIP_CODE]);
5419
- const o = wd(r).safeParse(e);
5419
+ const o = bd(r).safeParse(e);
5420
5420
  if (!o.success) {
5421
5421
  const i = o.error.format(), a = Wu(i), s = Object.keys(a);
5422
5422
  for (let c = 0; c < s.length; c++) {
5423
5423
  const l = s[c], u = a[l];
5424
5424
  t(l, u, l);
5425
5425
  }
5426
- throw bd("Got validation errors in non-CDE form fields", a), new Error("Almost there! Just a few things highlighted above to fix before you can submit.");
5426
+ throw wd("Got validation errors in non-CDE form fields", a), new Error("Almost there! Just a few things highlighted above to fix before you can submit.");
5427
5427
  }
5428
5428
  return o.data;
5429
5429
  }, { log__: Ed, err__: Sd } = x("common-cc"), te = Pd, ni = (e, t) => {
@@ -5586,29 +5586,29 @@ const { log__: dt, err__: oi } = x("adyen-apple-pay"), Ad = Ie(
5586
5586
  prefill: tr(d, ["brand"]),
5587
5587
  overridePaymentRequest: c
5588
5588
  }), new Promise((f, v) => {
5589
- const w = () => {
5589
+ const b = () => {
5590
5590
  dt("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
5591
5591
  };
5592
- p.onvalidatemerchant = async (b) => {
5592
+ p.onvalidatemerchant = async (w) => {
5593
5593
  try {
5594
- await kd(b, y);
5594
+ await kd(w, y);
5595
5595
  } catch (S) {
5596
5596
  v(S);
5597
5597
  }
5598
5598
  }, p.onpaymentmethodselected = () => {
5599
- const b = {
5599
+ const w = {
5600
5600
  newTotal: { ...h.total }
5601
5601
  };
5602
- p.completePaymentMethodSelection(b);
5603
- }, p.onpaymentauthorized = async (b) => {
5602
+ p.completePaymentMethodSelection(w);
5603
+ }, p.onpaymentauthorized = async (w) => {
5604
5604
  g("apple_pay_payment_authorized");
5605
5605
  try {
5606
- const S = await Id(b, y);
5606
+ const S = await Id(w, y);
5607
5607
  f(S);
5608
5608
  } catch (S) {
5609
5609
  v(S);
5610
5610
  }
5611
- }, p.oncancel = w, p.begin();
5611
+ }, p.oncancel = b, p.begin();
5612
5612
  }).catch((f) => {
5613
5613
  throw oi("Apple Pay payment error", f), g("apple_pay_payment_error", {
5614
5614
  error: f
@@ -5768,15 +5768,15 @@ const Zr = async (e) => await Co(e) === "prod" ? "PRODUCTION" : "TEST", st = asy
5768
5768
  }) => {
5769
5769
  var a, s, c, l, u, d, _, h, p;
5770
5770
  me("Starting Google Pay flow...");
5771
- const y = B(e.checkoutPaymentMethods, ri), { initialPreview: f, overridePaymentRequest: v } = i, w = y.metadata;
5772
- if (!w.processor_account_id)
5771
+ const y = B(e.checkoutPaymentMethods, ri), { initialPreview: f, overridePaymentRequest: v } = i, b = y.metadata;
5772
+ if (!b.processor_account_id)
5773
5773
  throw new Error("No gateway merchant ID found in processor account");
5774
- const b = e.anyCdeConnection, S = await D(b), L = at({
5774
+ const w = e.anyCdeConnection, S = await D(w), L = at({
5775
5775
  prefill: S,
5776
5776
  gateway: "adyen",
5777
- gatewayMerchantId: w.processor_account_id,
5778
- merchantName: w.processor_account_name,
5779
- merchantId: w.google_pay_merchant_id ?? "",
5777
+ gatewayMerchantId: b.processor_account_id,
5778
+ merchantName: b.processor_account_name,
5779
+ merchantId: b.google_pay_merchant_id ?? "",
5780
5780
  initialPreview: f,
5781
5781
  overridePaymentRequest: v
5782
5782
  });
@@ -5798,7 +5798,7 @@ const Zr = async (e) => await Co(e) === "prod" ? "PRODUCTION" : "TEST", st = asy
5798
5798
  ...ae
5799
5799
  }), !((s = (a = N.paymentMethodData) == null ? void 0 : a.tokenizationData) != null && s.token))
5800
5800
  throw new Error("No payment token received from Google Pay");
5801
- const Oe = await xe(b, {
5801
+ const Oe = await xe(w, {
5802
5802
  payment_provider: t.provider,
5803
5803
  checkout_payment_method: t,
5804
5804
  new_customer_email: ae[m.EMAIL],
@@ -5808,7 +5808,7 @@ const Zr = async (e) => await Co(e) === "prod" ? "PRODUCTION" : "TEST", st = asy
5808
5808
  new_customer_shipping_address: _e(ae, S.checkout_settings)
5809
5809
  }), se = ii(Oe);
5810
5810
  me("Start flow next actions", se);
5811
- let ce = await Y(b, {
5811
+ let ce = await Y(w, {
5812
5812
  secure_token: S.token,
5813
5813
  processor_specific_metadata: {
5814
5814
  payment_provider: t.provider,
@@ -5832,7 +5832,7 @@ const Zr = async (e) => await Co(e) === "prod" ? "PRODUCTION" : "TEST", st = asy
5832
5832
  if (ct === G.FAILURE)
5833
5833
  throw new Error("3DS verification failed");
5834
5834
  }
5835
- if (re && !le && (ce = await Y(b, {
5835
+ if (re && !le && (ce = await Y(w, {
5836
5836
  secure_token: S.token,
5837
5837
  their_pm_id: re.their_pm_id,
5838
5838
  processor_specific_metadata: {
@@ -5842,7 +5842,7 @@ const Zr = async (e) => await Co(e) === "prod" ? "PRODUCTION" : "TEST", st = asy
5842
5842
  throw new Error("No payment method ID found");
5843
5843
  return qe({
5844
5844
  logPrefix: "adyen-googlepay",
5845
- anyCdeConnection: b,
5845
+ anyCdeConnection: w,
5846
5846
  checkoutPaymentMethod: t,
5847
5847
  requiredFormFields: ae,
5848
5848
  confirmResult: ce,
@@ -6041,24 +6041,24 @@ const { log__: pt, err__: ai } = x("awx-apple-pay"), Md = Ie(
6041
6041
  prefill: tr(d, ["brand"]),
6042
6042
  overridePaymentRequest: c
6043
6043
  }), new Promise((f, v) => {
6044
- const w = () => {
6044
+ const b = () => {
6045
6045
  pt("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
6046
6046
  };
6047
- p.oncancel = w, p.onvalidatemerchant = async (b) => {
6047
+ p.oncancel = b, p.onvalidatemerchant = async (w) => {
6048
6048
  try {
6049
- await Ld(b, y);
6049
+ await Ld(w, y);
6050
6050
  } catch (S) {
6051
6051
  v(S);
6052
6052
  }
6053
6053
  }, p.onpaymentmethodselected = () => {
6054
- const b = {
6054
+ const w = {
6055
6055
  newTotal: { ...h.total }
6056
6056
  };
6057
- p.completePaymentMethodSelection(b);
6058
- }, p.onpaymentauthorized = async (b) => {
6057
+ p.completePaymentMethodSelection(w);
6058
+ }, p.onpaymentauthorized = async (w) => {
6059
6059
  g("apple_pay_payment_authorized");
6060
6060
  try {
6061
- const S = await Od(b, y);
6061
+ const S = await Od(w, y);
6062
6062
  f(S);
6063
6063
  } catch (S) {
6064
6064
  v(S);
@@ -6147,8 +6147,8 @@ const { log__: pt, err__: ai } = x("awx-apple-pay"), Md = Ie(
6147
6147
  const h = B(e.checkoutPaymentMethods, Ko), { initialPreview: p, overridePaymentRequest: y } = i, f = h.metadata;
6148
6148
  if (!f.processor_account_id)
6149
6149
  throw new Error("No gateway merchant ID found in processor account");
6150
- const v = e.anyCdeConnection, w = await D(v), b = at({
6151
- prefill: w,
6150
+ const v = e.anyCdeConnection, b = await D(v), w = at({
6151
+ prefill: b,
6152
6152
  gateway: "airwallex",
6153
6153
  gatewayMerchantId: f.processor_account_id,
6154
6154
  merchantName: f.processor_account_name,
@@ -6158,12 +6158,12 @@ const { log__: pt, err__: ai } = x("awx-apple-pay"), Md = Ie(
6158
6158
  });
6159
6159
  g("google_pay_flow_started", {
6160
6160
  processor_name: h.processor_name,
6161
- prefill: tr(w, ["brand"]),
6161
+ prefill: tr(b, ["brand"]),
6162
6162
  overridePaymentRequest: y
6163
6163
  });
6164
- const S = await st(e.baseUrl, b);
6164
+ const S = await st(e.baseUrl, w);
6165
6165
  try {
6166
- const L = await S.loadPaymentData(b);
6166
+ const L = await S.loadPaymentData(w);
6167
6167
  oe("Google Pay Payment data", L);
6168
6168
  const C = Kr(r, L), N = te(
6169
6169
  C,
@@ -6183,12 +6183,12 @@ const { log__: pt, err__: ai } = x("awx-apple-pay"), Md = Ie(
6183
6183
  new_customer_first_name: N[m.FIRST_NAME],
6184
6184
  new_customer_last_name: N[m.LAST_NAME],
6185
6185
  new_customer_address: ye(N),
6186
- new_customer_shipping_address: _e(N, w.checkout_settings),
6186
+ new_customer_shipping_address: _e(N, b.checkout_settings),
6187
6187
  customer_language: Ve()
6188
6188
  }), Oe = ii(ae);
6189
6189
  oe("Start flow next actions", Oe);
6190
6190
  let se = await Y(v, {
6191
- secure_token: w.token,
6191
+ secure_token: b.token,
6192
6192
  processor_specific_metadata: {
6193
6193
  payment_provider: t.provider,
6194
6194
  // GooglePay's encrypted_payment_token provided to verify the consent first
@@ -6219,7 +6219,7 @@ const { log__: pt, err__: ai } = x("awx-apple-pay"), Md = Ie(
6219
6219
  throw new Error("3DS verification failed");
6220
6220
  }
6221
6221
  if (le && !ce && (se = await Y(v, {
6222
- secure_token: w.token,
6222
+ secure_token: b.token,
6223
6223
  their_pm_id: le.their_pm_id,
6224
6224
  processor_specific_metadata: {
6225
6225
  payment_provider: t.provider,
@@ -6404,24 +6404,24 @@ const { log__: Mt, err__: li } = x("authnet-applepay"), qd = Ie(
6404
6404
  return new Promise((f, v) => {
6405
6405
  p.oncancel = () => {
6406
6406
  Mt("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
6407
- }, p.onvalidatemerchant = async (w) => {
6407
+ }, p.onvalidatemerchant = async (b) => {
6408
6408
  try {
6409
- await Fd(w, y);
6410
- } catch (b) {
6411
- v(b);
6409
+ await Fd(b, y);
6410
+ } catch (w) {
6411
+ v(w);
6412
6412
  }
6413
6413
  }, p.onpaymentmethodselected = () => {
6414
- const w = {
6414
+ const b = {
6415
6415
  newTotal: h.total
6416
6416
  };
6417
- p.completePaymentMethodSelection(w);
6418
- }, p.onpaymentauthorized = async (w) => {
6417
+ p.completePaymentMethodSelection(b);
6418
+ }, p.onpaymentauthorized = async (b) => {
6419
6419
  g("apple_pay_payment_authorized");
6420
6420
  try {
6421
- const b = await Gd(w, y);
6422
- f(b);
6423
- } catch (b) {
6424
- v(b);
6421
+ const w = await Gd(b, y);
6422
+ f(w);
6423
+ } catch (w) {
6424
+ v(w);
6425
6425
  }
6426
6426
  }, p.begin();
6427
6427
  }).catch((f) => {
@@ -6522,9 +6522,9 @@ const { log__: Mt, err__: li } = x("authnet-applepay"), qd = Ie(
6522
6522
  try {
6523
6523
  const v = await f.loadPaymentData(y);
6524
6524
  je("Google Pay Payment data", v);
6525
- const w = Kr(t, v), b = te(w, o.get.onValidationError);
6525
+ const b = Kr(t, v), w = te(b, o.get.onValidationError);
6526
6526
  g("billing_details_received", {
6527
- ...b
6527
+ ...w
6528
6528
  });
6529
6529
  const S = (s = (a = v.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
6530
6530
  if (!S)
@@ -6532,11 +6532,11 @@ const { log__: Mt, err__: li } = x("authnet-applepay"), qd = Ie(
6532
6532
  const L = await xe(h, {
6533
6533
  payment_provider: r.provider,
6534
6534
  checkout_payment_method: r,
6535
- new_customer_email: b[m.EMAIL],
6536
- new_customer_first_name: b[m.FIRST_NAME],
6537
- new_customer_last_name: b[m.LAST_NAME],
6538
- new_customer_address: ye(b),
6539
- new_customer_shipping_address: _e(b, p.checkout_settings),
6535
+ new_customer_email: w[m.EMAIL],
6536
+ new_customer_first_name: w[m.FIRST_NAME],
6537
+ new_customer_last_name: w[m.LAST_NAME],
6538
+ new_customer_address: ye(w),
6539
+ new_customer_shipping_address: _e(w, p.checkout_settings),
6540
6540
  customer_language: Ve()
6541
6541
  });
6542
6542
  je("Start payment flow response", L);
@@ -6556,7 +6556,7 @@ const { log__: Mt, err__: li } = x("authnet-applepay"), qd = Ie(
6556
6556
  logPrefix: "authnet-googlepay",
6557
6557
  anyCdeConnection: h,
6558
6558
  checkoutPaymentMethod: r,
6559
- requiredFormFields: b,
6559
+ requiredFormFields: w,
6560
6560
  confirmResult: C,
6561
6561
  usePayFirstFlow: !1
6562
6562
  });
@@ -6830,8 +6830,8 @@ const op = ie(
6830
6830
  });
6831
6831
  const v = f.response.headers ?? {};
6832
6832
  "op-existing-cc-pm-id" in v && (y.existing_cc_pm_id = v["op-existing-cc-pm-id"], O(`├ Existing CC PM ID: ${y.existing_cc_pm_id}`));
6833
- const w = Zd(f.response.headers);
6834
- if (w) {
6833
+ const b = Zd(f.response.headers);
6834
+ if (b) {
6835
6835
  O("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
6836
6836
  const C = await Kd(e.baseUrl, f.response.headers);
6837
6837
  y.extra_metadata.pockyt = C;
@@ -6850,11 +6850,11 @@ const op = ie(
6850
6850
  );
6851
6851
  y.extra_metadata.adyen = C;
6852
6852
  }
6853
- const b = await Oo(c, y);
6854
- O("├ Start payment flow result:", b);
6853
+ const w = await Oo(c, y);
6854
+ O("├ Start payment flow result:", w);
6855
6855
  const S = ((s = f.response.headers) == null ? void 0 : s["op-should-use-new-flow"]) !== "true";
6856
- w ? O("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : S ? (O("├ Using stripe 3DS flow"), await pi(ip(b))) : (O("├ Using common 3DS flow"), await yi(b, e.baseUrl));
6857
- const L = b.cc_pm_id;
6856
+ b ? O("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : S ? (O("├ Using stripe 3DS flow"), await pi(ip(w))) : (O("├ Using common 3DS flow"), await yi(w, e.baseUrl));
6857
+ const L = w.cc_pm_id;
6858
6858
  if (l.mode === "setup") {
6859
6859
  O(`├ Confirming payment flow [cc_pm_id: ${L}]`);
6860
6860
  const C = await Y(c, {
@@ -6969,7 +6969,12 @@ const op = ie(
6969
6969
  r,
6970
6970
  o.get.onValidationError,
6971
6971
  a.checkout_settings
6972
- ), c = e.anyCdeConnection, l = a.mode !== "setup", u = Br(s, a.checkout_settings), d = await xe(e.anyCdeConnection, {
6972
+ ), c = e.anyCdeConnection, l = a.mode !== "setup", u = Br(s, a.checkout_settings);
6973
+ if (!i)
6974
+ throw new Error("Checkout failed. Failed to properly submit form data.");
6975
+ if (!i.success)
6976
+ throw g("loop_pay_flow_failure", i), new Error("Checkout failed. Success is not true.");
6977
+ const d = await xe(e.anyCdeConnection, {
6973
6978
  checkout_payment_method: t,
6974
6979
  payment_provider: t.provider,
6975
6980
  ...u,
@@ -6980,21 +6985,15 @@ const op = ie(
6980
6985
  displayed_total_amount_atom: a.amount_total_atom
6981
6986
  } : void 0,
6982
6987
  customer_language: Ve()
6983
- });
6984
- if (!i)
6985
- throw Error("Checkout failed. Failed to properly submit form data.");
6986
- const _ = await Y(c, {
6988
+ }), _ = await Y(c, {
6987
6989
  secure_token: a.token,
6988
- // TODO: We don't have a payin on setup
6989
- their_pm_id: i.success && i.mode == "checkout" ? i.payin.paymentMethod.paymentMethodId : void 0,
6990
+ their_pm_id: i.paymentMethod.paymentMethodId,
6990
6991
  // NOTE: we do have the checkout attempt id here even if its a setup, but for now we don't include it
6991
6992
  // because we don't have checkout attempt support for setup intents.
6992
6993
  checkout_attempt_id: l ? d.checkout_attempt_id : void 0,
6993
6994
  processor_specific_metadata: {
6994
- loop_customer: i.success ? i.customer : void 0,
6995
- loop_payin: i.success && i.mode == "checkout" ? i.payin : void 0,
6996
- loop_failure_details: i.success ? void 0 : i.failureDetails,
6997
- loop_debug_info: i.success ? void 0 : i.debugInfo,
6995
+ loop_customer: i.customer,
6996
+ loop_payment_method: i.paymentMethod,
6998
6997
  loop_success: i.success
6999
6998
  }
7000
6999
  });
@@ -7064,17 +7063,17 @@ const op = ie(
7064
7063
  frontend_token_for_redirect_flow: h
7065
7064
  },
7066
7065
  ..._
7067
- }, f = new URL("/app/pre-action/start/", e.baseUrl).toString(), v = btoa(JSON.stringify(y)), w = new URLSearchParams({
7066
+ }, f = new URL("/app/pre-action/start/", e.baseUrl).toString(), v = btoa(JSON.stringify(y)), b = new URLSearchParams({
7068
7067
  st: s.token,
7069
7068
  r: v
7070
- }), b = `${f}?${w.toString()}`;
7069
+ }), w = `${f}?${b.toString()}`;
7071
7070
  if (l)
7072
- throw Me("Starting redirect mode for PayPal..."), window.location.href = b, await nr(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
7071
+ throw Me("Starting redirect mode for PayPal..."), window.location.href = w, await nr(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
7073
7072
  const S = await Ho(
7074
7073
  "PayPal",
7075
7074
  a,
7076
7075
  h,
7077
- b
7076
+ w
7078
7077
  );
7079
7078
  Me("Paypal flow result", S);
7080
7079
  const L = Ir(S.href, "catt"), C = Ir(S.href, "approval_session_id"), N = await Y(a, {
@@ -7154,10 +7153,10 @@ const hp = async ({ context: e, formCallbacks: t }) => {
7154
7153
  frontend_token_for_redirect_flow: p
7155
7154
  },
7156
7155
  ...h
7157
- }, v = new URL("/app/pre-action/start/", e.baseUrl).toString(), w = btoa(JSON.stringify(f)), b = new URLSearchParams({
7156
+ }, v = new URL("/app/pre-action/start/", e.baseUrl).toString(), b = btoa(JSON.stringify(f)), w = new URLSearchParams({
7158
7157
  st: l.token,
7159
- r: w
7160
- }), S = `${v}?${b.toString()}`;
7158
+ r: b
7159
+ }), S = `${v}?${w.toString()}`;
7161
7160
  if ((s = i == null ? void 0 : i.settings) != null && s.useRedirectFlow)
7162
7161
  throw ve("Starting redirect mode for PayPal..."), window.location.href = S, await nr(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
7163
7162
  ve("Starting popup mode for PayPal..."), ve("Opening paypal iframe...");
@@ -7260,7 +7259,7 @@ const hp = async ({ context: e, formCallbacks: t }) => {
7260
7259
  }
7261
7260
  };
7262
7261
  }
7263
- ), bp = ie(
7262
+ ), wp = ie(
7264
7263
  async ({
7265
7264
  context: e,
7266
7265
  checkoutPaymentMethod: t,
@@ -7271,7 +7270,7 @@ const hp = async ({ context: e, formCallbacks: t }) => {
7271
7270
  $("Running Stripe Link flow...");
7272
7271
  const a = e.anyCdeConnection, s = await D(a);
7273
7272
  $("Merging PM fields with form fields...");
7274
- const c = wp(r, i.stripePM), l = te(c, o.get.onValidationError);
7273
+ const c = bp(r, i.stripePM), l = te(c, o.get.onValidationError);
7275
7274
  g("billing_details_received", {
7276
7275
  ...l
7277
7276
  }), $("Starting payment flow...");
@@ -7316,7 +7315,7 @@ const hp = async ({ context: e, formCallbacks: t }) => {
7316
7315
  return { mode: "checkout", result: await qr(a, _) };
7317
7316
  }
7318
7317
  }
7319
- ), wp = (e, t) => {
7318
+ ), bp = (e, t) => {
7320
7319
  var r, o, i, a, s;
7321
7320
  const c = { ...e }, [l, ...u] = ((o = (r = t.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], d = u.join(" ") || void 0;
7322
7321
  c[m.EMAIL] = c[m.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -7487,7 +7486,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
7487
7486
  },
7488
7487
  stripeLink: {
7489
7488
  init: vp,
7490
- run: bp
7489
+ run: wp
7491
7490
  },
7492
7491
  // Pockyt
7493
7492
  pockytPaypal: {
@@ -7690,11 +7689,11 @@ let Rn;
7690
7689
  const Vp = async (e, t) => {
7691
7690
  if (typeof window > "u")
7692
7691
  return;
7693
- const r = await import("./index-DvRkl7fn-DqTHFOHX.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-D_nykiTR-C6hMmTZk.js"), { FetchInstrumentation: c } = s, l = await import("./index-C7jh2Wln-B4-4VQCM.js"), { ZoneContextManager: u } = l, d = await import("./index-CH9cpqGO-V1k-wL1j.js"), { registerInstrumentations: _ } = d, h = await import("./index-SXk-qCno-CDmD9jUc.js"), { Resource: p } = h, y = await import("./detect-resources-Bqpyh1Oz-DbIsf0pI.js").then((se) => se.d), { detectResourcesSync: f } = y, v = await import("./index-BsUTJmEM-BcWcG78s.js"), { OTLPTraceExporter: w } = v, b = await import("./index-De02Z0PM-DxhXBN8Z.js"), { B3Propagator: S, B3InjectEncoding: L } = b, C = await import("./index-Dmrzgy93-BunD1EqM.js"), { BatchSpanProcessor: N } = C;
7692
+ const r = await import("./index-D3XRtQyO-DuEFUy65.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-DK5ZdQ5i-C3VM5nh_.js"), { FetchInstrumentation: c } = s, l = await import("./index-C6ufRvNF-CizjFdpJ.js"), { ZoneContextManager: u } = l, d = await import("./index-BaTbkF8M-UZLB4k05.js"), { registerInstrumentations: _ } = d, h = await import("./index-BDhIvQX0-B_JQNCPs.js"), { Resource: p } = h, y = await import("./detect-resources-Ci98P4IY-DDYqc---.js").then((se) => se.d), { detectResourcesSync: f } = y, v = await import("./index-BnnW1rC5-CnjXsIEi.js"), { OTLPTraceExporter: b } = v, w = await import("./index-C2IubpCq-DRIrh3js.js"), { B3Propagator: S, B3InjectEncoding: L } = w, C = await import("./index-DNntq8aU-CXDCzFwp.js"), { BatchSpanProcessor: N } = C;
7694
7693
  _r(`Initializing tracer with version ${e} and baseUrl ${t}`);
7695
7694
  const K = $p(t);
7696
7695
  _r(`Using collector URL ${K}`);
7697
- const ae = new w({ url: K }), Oe = {
7696
+ const ae = new b({ url: K }), Oe = {
7698
7697
  "service.version": e,
7699
7698
  "service.name": "ojs"
7700
7699
  };
@@ -7891,12 +7890,12 @@ const Kp = (e, t, r) => {
7891
7890
  formCallbacks: o,
7892
7891
  customParams: { provider: e, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
7893
7892
  initResult: t
7894
- }), jn = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: be, err__: ne } = x("op-form"), Be = class Dt {
7893
+ }), jn = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: we, err__: ne } = x("op-form"), Be = class Dt {
7895
7894
  constructor(t) {
7896
7895
  var r;
7897
7896
  this.isDestroyed = !1, this.cdeLoadEvent = new ht(), this.anyCdeConn = new ht(), this.context = new ht(), this.initFlows = xp(), this.isSubmitting = !1, this.startFormInit = async () => {
7898
7897
  const a = tt.getTracer("openpay-js"), s = a.startSpan("form.initialize", {
7899
- kind: wt.CLIENT,
7898
+ kind: bt.CLIENT,
7900
7899
  attributes: {
7901
7900
  "ojs.checkoutSecureToken": this.config.checkoutSecureToken,
7902
7901
  "ojs.deviceToken": this.deviceToken,
@@ -7912,7 +7911,7 @@ const Kp = (e, t, r) => {
7912
7911
  });
7913
7912
  return Je.with(tt.setSpan(Je.active(), s), async () => {
7914
7913
  try {
7915
- const c = this.createElement(we.CDE_BRIDGE);
7914
+ const c = this.createElement(be.CDE_BRIDGE);
7916
7915
  c.node.id = "__op_internal_cde_bridge", c.node.ariaHidden = "true", Object.assign(c.node.style, {
7917
7916
  border: "none",
7918
7917
  margin: "0px",
@@ -7924,24 +7923,24 @@ const Kp = (e, t, r) => {
7924
7923
  position: "fixed",
7925
7924
  pointerEvents: "none",
7926
7925
  userSelect: "none"
7927
- }), c.mount("body"), be("CDE bridge element mounted"), be("Initializing OpenPay form:"), be("├ Waiting for CDE load event...");
7926
+ }), c.mount("body"), we("CDE bridge element mounted"), we("Initializing OpenPay form:"), we("├ Waiting for CDE load event...");
7928
7927
  const l = await this.cdeLoadEvent.waitForLoad({
7929
7928
  timeoutSec: 120,
7930
7929
  timeoutErrMsg: jn
7931
7930
  });
7932
- be("├ CDE load event received"), s == null || s.addEvent("waiting_for_cde_connection"), be("├ Waiting for CDE connection...");
7931
+ we("├ CDE load event received"), s == null || s.addEvent("waiting_for_cde_connection"), we("├ Waiting for CDE connection...");
7933
7932
  const u = a == null ? void 0 : a.startSpan("cde.connect", void 0, Je.active()), d = await this.anyCdeConn.waitForLoad({
7934
7933
  timeoutSec: 120,
7935
7934
  timeoutErrMsg: jn
7936
7935
  });
7937
- u == null || u.end(), s == null || s.addEvent("cde_connected"), be("├ CDE connection received"), await Gu(d, this.deviceToken), be("├ Creating OJS context, setting up handlers...");
7936
+ u == null || u.end(), s == null || s.addEvent("cde_connected"), we("├ CDE connection received"), await Gu(d, this.deviceToken), we("├ Creating OJS context, setting up handlers...");
7938
7937
  const _ = Dt.buildOjsFlowContext(
7939
7938
  this.config,
7940
7939
  l,
7941
7940
  d,
7942
7941
  this.getFormDiv()
7943
7942
  );
7944
- this.context.set(_), Kp(this.initFlows, _, this.formCallbacks), be("├ Starting OJS init flows..."), await Lp(this.initFlows, _, this.formCallbacks), this.formCallbacks.get.onLoad(l.totalAmountAtoms, l.currency), be("╰ Done initializing OJS flows."), s == null || s.setStatus({ code: Ne.OK }), g("form_loaded");
7943
+ this.context.set(_), Kp(this.initFlows, _, this.formCallbacks), we("├ Starting OJS init flows..."), await Lp(this.initFlows, _, this.formCallbacks), this.formCallbacks.get.onLoad(l.totalAmountAtoms, l.currency), we("╰ Done initializing OJS flows."), s == null || s.setStatus({ code: Ne.OK }), g("form_loaded");
7945
7944
  } catch (c) {
7946
7945
  const l = ee(c);
7947
7946
  s == null || s.setStatus({
@@ -7956,7 +7955,7 @@ const Kp = (e, t, r) => {
7956
7955
  });
7957
7956
  }, this.setFormHeight = (a) => {
7958
7957
  this.formProperties.height = a, this.registeredElements && Object.values(this.registeredElements).forEach((s) => {
7959
- !s || s.type === we.CDE_BRIDGE || (s.node.style.height = a);
7958
+ !s || s.type === be.CDE_BRIDGE || (s.node.style.height = a);
7960
7959
  });
7961
7960
  }, this.onCdeLoaded = (a) => {
7962
7961
  this.cdeLoadEvent.current.isSuccess || (this.cdeLoadEvent.set(a), g("cde_loaded"));
@@ -7982,11 +7981,11 @@ const Kp = (e, t, r) => {
7982
7981
  }
7983
7982
  };
7984
7983
  return this.connectToElement({ type: c.type, node: c.node }), this.registeredElements || (this.registeredElements = {
7985
- [we.CARD]: void 0,
7986
- [we.CARD_NUMBER]: void 0,
7987
- [we.CARD_EXPIRY]: void 0,
7988
- [we.CARD_CVC]: void 0,
7989
- [we.CDE_BRIDGE]: void 0
7984
+ [be.CARD]: void 0,
7985
+ [be.CARD_NUMBER]: void 0,
7986
+ [be.CARD_EXPIRY]: void 0,
7987
+ [be.CARD_CVC]: void 0,
7988
+ [be.CDE_BRIDGE]: void 0
7990
7989
  }), this.registeredElements[a] = c, c;
7991
7990
  }, this.buildQueryString = (a) => {
7992
7991
  const s = new URLSearchParams();
@@ -8012,7 +8011,7 @@ const Kp = (e, t, r) => {
8012
8011
  releaseVersion: this.ojsReleaseVersion,
8013
8012
  baseUrl: this.baseUrl,
8014
8013
  referrer: this.referrer
8015
- }, this.connectionManager.addConnection(a.type, s), !this.anyCdeConn.current.isSuccess && a.type === we.CDE_BRIDGE && this.anyCdeConn.set(s);
8014
+ }, this.connectionManager.addConnection(a.type, s), !this.anyCdeConn.current.isSuccess && a.type === be.CDE_BRIDGE && this.anyCdeConn.set(s);
8016
8015
  }
8017
8016
  ).catch((s) => ne("[FORM] Error connecting to CDE iframe", s)), this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = async (a) => {
8018
8017
  if (this.isSubmitting) {
@@ -8076,7 +8075,7 @@ const Kp = (e, t, r) => {
8076
8075
  ), { processors: l, isAvailable: u } = xn(
8077
8076
  this.initFlows
8078
8077
  ), d = this.initFlows.paypal.publisher.getValueIfLoadedElse(null), _ = (d == null ? void 0 : d.isAvailable) ?? !1, h = a.checkoutPaymentMethods.some(
8079
- (w) => w.processor_name === "pockyt" && w.provider === "paypal"
8078
+ (b) => b.processor_name === "pockyt" && b.provider === "paypal"
8080
8079
  ), p = this.initFlows.loop.publisher.getValueIfLoadedElse(null), y = (p == null ? void 0 : p.isAvailable) ?? !1, f = [
8081
8080
  {
8082
8081
  name: j.applePay,
@@ -8112,10 +8111,10 @@ const Kp = (e, t, r) => {
8112
8111
  adyenGooglePay: j.adyenGooglePay,
8113
8112
  adyenApplePay: j.adyenApplePay
8114
8113
  };
8115
- return [...Object.entries(this.initFlows).map(([w, b]) => {
8116
- const S = b.publisher.getValueIfLoadedElse(null);
8114
+ return [...Object.entries(this.initFlows).map(([b, w]) => {
8115
+ const S = w.publisher.getValueIfLoadedElse(null);
8117
8116
  return {
8118
- name: v[w] ?? w,
8117
+ name: v[b] ?? b,
8119
8118
  processors: [],
8120
8119
  isAvailable: (S == null ? void 0 : S.isAvailable) ?? !1
8121
8120
  };
@@ -8263,13 +8262,13 @@ const Kp = (e, t, r) => {
8263
8262
  }
8264
8263
  }, this.submit = this.submitCard, this.destroy = () => {
8265
8264
  var a;
8266
- be("Destroying OpenPay form..."), this.checkValidFormInstance("destroy"), this.isDestroyed = !0;
8265
+ we("Destroying OpenPay form..."), this.checkValidFormInstance("destroy"), this.isDestroyed = !0;
8267
8266
  for (const s of Object.values(this.registeredElements ?? {}))
8268
8267
  s && s.node.remove();
8269
8268
  (a = V()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), Gl(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
8270
8269
  }, this.updateCallbacks = (a) => {
8271
8270
  this.formCallbacks.setCallbacks(a);
8272
- }, Dt.assignAsSingleton(this), this.ojsVersion = "0.5.2", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Mp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Zp(), this.deviceToken = Vo(), Fl();
8271
+ }, Dt.assignAsSingleton(this), this.ojsVersion = "0.5.3", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Mp.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ge()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Zp(), this.deviceToken = Vo(), Fl();
8273
8272
  const { framework: o, version: i } = Up();
8274
8273
  Co(this.baseUrl).then((a) => {
8275
8274
  if (!Cr.current.isSuccess) {
@@ -8334,7 +8333,7 @@ Be.ojsFlows = M, Be.assignAsSingleton = (e) => {
8334
8333
  let Zt = Be;
8335
8334
  const Jp = (e) => {
8336
8335
  var r;
8337
- const t = wr.fromObject({
8336
+ const t = br.fromObject({
8338
8337
  onFocus: e.onFocus,
8339
8338
  onBlur: e.onBlur,
8340
8339
  onChange: e.onChange,
@@ -8352,7 +8351,7 @@ const Jp = (e) => {
8352
8351
  const [t, r] = Ee(), [o, i] = Ee(null), [a, s] = Ee(!1), [c, l] = Ee(cn), [u, d] = Ee(cn), [_, h] = Ee(null), [p, y] = Ee(Ps), [f, v] = Ee({
8353
8352
  googlePay: an,
8354
8353
  applePay: an
8355
- }), w = Jp({
8354
+ }), b = Jp({
8356
8355
  ...e,
8357
8356
  onLoad: (S, L) => {
8358
8357
  var C;
@@ -8373,7 +8372,7 @@ const Jp = (e) => {
8373
8372
  customInitParams: e.customInitParams,
8374
8373
  allowTracing: e.allowTracing ?? !1,
8375
8374
  preventNavigationDuringSubmission: e.preventNavigationDuringSubmission,
8376
- ...w
8375
+ ...b
8377
8376
  });
8378
8377
  r(S);
8379
8378
  const L = Qp(S);
@@ -8406,7 +8405,7 @@ const Jp = (e) => {
8406
8405
  };
8407
8406
  }, []), !t)
8408
8407
  return /* @__PURE__ */ he(ir, {});
8409
- const b = {
8408
+ const w = {
8410
8409
  submit: t.submitCard,
8411
8410
  submitWith: t.generalSubmit,
8412
8411
  applePay: c,
@@ -8422,7 +8421,7 @@ const Jp = (e) => {
8422
8421
  airwallex: f,
8423
8422
  loop: p
8424
8423
  };
8425
- return /* @__PURE__ */ he(ir, { children: o ? /* @__PURE__ */ he(ro.Provider, { value: o, children: /* @__PURE__ */ he("div", { id: Dn, className: e.className, children: e.children(b) }) }) : /* @__PURE__ */ he(ir, {}) });
8424
+ return /* @__PURE__ */ he(ir, { children: o ? /* @__PURE__ */ he(ro.Provider, { value: o, children: /* @__PURE__ */ he("div", { id: Dn, className: e.className, children: e.children(w) }) }) : /* @__PURE__ */ he(ir, {}) });
8426
8425
  }, Qp = (e) => ({
8427
8426
  formId: e.formId,
8428
8427
  formHeight: e.formProperties.height,
@@ -8438,7 +8437,7 @@ export {
8438
8437
  R as F,
8439
8438
  Pu as H,
8440
8439
  Je as L,
8441
- bs as P,
8440
+ ws as P,
8442
8441
  cu as R,
8443
8442
  to as S,
8444
8443
  au as T,
@@ -8458,12 +8457,12 @@ export {
8458
8457
  cm as k,
8459
8458
  To as l,
8460
8459
  vs as m,
8461
- ws as n,
8462
- wt as r,
8463
- bt as t,
8460
+ bs as n,
8461
+ bt as r,
8462
+ wt as t,
8464
8463
  Ts as u,
8465
8464
  om as v,
8466
8465
  kr as x,
8467
- wu as z
8466
+ bu as z
8468
8467
  };
8469
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyQxID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcbnoub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBtZXNzYWdlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe30pO1xuei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyQxKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kMShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhjb25kaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcztcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzLmV4dGVuZChjb25kaXRpb25hbEZpZWxkcyk7XG59O1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMgPSB7fSkgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuXG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBFbnZpcm9ubWVudCA9IC8qIEBfX1BVUkVfXyAqLyAoKEVudmlyb25tZW50MikgPT4ge1xuICBFbnZpcm9ubWVudDJbXCJMb2NhbFwiXSA9IFwibG9jYWxcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGV2ZWxvcG1lbnRcIl0gPSBcImRldmVsb3BtZW50XCI7XG4gIEVudmlyb25tZW50MltcIlN0YWdpbmdcIl0gPSBcInN0YWdpbmdcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGVtb1wiXSA9IFwiZGVtb1wiO1xuICBFbnZpcm9ubWVudDJbXCJQcm9kdWN0aW9uXCJdID0gXCJwcm9kdWN0aW9uXCI7XG4gIHJldHVybiBFbnZpcm9ubWVudDI7XG59KShFbnZpcm9ubWVudCB8fCB7fSk7XG52YXIgUGF5SW5GYWlsZWQgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJbkZhaWxlZDIpID0+IHtcbiAgUGF5SW5GYWlsZWQyW1wiTUVUSE9EX0NSRUFUSU9OX0ZBSUxFRFwiXSA9IFwibWV0aG9kQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0JBTEFOQ0VcIl0gPSBcImluc3VmZmljaWVudEJhbGFuY2VcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0FVVEhPUklaQVRJT05cIl0gPSBcImluc3VmZmljaWVudEF1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5GYWlsZWQyW1wiU0lHTkVEX01FU1NBR0VfUkVRVUlSRURcIl0gPSBcInNpZ25lZE1lc3NhZ2VSZXF1aXJlZFwiO1xuICBQYXlJbkZhaWxlZDJbXCJDVVNUT01FUl9DUkVBVElPTl9GQUlMRURcIl0gPSBcImN1c3RvbWVyQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiUEFZTUVOVF9GQUlMRURcIl0gPSBcInBheW1lbnRGYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiVFJBTlNBQ1RJT05fRkFJTEVEXCJdID0gXCJ0cmFuc2FjdGlvbkZhaWxlZFwiO1xuICByZXR1cm4gUGF5SW5GYWlsZWQyO1xufSkoUGF5SW5GYWlsZWQgfHwge30pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRfTUVUSE9EXCJdID0gXCJjcmVhdGluZ1BheW1lbnRNZXRob2RcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgcHJvY2Vzc29yczogW10sXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5mdW5jdGlvbiBYbihlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIGVvKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB0byA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGE7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBmb3IgKHZhciBzIGluIGEpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBzKSAmJiAob1tzXSA9IGFbc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHJvID0gZnVuY3Rpb24oZSkge1xuICB0byh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBYbihhLCBvLnByb3RvdHlwZSksIGVvKGEpLCBhO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCBDID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIGIgPSB6LnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBEID0gKGUpID0+IHoubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBkID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLkxJTkUxID0gXCJsaW5lMVwiLCBlLkxJTkUyID0gXCJsaW5lMlwiLCBlLkxJTkUzID0gXCJsaW5lM1wiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5TSElQUElOR19MSU5FMSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIiwgZS5TSElQUElOR19MSU5FMiA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIiwgZS5TSElQUElOR19MSU5FMyA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTNcIiwgZS5TSElQUElOR19DSVRZID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIsIGUuU0hJUFBJTkdfU1RBVEUgPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIsIGUuU0hJUFBJTkdfQ09VTlRSWSA9IFwic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiLCBlLlNISVBQSU5HX1pJUF9DT0RFID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIsIGUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShkIHx8IHt9KTtcbmNvbnN0IE9yID0gei5uYXRpdmVFbnVtKGQpO1xudmFyIFVyID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShVciB8fCB7fSk7XG5jb25zdCBqciA9IHoubmF0aXZlRW51bShVciksIHhyID0gei51bmlvbihbT3IsIGpyXSk7XG52YXIgdWUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodWUgfHwge30pO1xuY29uc3Qgbm8gPSB6Lm5hdGl2ZUVudW0odWUpLCB2dCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBEKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogRCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBvbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBiLFxuICBleHBpcnk6IGIsXG4gIGN2YzogYlxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogYixcbiAgY29sb3I6IGIsXG4gIGZvbnRGYW1pbHk6IGIsXG4gIGZvbnRTaXplOiBiLFxuICBmb250V2VpZ2h0OiBiLFxuICBtYXJnaW46IGIsXG4gIHBhZGRpbmc6IGIsXG4gIGxldHRlclNwYWNpbmc6IGIsXG4gIGxpbmVIZWlnaHQ6IGIsXG4gIGhpZGVJY29uOiBiXG59KTtcbmNvbnN0IGllID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBhbyA9IGllLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBpbyA9IHoub2JqZWN0KHsgdHlwZTogYW8gfSksIHNvID0gaWUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBjbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogc28sXG4gIGVsZW1lbnRUeXBlOiBqcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgbG8gPSBpZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgdW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGxvLFxuICBtZXNzYWdlOiBDLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgcG8gPSBpZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBfbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogcG8sXG4gIGVsZW1lbnRUeXBlOiB4cixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgbW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQ1xufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KHZ0KVxufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIGhvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgRGUgPSB6Lm9iamVjdCh7XG4gIGVtYWlsOiBDLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogQyxcbiAgbGFzdE5hbWU6IEMsXG4gIHByb21vdGlvbkNvZGU6IGIsXG4gIGxpbmUxOiBiLFxuICBsaW5lMjogYixcbiAgbGluZTM6IGIsXG4gIGNpdHk6IGIsXG4gIHN0YXRlOiBiLFxuICBjb3VudHJ5OiBDLFxuICB6aXBDb2RlOiBiLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQoITApLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogYixcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBiLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogYixcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogYlxufSksIGdvID0gei5vYmplY3Qoe1xuICBlbWFpbDogQy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBmaXJzdE5hbWU6IGIsXG4gIGxhc3ROYW1lOiBiLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBsaW5lMTogYixcbiAgbGluZTI6IGIsXG4gIGxpbmUzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYixcbiAgY291bnRyeTogQyxcbiAgemlwQ29kZTogYixcbiAgaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmc6IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogYixcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IGJcbn0pO1xuei5vYmplY3Qoe1xuICBsaW5lMTogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IEMsXG4gIGNvdW50cnk6IENcbn0pO1xuei5vYmplY3Qoe1xuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbnoub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBDLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbmNvbnN0IHdvID0gaWUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBzZXNzaW9uSWQ6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdnQsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBiLFxuICBwYXltZW50Um91dGVJZDogYlxufSkuZXh0ZW5kKERlLnNoYXBlKSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgRW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgUG8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBpbyxcbiAgY28sXG4gIHVvLFxuICBfbyxcbiAgbW8sXG4gIHlvLFxuICB2byxcbiAgYm8sXG4gIEVvLFxuICBmbyxcbiAgaG9cbl0pLCBTbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogUG8sXG4gIG5vbmNlOiBDLFxuICBmb3JtSWQ6IEMsXG4gIGVsZW1lbnRJZDogQ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IENcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBEKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogRCh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBEKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBRZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBEKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgQ28gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGtvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoQ28pXG59KSwgQW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIGtvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHZ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEQoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRCh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdnQsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IERlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRCh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoei5zdHJpbmcoKSlcbn0pO1xudmFyIE8gPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShPIHx8IHt9KTtcbmNvbnN0IElvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBUbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIEdyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IEQoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBEKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBEKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBEKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIE5vID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBSbyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG9vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IEQoUWUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IEQoei5hcnJheShHcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBEKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBEKFFlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCAkciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBWciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE1vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIExvID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhNbylcbn0pLCBHZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBxciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBVbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIGpvID0gei5vYmplY3Qoe1xuICBjb3Vwb246ICRyXG59KSwgeG8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoam8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KFVvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpXG59KSwgaXIgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheSh4byksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHpyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBpcixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KGlyKSxcbiAgY291cG9uczogei5hcnJheSgkcilcbn0pLCBzciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFZyKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogTG8sXG4gIHN1YnNfcHJldmlldzogdyh6ciksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShHZSksXG4gIHJldHVybl91cmw6IHcoei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiB3KHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgSHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHNyLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoc3Iuc2hhcGUpXG5dKSwgR28gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCAkbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW0hyLCBHbywgJG9dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBtdCA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IG10Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoVnIpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBHZSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBWbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFZvKTtcbmNvbnN0IHFvID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogbXQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBtdC5vcHRpb25hbCgpXG59KSwgem8gPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIFlyID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KHpvKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KSwgSG8gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogR2UsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQocW8uc2hhcGUpLmV4dGVuZChIby5zaGFwZSk7XG5jb25zdCBKciA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogZ28sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogR2UsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiB3KHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCbyA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoUWUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6LnN0cmluZygpKSxcbiAgbGluZTM6IHcoei5zdHJpbmcoKSksXG4gIGNpdHk6IHcoei5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiB3KHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6LnN0cmluZygpKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgWW8gPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogR2UsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBKbyA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBabyA9IHoub2JqZWN0KHt9KSwgS28gPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKSwgV28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pLCBRbyA9IHouYXJyYXkoV28pLCBYbyA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSksIGVhID0gei5hcnJheShYbyksIHRhID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBcIkNvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpblwiXG59LCBEdCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gdGFbdF0gPz8gZTtcbn0sIHJhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEpTT04ucGFyc2UoZSkgPT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBuYSA9IChlKSA9PiBlLmxlbmd0aCA9PT0gMSA/IER0KGVbMF0ubXNnKSA6IGBQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYOKAoiAke0R0KHIubXNnKX1gKS5qb2luKGBcbmApfWAsIG9hID0gKGUpID0+IGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGAtICR7ci5wYXRoLmpvaW4oXCIvXCIpfTogJHtyLm1lc3NhZ2V9YCkuam9pbihgXG5gKX1gLCBLID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAocmEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBRby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogZWEuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBvYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBEdChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBhYSA9IChlLCB0LCByKSA9PiAoLi4ubikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0KC4uLm4pO1xuICB9IGNhdGNoIChvKSB7XG4gICAgcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7ZX0pOmAsIG8pO1xuICAgIHJldHVybjtcbiAgfVxufSwgaWEgPSAoZSkgPT4gZS5yZWR1Y2UoKHQsIHIpID0+IHQgKyByLCAwKSwgWnIgPSAoZSkgPT4ge1xuICBlLnByZXZlbnREZWZhdWx0KCksIGUucmV0dXJuVmFsdWUgPSAhMDtcbn0sIHNhID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBacik7XG59LCBjYSA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgWnIpO1xufSwgZWUgPSAoZSkgPT4ge1xuICBsZXQgdCA9ICExO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICB2YXIgbiwgbztcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSAhMDtcbiAgICB0cnkge1xuICAgICAgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiBzYSgpLCAobyA9IChuID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgby5jYWxsKG4pLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYSA9IGF3YWl0IGUocik7XG4gICAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5hXG4gICAgICB9KSwgc2koKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGEucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKGEubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGEucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBhLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGEucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2F9YCk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgcyA9IEsoYSksIGMgPSBhd2FpdCBobihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgcyk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihzLCBjKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBzLCBlcnJvckNvZGU6IGMsIGVycm9yOiBhIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gITEsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgY2EoKTtcbiAgICB9XG4gIH07XG59LCB5ZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gSShcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgbyA9IEsociksIGEgPSBhd2FpdCBobih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgbyk7XG4gICAgcmV0dXJuIG4oYSwgbywgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IG8sIGVycm9yQ29kZTogYSwgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IG8sIGVycm9yQ29kZTogYSwgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgT3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBPdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIG8gaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIG8pICYmIChyW29dID0gbltvXSk7XG4gIH0sIE90KGUsIHQpO1xufTtcbmZ1bmN0aW9uIGdlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgT3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIGxhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gbyhhKSB7XG4gICAgcmV0dXJuIGEgaW5zdGFuY2VvZiByID8gYSA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoYSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihhLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHMoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgcyh5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICBwLmRvbmUgPyBhKHAudmFsdWUpIDogbyhwLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gS3IoZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChhWzBdICYgMSkgdGhyb3cgYVsxXTtcbiAgICByZXR1cm4gYVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgYSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gbChbdSwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBvICYmIChhID0gdVswXSAmIDIgPyBvLnJldHVybiA6IHVbMF0gPyBvLnRocm93IHx8ICgoYSA9IG8ucmV0dXJuKSAmJiBhLmNhbGwobyksIDApIDogby5uZXh0KSAmJiAhKGEgPSBhLmNhbGwobywgdVsxXSkpLmRvbmUpIHJldHVybiBhO1xuICAgICAgc3dpdGNoIChvID0gMCwgYSAmJiAodSA9IFt1WzBdICYgMiwgYS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgbyA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoYSA9IHIudHJ5cywgIShhID0gYS5sZW5ndGggPiAwICYmIGFbYS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghYSB8fCB1WzFdID4gYVswXSAmJiB1WzFdIDwgYVszXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBhWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gYVsxXSwgYSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEgJiYgci5sYWJlbCA8IGFbMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBhWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFbMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgdSA9IFs2LCBwXSwgbyA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBhID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHl0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufVxuZnVuY3Rpb24gZnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIHVhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBvLCBhID0gW107XG4gIHJldHVybiBvID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbztcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZikudGhlbihtLCB5KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgZikge1xuICAgIG5bbV0gJiYgKG9bbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRSwgUCkge1xuICAgICAgICBhLnB1c2goW20sIGgsIEUsIFBdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIGYgJiYgKG9bbV0gPSBmKG9bbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCBmKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXShmKSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhhWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLCB5KSA6IF8oYVswXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gcChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24geShtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgZikge1xuICAgIG0oZiksIGEuc2hpZnQoKSwgYS5sZW5ndGggJiYgbChhWzBdWzBdLCBhWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gZGEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oYSkge1xuICAgIHJbYV0gPSBlW2FdICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW2FdKHMpLCBvKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG8oYSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGEoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gRyhlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBidChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEF0ID0gYnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gaHQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIG8sIGE7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gT2UocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChHKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGEgPSBoIGluc3RhbmNlb2YgQXQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIHkgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKHkpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IE9lKHkpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGYgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY3IoZik7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIGEgPSBhID8/IFtdLCBoIGluc3RhbmNlb2YgQXQgPyBhID0gZnQoZnQoW10sIHl0KGEpKSwgeXQoaC5lcnJvcnMpKSA6IGEucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKG8gPSBfLnJldHVybikgJiYgby5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhKVxuICAgICAgICB0aHJvdyBuZXcgQXQoYSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgY3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGh0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgaHQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBXciA9IG90LkVNUFRZO1xuZnVuY3Rpb24gUXIoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIG90IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIEcoZS5yZW1vdmUpICYmIEcoZS5hZGQpICYmIEcoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBjcihlKSB7XG4gIEcoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgWHIgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgZW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBmdChbZSwgdF0sIHl0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHRuKGUpIHtcbiAgZW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxyKCkge1xufVxuZnVuY3Rpb24gZHQoZSkge1xuICBlKCk7XG59XG52YXIgVnQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBRcihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0geWEsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBuZXcgVXQociwgbiwgbyk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KG90KSwgcGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEl0KGUsIHQpIHtcbiAgcmV0dXJuIHBhLmNhbGwoZSwgdCk7XG59XG52YXIgX2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgY3Qobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBjdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBjdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBjdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVXQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChHKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IG8gPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBhICYmIFhyLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIEl0KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIEl0KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBJdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBuZXcgX2EocyksIGE7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFZ0KTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdG4oZSk7XG59XG5mdW5jdGlvbiBtYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIgeWEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGxyLFxuICBlcnJvcjogbWEsXG4gIGNvbXBsZXRlOiBsclxufSwgcXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBmYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gaGEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBmYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8obik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgbWUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLCBhID0gd2EodCkgPyB0IDogbmV3IFV0KHQsIHIsIG4pO1xuICAgIHJldHVybiBkdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbywgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIGEuYWRkKGMgPyBjLmNhbGwoYSwgbCkgOiBsID8gby5fc3Vic2NyaWJlKGEpIDogby5fdHJ5U3Vic2NyaWJlKGEpKTtcbiAgICB9KSwgYTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB1cihyKSwgbmV3IHIoZnVuY3Rpb24obywgYSkge1xuICAgICAgdmFyIHMgPSBuZXcgVXQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgYShsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGEsXG4gICAgICAgIGNvbXBsZXRlOiBvXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbcXRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gaGEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSB1cih0KSwgbmV3IHQoZnVuY3Rpb24obiwgbykge1xuICAgICAgdmFyIGE7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBhID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIG8ocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oYSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gdXIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBYci5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgRyhlLm5leHQpICYmIEcoZS5lcnJvcikgJiYgRyhlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFZ0IHx8IGdhKGUpICYmIFFyKGUpO1xufVxuZnVuY3Rpb24gdmEoZSkge1xuICByZXR1cm4gRyhlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gYmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmICh2YSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gRWEoZSwgdCwgciwgbiwgbykge1xuICByZXR1cm4gbmV3IFBhKGUsIHQsIHIsIG4sIG8pO1xufVxudmFyIFBhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvLCBhLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgci5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gYSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEodSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHIuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBvID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFZ0KSwgU2EgPSBidChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHJuID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IGRyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgU2EoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbywgYTtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gT2Uobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBvID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKGEgPSBzLnJldHVybikgJiYgYS5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGR0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgbyA9IG4ub2JzZXJ2ZXJzOyBvLmxlbmd0aDsgKVxuICAgICAgICAgIG8uc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gdGhpcywgYSA9IG8uaGFzRXJyb3IsIHMgPSBvLmlzU3RvcHBlZCwgYyA9IG8ub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBhIHx8IHMgPyBXciA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBvdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGh0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gbi5oYXNFcnJvciwgYSA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBvID8gci5lcnJvcihhKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBtZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgZHIociwgbik7XG4gIH0sIHQ7XG59KG1lKSwgZHIgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmRlc3RpbmF0aW9uID0gciwgby5zb3VyY2UgPSBuLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIHJldHVybiAobyA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogV3I7XG4gIH0sIHQ7XG59KHJuKSwgQ2EgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGthID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0ob3QpLCBwciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgZnQoW2UsIHRdLCB5dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIEFhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5zY2hlZHVsZXIgPSByLCBvLndvcmsgPSBuLCBvLnBlbmRpbmcgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG87XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBhID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBhICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGEsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKG8gPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBwci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIG8pO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0gMCksIG8gIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBvICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgcHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgbyA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gbztcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgYTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIG8gPSAhMCwgYSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBhO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIG8gPSByLnNjaGVkdWxlciwgYSA9IG8uYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBodChhLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChvLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oa2EpLCBfciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IENhLm5vdywgZTtcbn0oKSwgSWEgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBfci5ub3cpO1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uYWN0aW9ucyA9IFtdLCBvLl9hY3RpdmUgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbztcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKG8gPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIG8pIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IG87XG4gICAgfVxuICB9LCB0O1xufShfciksIFRhID0gbmV3IElhKEFhKSwgTmEgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBSYShlKSB7XG4gIHJldHVybiBHKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBGYShlKSB7XG4gIHJldHVybiBHKGVbcXRdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gTGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIERhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIE9hID0gRGEoKTtcbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZVtPYV0pO1xufVxuZnVuY3Rpb24gamEoZSkge1xuICByZXR1cm4gdWEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgbywgYTtcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgTWUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIG8gPSBuLnZhbHVlLCBhID0gbi5kb25lLCBhID8gWzQsIE1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKG8pXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgcmV0dXJuIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gR2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIG1lKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKEZhKGUpKVxuICAgICAgcmV0dXJuICRhKGUpO1xuICAgIGlmIChOYShlKSlcbiAgICAgIHJldHVybiBWYShlKTtcbiAgICBpZiAoUmEoZSkpXG4gICAgICByZXR1cm4gcWEoZSk7XG4gICAgaWYgKE1hKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChVYShlKSlcbiAgICAgIHJldHVybiB6YShlKTtcbiAgICBpZiAoeGEoZSkpXG4gICAgICByZXR1cm4gSGEoZSk7XG4gIH1cbiAgdGhyb3cgTGEoZSk7XG59XG5mdW5jdGlvbiAkYShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtxdF0oKTtcbiAgICBpZiAoRyhyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcWEoZSkge1xuICByZXR1cm4gbmV3IG1lKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIHRuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6YShlKSB7XG4gIHJldHVybiBuZXcgbWUoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBvID0gT2UoZSksIGEgPSBvLm5leHQoKTsgIWEuZG9uZTsgYSA9IG8ubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gYS52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyBtZShmdW5jdGlvbih0KSB7XG4gICAgQmEoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbm4oamEoZSkpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYTtcbiAgcmV0dXJuIGxhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IGRhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIG8gPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChhID0gci5yZXR1cm4pID8gWzQsIGEuY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWWEoZSwgdCwgciwgbiwgbykge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgbyA9PT0gdm9pZCAwICYmIChvID0gITEpO1xuICB2YXIgYSA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBvID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQoYSksICFvKVxuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gSmEoZSwgdCkge1xuICB2YXIgciA9IEcoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIG8uZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBtZShuKTtcbn1cbnZhciBaYSA9IGJ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEthKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBhO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgYSA9IHMsIG8gPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbyA/IHIoYSkgOiBuKG5ldyBaYSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBXYShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgUWEgPSBidChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWGEoZSwgdCkge1xuICB2YXIgciA9IFdhKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIG8gPSByLmVhY2gsIGEgPSByLndpdGgsIHMgPSBhID09PSB2b2lkIDAgPyBlaSA6IGEsIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IFRhIDogYywgdSA9IHIubWV0YSwgcCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIG8gPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBiYShmdW5jdGlvbih5LCBfKSB7XG4gICAgdmFyIG0sIGYsIGggPSBudWxsLCBFID0gMCwgUCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGYgPSBZYShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIEdhKHMoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IEVcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgXy5lcnJvcihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgdik7XG4gICAgfTtcbiAgICBtID0geS5zdWJzY3JpYmUoRWEoXywgZnVuY3Rpb24odikge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgRSsrLCBfLm5leHQoaCA9IHYpLCBvID4gMCAmJiBQKG8pO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFFICYmIFAobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBvKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlaShlKSB7XG4gIHRocm93IG5ldyBRYShlKTtcbn1cbmNsYXNzIFplIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIEV0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gSmEoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEthKHRoaXMuX3N1YmplY3QucGlwZShYYShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBybigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBtciA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgdGkgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIHJpID0gKGUpID0+IHRpW2VdLCBUdCA9IHt9LCBvbiA9IGFzeW5jIChlKSA9PiB7XG4gIGlmIChUdFtlXSlcbiAgICByZXR1cm4gVHRbZV07XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKChuKSA9PiBuLmpzb24oKSksIHIgPSBtci5wYXJzZSh0LmVudmlyb25tZW50KTtcbiAgICByZXR1cm4gVHRbZV0gPSByLCByO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbXIuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5mdW5jdGlvbiBFdChlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IFB0ID0gKGUsIHQpID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFtyXSkgPT4gIXQuaW5jbHVkZXMocikpKSwgaiA9ICgpID0+IHtcbiAgaWYgKCEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSlcbiAgICByZXR1cm4gd2luZG93O1xufSwganQgPSBuZXcgWmUoKSwgeXIgPSBcIm9wX21ldHJpY3NfcXVldWVcIiwgbmkgPSAzLCBvaSA9IDMsIGFpID0gMWUzLCB7IGxvZ19fOiBsdCB9ID0gSShcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBpaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDAsIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbHQoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIiksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSwgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGx0KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKSwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCksICh0ID0gaigpKSA9PSBudWxsIHx8IHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQodCwgciwgbikge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBldmVudE5hbWU6IHQsXG4gICAgICBwcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IG4gfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gby50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChvKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0gKHIgPSAodCA9IGooKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogci5nZXRJdGVtKHlyKTtcbiAgICAgIG4gJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKG4pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciB0O1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQubG9jYWxTdG9yYWdlLnNldEl0ZW0oeXIsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCB0ID0gaigpO1xuICAgIHQgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB0LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIGFpKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciB0O1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgodCA9IGooKSkgPT0gbnVsbCB8fCB0LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBqdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbHQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgb2kpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBvID0gcmkodC5lbnZpcm9ubWVudCksIGEgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgbyk7XG4gICAgICAoYXdhaXQgZmV0Y2goYS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGx0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgbmkpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHp0ID0gbmV3IGlpKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICB6dC5hZGRFdmVudChlLCB0LCByKTtcbn0sIHNpID0gKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0sIGFuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IEsoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHNuID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBLKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogKHIgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogci5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAobiA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBuLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIGNpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBqKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCAodCA9IGooKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgYW4pO1xufSwgbGkgPSAoKSA9PiB7XG4gIHZhciBlLCB0O1xuICAoZSA9IGooKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzbiksICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBhbik7XG59O1xudmFyIExyO1xuKExyID0gaigpKSA9PSBudWxsIHx8IExyLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY29uc3QgdWkgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KSwgZGkgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSksIHBpID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgU3QgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgZnIoKSB8fCBhd2FpdCBDdCg1MDApO1xuICBpZiAoIWZyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgX2kgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgU3QoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBtaSA9IGFzeW5jIChlLCB0LCByLCBuLCBvKSA9PiB7XG4gIGNvbnN0IGEgPSBhd2FpdCBTdChlKSwgcyA9IHBpW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gYS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEN0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgZnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgeWkgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgZmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBTdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBoaSA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBvLCBhLCBzLCBjO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IFN0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAobyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBvLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKGEgPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlKSA/PyAoKGMgPSAocyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgZ2kgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIFNlID0gXCIxLjkuMFwiLCBociA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIHdpKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goaHIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBvID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKG8ucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gbCA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBhKGMpIHtcbiAgICByZXR1cm4gci5hZGQoYyksICExO1xuICB9XG4gIGZ1bmN0aW9uIHMoYykge1xuICAgIHJldHVybiB0LmFkZChjKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICBpZiAodC5oYXMobCkpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGwpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gbC5tYXRjaChocik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIGEobCk7XG4gICAgdmFyIHAgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gcC5wcmVyZWxlYXNlICE9IG51bGwgfHwgby5tYWpvciAhPT0gcC5tYWpvciA/IGEobCkgOiBvLm1ham9yID09PSAwID8gby5taW5vciA9PT0gcC5taW5vciAmJiBvLnBhdGNoIDw9IHAucGF0Y2ggPyBzKGwpIDogYShsKSA6IG8ubWlub3IgPD0gcC5taW5vciA/IHMobCkgOiBhKGwpO1xuICB9O1xufVxudmFyIHZpID0gd2koU2UpLCBiaSA9IFNlLnNwbGl0KFwiLlwiKVswXSwgWGUgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBiaSksIGV0ID0gZ2k7XG5mdW5jdGlvbiBIdChlLCB0LCByLCBuKSB7XG4gIHZhciBvO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBhID0gZXRbWGVdID0gKG8gPSBldFtYZV0pICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB7XG4gICAgdmVyc2lvbjogU2VcbiAgfTtcbiAgaWYgKCFuICYmIGFbZV0pIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKGEudmVyc2lvbiAhPT0gU2UpIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYS52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgU2UpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIGFbZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBTZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiB0dChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBldFtYZV0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIXZpKG4pKSlcbiAgICByZXR1cm4gKHIgPSBldFtYZV0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBCdChlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFNlICsgXCIuXCIpO1xuICB2YXIgciA9IGV0W1hlXTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBFaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgUGkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgU2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gemUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gemUoZSwgdCwgcikge1xuICB2YXIgbiA9IHR0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBQaShbXSwgRWkociksICExKSk7XG59XG52YXIgWjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShaIHx8IChaID0ge30pKTtcbmZ1bmN0aW9uIENpKGUsIHQpIHtcbiAgZSA8IFouTk9ORSA/IGUgPSBaLk5PTkUgOiBlID4gWi5BTEwgJiYgKGUgPSBaLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIG8pIHtcbiAgICB2YXIgYSA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIiAmJiBlID49IG8gPyBhLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBaLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBaLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFouSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBaLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBaLlZFUkJPU0UpXG4gIH07XG59XG52YXIga2kgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgYSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGEucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn0sIEFpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIElpID0gXCJkaWFnXCIsIGd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KG8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBhW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBjID0gdHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgcmV0dXJuIGNbb10uYXBwbHkoYywgQWkoW10sIGtpKGEpLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24obywgYSkge1xuICAgICAgICB2YXIgcywgYywgbDtcbiAgICAgICAgaWYgKGEgPT09IHZvaWQgMCAmJiAoYSA9IHsgbG9nTGV2ZWw6IFouSU5GTyB9KSwgbyA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigocyA9IHUuc3RhY2spICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgYSA9PSBcIm51bWJlclwiICYmIChhID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBhXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcCA9IHR0KFwiZGlhZ1wiKSwgeSA9IENpKChjID0gYS5sb2dMZXZlbCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IFouSU5GTywgbyk7XG4gICAgICAgIGlmIChwICYmICFhLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIF8gPSAobCA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgcC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgXyksIHkud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIF8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBIdChcImRpYWdcIiwgeSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIEJ0KElpLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gbmV3IFNpKG8pO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gVGkoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBOaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuc2V0KG4sIG8pLCBhO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIG87XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBSaSA9IG5ldyBOaSgpLCBGaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgTWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgTGkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFJpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBvID0gW10sIGEgPSAzOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKVxuICAgICAgICBvW2EgLSAzXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgTWkoW25dLCBGaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIERpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGEgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBhLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59LCBPaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGE7IG4gPCBvOyBuKyspXG4gICAgKGEgfHwgIShuIGluIHQpKSAmJiAoYSB8fCAoYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgYVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoYSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBOdCA9IFwiY29udGV4dFwiLCBVaSA9IG5ldyBMaSgpLCBZdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBIdChOdCwgdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbywgYSA9IFtdLCBzID0gMzsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgYVtzIC0gM10gPSBhcmd1bWVudHNbc107XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KG8sIE9pKFt0LCByLCBuXSwgRGkoYSksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHQoTnQpIHx8IFVpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBCdChOdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCB4dDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoeHQgfHwgKHh0ID0ge30pKTtcbnZhciBjbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBsbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgamkgPSB7XG4gIHRyYWNlSWQ6IGxuLFxuICBzcGFuSWQ6IGNuLFxuICB0cmFjZUZsYWdzOiB4dC5OT05FXG59LCBLZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGppKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgSnQgPSBUaShcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIFp0KGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoSnQpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHhpKCkge1xuICByZXR1cm4gWnQoWXQuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBLdChlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKEp0LCB0KTtcbn1cbmZ1bmN0aW9uIEdpKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoSnQpO1xufVxuZnVuY3Rpb24gJGkoZSwgdCkge1xuICByZXR1cm4gS3QoZSwgbmV3IEtlKHQpKTtcbn1cbmZ1bmN0aW9uIHVuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IFp0KGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgVmkgPSAvXihbMC05YS1mXXszMn0pJC9pLCBxaSA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gemkoZSkge1xuICByZXR1cm4gVmkudGVzdChlKSAmJiBlICE9PSBsbjtcbn1cbmZ1bmN0aW9uIEhpKGUpIHtcbiAgcmV0dXJuIHFpLnRlc3QoZSkgJiYgZSAhPT0gY247XG59XG5mdW5jdGlvbiBkbihlKSB7XG4gIHJldHVybiB6aShlLnRyYWNlSWQpICYmIEhpKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIEJpKGUpIHtcbiAgcmV0dXJuIG5ldyBLZShlKTtcbn1cbnZhciBSdCA9IFl0LmdldEluc3RhbmNlKCksIHBuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBSdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgbyA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKG8pXG4gICAgICAgIHJldHVybiBuZXcgS2UoKTtcbiAgICAgIHZhciBhID0gbiAmJiB1bihuKTtcbiAgICAgIHJldHVybiBZaShhKSAmJiBkbihhKSA/IG5ldyBLZShhKSA6IG5ldyBLZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhLCBzLCBjO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBjID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAoYSA9IHIsIGMgPSBuKSA6IChhID0gciwgcyA9IG4sIGMgPSBvKTtcbiAgICAgICAgdmFyIGwgPSBzID8/IFJ0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgYSwgbCksIHAgPSBLdChsLCB1KTtcbiAgICAgICAgcmV0dXJuIFJ0LndpdGgocCwgYywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZaShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgSmkgPSBuZXcgcG4oKSwgWmkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBvKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IG87XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhLnN0YXJ0QWN0aXZlU3BhbiwgYSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IEppO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgS2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgcG4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFdpID0gbmV3IEtpKCksIGdyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgWmkodGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBXaTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgcnQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkocnQgfHwgKHJ0ID0ge30pKTtcbnZhciBoZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShoZSB8fCAoaGUgPSB7fSkpO1xudmFyIExlID0gWXQuZ2V0SW5zdGFuY2UoKSwgRnQgPSBcInRyYWNlXCIsIFFpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGdyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gQmksIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gZG4sIHRoaXMuZGVsZXRlU3BhbiA9IEdpLCB0aGlzLmdldFNwYW4gPSBadCwgdGhpcy5nZXRBY3RpdmVTcGFuID0geGksIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSB1biwgdGhpcy5zZXRTcGFuID0gS3QsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSAkaTtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IEh0KEZ0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBndC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0dChGdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBCdChGdCwgZ3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgZ3IoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFVlID0gUWkuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IFhpID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBMZS5hY3RpdmUoKSwgYSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihvLCBhKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBoZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCB1dCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gTGUuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIGE7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBzID0gYSBpbnN0YW5jZW9mIEVycm9yID8gYS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIGE7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIF9uIGV4dGVuZHMgcm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBYaShlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKHRzKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgX24obyk7XG4gIGlmICghZXMobywgcikpIHtcbiAgICBjb25zdCBhID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgZXMgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgdHMgPSAoZSkgPT4gRm8uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIHJzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgenIpLCBGID0gYXN5bmMgKGUpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEhyKSwgd2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEpyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBtbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIEJvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgbnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IHEoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBKcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBWID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFJvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIG9zID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIEJyLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIGFzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBObyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgaXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgcnMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgYSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBpYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBhLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGZlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBpcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBvLmFtb3VudEF0b20sIGN1cnJlbmN5OiBvLmN1cnJlbmN5IH07XG4gIH1cbn0sIHluID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBxKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgQW8pXG4gICAgKVxuICApO1xufSwgd3IgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICBRZSxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIHNzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgQnIsIFwic2V0dXBfY2hlY2tvdXRcIiksIFd0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgUWUsIFwicGVyZm9ybV9jaGVja291dFwiKSwgZm4gPSAxZTMsIGNzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBmbixcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgbyA9IGF3YWl0IHEobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIElvKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgbyksIG87XG59LCBrdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBKbyxcbiAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4pLCBobiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBxKFxuICAgICAgZSxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiB0IH0gfSxcbiAgICAgIFlvXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAocikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEsocikpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufSwgbHMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogdCB9IH0sXG4gIFpvXG4pLCB1cyA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgZHMgPSAoZSwgdCkgPT4gISFlICYmIHQsIGduID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB3biA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgV2UgPSAzMiwgcHMgPSAxNiwgdm4gPSAxMCwgdnIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgQ2U7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShDZSB8fCAoQ2UgPSB7fSkpO1xuY2xhc3MgSGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gX3MoZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogV2UpO1xuICByZXR1cm4gdCA9PT0gV2UgJiYgKHQgPSBXZSAtIDEpLCB3bi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBtcyhlKSB7XG4gIGNvbnN0IHQgPSB5cygpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IEhlKENlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIHlzKCkge1xuICByZXR1cm4gZ3MoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBmcyhlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9IF9zKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBocyhlLCB0ID0gdm4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBIZShDZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiB2cilcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7dnJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBvID0gdDsgbyA+IDA7IG8tLSlcbiAgICByID0gZSAlIFdlLCBuID0gd24uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyBXZTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBncygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIHdzKGUsIHQpIHtcbiAgY29uc3QgciA9IG1zKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4gaHMobiwgdm4pICsgZnMocHMsIHIpO1xufVxuY29uc3QgYm4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgRW4gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoYm4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gd3MoKTtcbiAgcmV0dXJuIHZzKHQpLCB0O1xufSwgdnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke2JufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn0sIGJzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG8gPSBPci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W29dID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFtvXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIFkgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChvLCBhKSA9PiB7XG4gIGNvbnN0IHMgPSBhLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgaWYgKCFzKSByZXR1cm4gbztcbiAgY29uc3QgYyA9IGEudHlwZSA9PT0gXCJjaGVja2JveFwiID8gYS5jaGVja2VkIDogYS52YWx1ZTtcbiAgcmV0dXJuIHsgLi4ubywgW3NdOiBjIH07XG59LCB7fSksIEVzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU28ucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCB0KSwgdDtcbiAgfVxufSwgUHMgPSBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgUG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke1BzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGEgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGEgfTtcbn07XG5mdW5jdGlvbiBTcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBhd2FpdCBjcyhlLCByKTtcbiAgICAgIGEgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoYSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgZm4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIENzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogTy5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBhdChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gUG4odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGEgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IFNzKG4uaWZyYW1lLCBhLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBDcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBTbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBhdChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBPLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBPLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gTy5TVUNDRVNTICYmIEV0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwga3MgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBDbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IEkoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBrcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBhcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGEoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKEsodSkpLCBjbGVhckludGVydmFsKGwpLCBzKEsodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogQXMsIGVycl9fOiBRdCB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgSXMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgVHMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gSXMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBRdChuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBrbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBOcyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gQXMoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFF0KHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7Syh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBBbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBUcyh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIG8gPSBOcyhuLmhyZWYgPz8gXCJcIiksIGEgPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoYSAhPT0gbykge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7b30pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHthfSkuYDtcbiAgICB0aHJvdyBRdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBvLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgSW4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFRuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgVSA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcblUuRW51bS5zdHJpcGU7XG5jb25zdCBObiA9ICh7XG4gIHNjcmlwdElkOiBlLFxuICBzcmM6IHQsXG4gIGNoZWNrTG9hZGVkRm46IHJcbn0pID0+IHtcbiAgY29uc3QgbiA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBhKSA9PiB7XG4gICAgbGV0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHMuc3JjID0gdCwgcy5pZCA9IGUsIHMuYXN5bmMgPSAhMDtcbiAgICBjb25zdCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgcigpID8gbygpIDogYyA/IHMgPSBjIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgbygpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBYdCA9ICgpID0+IE5uKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBlciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBvID0gdC5zaGlwcGluZ0NvbnRhY3QsIGEgPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBvKSB7XG4gICAgYVtkLkVNQUlMXSA9IGFbZC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgYVtkLkNPVU5UUlldID0gYVtkLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgYVtkLlpJUF9DT0RFXSA9IGFbZC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBhW2QuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IGFbZC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKGFbZC5GSVJTVF9OQU1FXSA9IHMsIGFbZC5MQVNUX05BTUVdID0gYykgOiAoYVtkLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBhW2QuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBhO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBScyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgZ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIEZzID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgbyA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdHIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBvLCB0b3RhbDogYSB9ID0gRnMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBhLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBScyh7XG4gICAgICB0b3RhbDogYSxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBNcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgb2UgPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbZC5MSU5FMV0sXG4gIGxpbmUyOiBlW2QuTElORTJdLFxuICBsaW5lMzogZVtkLkxJTkUzXSxcbiAgY2l0eTogZVtkLkNJVFldLFxuICBzdGF0ZTogZVtkLlNUQVRFXSxcbiAgY291bnRyeTogZVtkLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtkLlpJUF9DT0RFXVxufSksIGFlID0gKGUsIHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUxOiBlW2QuU0hJUFBJTkdfTElORTFdLFxuICAgICAgbGluZTI6IGVbZC5TSElQUElOR19MSU5FMl0sXG4gICAgICBsaW5lMzogZVtkLlNISVBQSU5HX0xJTkUzXSxcbiAgICAgIGNpdHk6IGVbZC5TSElQUElOR19DSVRZXSxcbiAgICAgIHN0YXRlOiBlW2QuU0hJUFBJTkdfU1RBVEVdLFxuICAgICAgY291bnRyeTogZVtkLlNISVBQSU5HX0NPVU5UUlldLFxuICAgICAgemlwX2NvZGU6IGVbZC5TSElQUElOR19aSVBfQ09ERV1cbiAgICB9O1xufSwgeyBsb2dfXzogRWwsIGVycl9fOiBSbiB9ID0gSShcImNvbW1vblwiKSwgaXQgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCAkID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gdC5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBSbihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiB0LnBhcnNlKHIpO1xufSwgcnIgPSAoZSwgdCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShlKSxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKGUsIHQpXG59KSwgQWUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IGl0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IG9zKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBSbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgdChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBvZShlLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KGUuYW55Q2RlQ29ubmVjdGlvbiwgbykgfTtcbiAgfVxufSwgTHMgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCBEcyA9IHouZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogamUsIGVycl9fOiBudCB9ID0gSShcImFkeWVuLWNjXCIpLCBPcyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IExzLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KSwgRm4gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFVzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IE9zLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbnQoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiB0LmRhdGE7XG59LCBqcyA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBiciA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCB4cyA9IGFzeW5jICgpID0+IHtcbiAgamUoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIGJyKCkgfHwgYXdhaXQgQ3QoNTAwKTtcbiAgaWYgKCFicigpKVxuICAgIHRocm93IG50KFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiBqZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIEdzID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiB0LCBsb2NhbGU6IHIsIGNvdW50cnlDb2RlOiBuLCBjb21wb25lbnQ6IG8sIGhvc3Q6IGEsIGNhbmNlbEJ1dHRvbjogcyB9ID0gZSwgYyA9IGpzKHRbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gamUoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgamUoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyksIGEucmVtb3ZlKCk7XG4gICAgfSwgcCA9IChmKSA9PiB7XG4gICAgICBudChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBmKSwgbCh7IHN0YXR1czogTy5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIHkgPSAoZikgPT4ge1xuICAgICAgbnQoXCJBZHllbiBlcnJvcjpcIiwgZiksIGwoeyBzdGF0dXM6IE8uRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogTy5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKTtcbiAgICBjb25zdCBtID0gKGYsIGgsIEUpID0+IHtcbiAgICAgIGEucmVtb3ZlKCksIGwoeyBzdGF0dXM6IE8uU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IGYsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICB4cygpLnRoZW4oXG4gICAgICAoZikgPT4gZih7XG4gICAgICAgIGNsaWVudEtleTogdFtcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiB0W1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogcixcbiAgICAgICAgY291bnRyeUNvZGU6IG4sXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IG0sXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogcCxcbiAgICAgICAgb25FcnJvcjogeVxuICAgICAgfSlcbiAgICApLnRoZW4oKGYpID0+IHtcbiAgICAgIGYuY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChvKTtcbiAgICB9KTtcbiAgfSk7XG59LCAkcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgciA9IGUgPz8gdCwgbiA9IERzLnNhZmVQYXJzZShyKTtcbiAgcmV0dXJuIG4uc3VjY2VzcyA/IChqZShgUmVzb2x2ZWQgbG9jYWxlOiAke24uZGF0YX1gKSwgbi5kYXRhKSA6IChudChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7cn0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBNbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgTG4gPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gVXModCksIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBvLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBhLCBpZnJhbWU6IHMsIGNhbmNlbEJ1dHRvbjogYyB9ID0gUG4oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIHMucmVwbGFjZVdpdGgobyk7XG4gIGNvbnN0IGwgPSBhd2FpdCBHcyh7XG4gICAgaGVhZGVyczogbixcbiAgICBsb2NhbGU6ICRzKHIpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogbyxcbiAgICBob3N0OiBhLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gTy5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IE8uQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IE8uU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gamUoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBFdChsLnN0YXR1cyk7XG59LCBEbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBPbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzogVnMsIGVycl9fOiBxcyB9ID0gSShcImNvbW1vbi1jY1wiKSwgenMgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlOiBlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzOiB0LFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzczogcixcbiAgcGF5bWVudF9tZXRob2Q6IG5cbn0pID0+IHtcbiAgY29uc3QgbyA9IHt9O1xuICByZXR1cm4gbiA9PT0gXCJhY2hcIiAmJiAob1tkLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgb1tkLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pKSwgZSAmJiAob1tkLlpJUF9DT0RFXSA9IEMpLCB0ICYmIChvW2QuTElORTFdID0gQywgb1tkLkNJVFldID0gQywgb1tkLlNUQVRFXSA9IEMsIG9bZC5DT1VOVFJZXSA9IEMsIG9bZC5aSVBfQ09ERV0gPSBDKSwgciAmJiAob1tkLlNISVBQSU5HX0xJTkUxXSA9IEMsIG9bZC5TSElQUElOR19DSVRZXSA9IEMsIG9bZC5TSElQUElOR19TVEFURV0gPSBDLCBvW2QuU0hJUFBJTkdfQ09VTlRSWV0gPSBDLCBvW2QuU0hJUFBJTkdfWklQX0NPREVdID0gQyksIE9iamVjdC5rZXlzKG8pLmxlbmd0aCA9PT0gMCA/IERlIDogRGUuZXh0ZW5kKG8pO1xufSwgSHMgPSAoZSwgdCwgciA9IHt9KSA9PiB7XG4gIGlmIChyKSB7XG4gICAgVnMoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIGNvbnN0IGEgPSBPYmplY3Qua2V5cyhyKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IGEubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IGMgPSBhW3NdLCBsID0gcltjXTtcbiAgICAgIGVbY10gfHwgKGVbY10gPSBsKTtcbiAgICB9XG4gIH1cbiAgZVtkLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIWVbZC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddLCBlW2QuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSAmJiAoZVtkLlNISVBQSU5HX0xJTkUxXSA9IGVbZC5MSU5FMV0sIGVbZC5TSElQUElOR19MSU5FMl0gPSBlW2QuTElORTJdLCBlW2QuU0hJUFBJTkdfTElORTNdID0gZVtkLkxJTkUzXSwgZVtkLlNISVBQSU5HX0NJVFldID0gZVtkLkNJVFldLCBlW2QuU0hJUFBJTkdfU1RBVEVdID0gZVtkLlNUQVRFXSwgZVtkLlNISVBQSU5HX0NPVU5UUlldID0gZVtkLkNPVU5UUlldLCBlW2QuU0hJUFBJTkdfWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSk7XG4gIGNvbnN0IG8gPSB6cyhyKS5zYWZlUGFyc2UoZSk7XG4gIGlmICghby5zdWNjZXNzKSB7XG4gICAgY29uc3QgYSA9IG8uZXJyb3IuZm9ybWF0KCksIHMgPSBicyhhKSwgYyA9IE9iamVjdC5rZXlzKHMpO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgYy5sZW5ndGg7IGwrKykge1xuICAgICAgY29uc3QgdSA9IGNbbF0sIHAgPSBzW3VdO1xuICAgICAgdCh1LCBwLCB1KTtcbiAgICB9XG4gICAgdGhyb3cgcXMoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gby5kYXRhO1xufSwgeyBsb2dfXzogQnMsIGVycl9fOiBZcyB9ID0gSShcImNvbW1vbi1jY1wiKSwgVyA9IEhzLCBVbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBvID0geHIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgICAgICBZcyhgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGEgPSBvLmRhdGE7XG4gICAgICAgICAgdChhLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBCcyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogSnMgfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gWnMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQga3QodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEtzKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBXKFxuICAgICAgYSxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIHMsXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogUW4oKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoby50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChKcyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpLCAhKChuID0gKHIgPSBjLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHUgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodSksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGMsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEJlLCBlcnJfXzogam4gfSA9IEkoXCJhZHllbi1hcHBsZS1wYXlcIiksIFdzID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoQmUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChCZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBqbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIFFzID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgYSA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBEbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgbSA9IHtcbiAgICAgIHNlc3Npb246IF8sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogcCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG8sXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBQdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCBFKSA9PiB7XG4gICAgICBjb25zdCBQID0gKCkgPT4ge1xuICAgICAgICBCZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIEUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFpzKHYsIG0pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdiA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgS3ModiwgbSk7XG4gICAgICAgICAgaChTKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIEUoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25jYW5jZWwgPSBQLCBfLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgJGUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogbyxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgeSwgXztcbiAgY29uc3QgYyA9ICgoeSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5hbW91bnRBdG9tKSA/PyAobyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gby5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogYSAhPSBudWxsICYmIGEucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBhICE9IG51bGwgJiYgYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBhLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4ucCwgLi4uYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdChwKSB9IDogeyAuLi5wLCAuLi5hLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBwO1xufSwgbnIgPSAoKSA9PiBObih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBNdCA9IG51bGw7XG5jb25zdCBvciA9IGFzeW5jIChlKSA9PiBhd2FpdCBvbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBWZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBvcihlKTtcbiAgcmV0dXJuIE10ID09PSBudWxsICYmIChNdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIE10O1xufSwgeG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gR3IucGFyc2UodCkgOiBudWxsO1xufSwgYXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgYSwgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAoYSA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBhLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBvID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLnBdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHkgPSBwLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltkLkxJTkUxXSA9IHJbZC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW2QuTElORTJdID0gcltkLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5MSU5FM10gPSByW2QuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltkLkNJVFldID0gcltkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNUQVRFXSA9IHJbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLkNPVU5UUlldID0gcltkLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW2QuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltkLkxBU1RfTkFNRV0gfHwgeSB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW2QuRklSU1RfTkFNRV0gPSBfLCByW2QuTEFTVF9OQU1FXSA9IG0pIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gbyAmJiAocltkLlNISVBQSU5HX0xJTkUxXSA9IHJbZC5TSElQUElOR19MSU5FMV0gfHwgby5hZGRyZXNzMSB8fCBcIlwiLCByW2QuU0hJUFBJTkdfTElORTJdID0gcltkLlNISVBQSU5HX0xJTkUyXSB8fCBvLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5TSElQUElOR19MSU5FM10gPSByW2QuU0hJUFBJTkdfTElORTNdIHx8IG8uYWRkcmVzczMgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NJVFldID0gcltkLlNISVBQSU5HX0NJVFldIHx8IG8ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbZC5TSElQUElOR19aSVBfQ09ERV0gfHwgby5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltkLlNISVBQSU5HX1NUQVRFXSA9IHJbZC5TSElQUElOR19TVEFURV0gfHwgby5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NPVU5UUlldID0gcltkLlNISVBQSU5HX0NPVU5UUlldIHx8IG8uY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IG5lLCBlcnJfXzogTmUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBYcyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBPbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgbmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChuZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKF8gPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IG9yKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIG5lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBGKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gJGUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBWZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBuZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBOZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE4uYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBOZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBlYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCBFLCBQLCB2LCBTLCBBLCBMO1xuICAgIG5lKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBvLCBsID0gYS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHAgPSBhd2FpdCBGKHUpLCB5ID0gJGUoe1xuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogYS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IFB0KHAsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBfID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgayA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgbmUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBrKTtcbiAgICAgIGNvbnN0IE0gPSBhcihyLCBrKSwgSiA9IFcoXG4gICAgICAgIE0sXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmIChnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uSlxuICAgICAgfSksICEoKGYgPSAobSA9IGsucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBzZSA9IGF3YWl0IHdlKHUsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogSltkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEpbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogSltkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShKKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKEosIHAuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgYmUgPSB4bihzZSk7XG4gICAgICBuZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGJlKTtcbiAgICAgIGxldCB6ID0gYXdhaXQgVih1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IFFuKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoRSA9IChoID0gay5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB6KTtcbiAgICAgIGxldCBfZSA9ICh2ID0gKFAgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IFBbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgVGUgPSAoUyA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKChxZSkgPT4gcWUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoVGUgJiYgVGUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIG5lKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgVGUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogcWUgfSA9IGF3YWl0IGF0KHtcbiAgICAgICAgICB1cmw6IFRlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cWV9XWApLCBxZSA9PT0gTy5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChxZSA9PT0gTy5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFRlICYmICFfZSAmJiAoeiA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBUZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgbmUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgeiksIF9lID0gKEwgPSAoQSA9IHoucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEwuaWQpLCAhX2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogSixcbiAgICAgICAgY29uZmlybVJlc3VsdDogeixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaykge1xuICAgICAgdGhyb3cgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgayksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjoga1xuICAgICAgfSksIG5ldyBFcnJvcigoayA9PSBudWxsID8gdm9pZCAwIDogay5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBJZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBwdCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiB0YyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBrdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiByYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBwdChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYXQoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAocHQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBPLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IE8uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IFYodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwdChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gbmMoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gZXIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IFcoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UodSksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIHUsXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghXylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IG0gPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHB0KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbSk7XG4gICAgbGV0IGYgPSAobiA9IChyID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZDtcbiAgICBjb25zdCBoID0gKG8gPSBtLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmluZChcbiAgICAgIChQKSA9PiBQLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmIChtID0gYXdhaXQgcmMoaCwgdCksIGYgPSAocyA9IChhID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBhWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgRSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChFKSwgQWUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IG0sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFllLCBlcnJfXzogR24gfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpLCBvYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChZZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKFllKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBGKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE4uYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBHbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIF8pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBhYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGEgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRihsKSwgcCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gdHIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGEubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogUHQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgY29uc3QgUCA9ICgpID0+IHtcbiAgICAgICAgWWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSBQLCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGModiwgbSk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICBFKFMpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnkudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih2KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBuYyh2LCBtKTtcbiAgICAgICAgICBoKFMpO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBHbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IFgsIGVycl9fOiBSZSB9ID0gSShcImF3eC1nb29nbGUtcGF5XCIpLCBpYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIFgoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChYKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgbnIoKSwgISgoXyA9ICh5ID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIFJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgb3IoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBSZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgWChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbSA9ICRlKHtcbiAgICAgICAgcHJlZmlsbDogYyxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG8ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogby5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBmID0gYXdhaXQgVmUoZS5iYXNlVXJsLCBtKSwgeyByZXN1bHQ6IGggfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KG0pO1xuICAgICAgaWYgKCFoKVxuICAgICAgICByZXR1cm4gWChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBSZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE4uYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIHNjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIGYsIGgsIEUsIFAsIHYsIFM7XG4gICAgWChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKSwgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gbywgbCA9IGEubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgRih1KSwgeSA9ICRlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBhLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogUHQocCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBWZShlLmJhc2VVcmwsIHkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoeSk7XG4gICAgICBYKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQSk7XG4gICAgICBjb25zdCBMID0gYXIociwgQSksIGsgPSBXKFxuICAgICAgICBMLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBYKFwiX19fXCIsIGspLCBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ua1xuICAgICAgfSk7XG4gICAgICBjb25zdCBNID0gKGYgPSAobSA9IEEucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuO1xuICAgICAgaWYgKCFNKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IEogPSBhd2FpdCB3ZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoayksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShrLCBwLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEllKClcbiAgICAgIH0pLCB2ZSA9IHhuKEopO1xuICAgICAgWChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCBzZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBNXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFgoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSk7XG4gICAgICBsZXQgYmUgPSAoRSA9IChoID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICBjb25zdCB6ID0gKFAgPSBzZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBQLmZpbmQoXG4gICAgICAgIChfZSkgPT4gX2UudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoeiAmJiB6LnJlZGlyZWN0X3VybCkge1xuICAgICAgICBYKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgeik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBfZSB9ID0gYXdhaXQgYXQoe1xuICAgICAgICAgIHVybDogei5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoWChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7X2V9XWApLCBfZSA9PT0gTy5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChfZSA9PT0gTy5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHogJiYgIWJlICYmIChzZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiB6LnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB6LmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIFgoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSksIGJlID0gKFMgPSAodiA9IHNlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiBTLmlkKSwgIWJlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBrLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBzZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCAkbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFZuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBjYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBrdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGxjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBXKGEsIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCB3ZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbZC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFxuICAgICAgICBzLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShvLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgVih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChuID0gKHIgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocCksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChhKSwgbztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogX3QsIGVycl9fOiBxbiB9ID0gSShcImF1dGhuZXQtYXBwbGVwYXlcIiksIHVjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChfdChcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBfdChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gX3QoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogX1xuICAgICAgICB9KSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIGRjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogYSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCAkbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIEUpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIF90KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgRShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKFApID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjYyhQLCBtKTtcbiAgICAgICAgfSBjYXRjaCAodikge1xuICAgICAgICAgIEUodik7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFAgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUCk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2ID0gYXdhaXQgbGMoUCwgbSk7XG4gICAgICAgICAgaCh2KTtcbiAgICAgICAgfSBjYXRjaCAodikge1xuICAgICAgICAgIEUodik7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBQZSwgZXJyX186IEplIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIHBjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBwLCB5O1xuICAgIFBlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBWbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gSmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChQZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKHkgPSAocCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBwLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBKZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoYSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSAkZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IFZlKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiBmIH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICghZilcbiAgICAgICAgcmV0dXJuIFBlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIEplKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IGZlKGEsIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBfYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCBFO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG8sIGwgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pLm1ldGFkYXRhLCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgRih1KSwgeSA9ICRlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiByLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBjb25zdCBfID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgUCA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgUGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBQKTtcbiAgICAgIGNvbnN0IHYgPSBhcih0LCBQKSwgUyA9IFcodiwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgQSA9IChmID0gKG0gPSBQLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghQSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBMID0gYXdhaXQgd2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1tkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKFMpLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoUywgcC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgICB9KTtcbiAgICAgIFBlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEwpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShBKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoRSA9IChoID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBTLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChQKSB7XG4gICAgICB0aHJvdyBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBQKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBQXG4gICAgICB9KSwgbmV3IEVycm9yKChQID09IG51bGwgPyB2b2lkIDAgOiBQLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IG1jLCBlcnJfXzogem4gfSA9IEkoXCJwb2NreXQtY2NcIiksIHljID0gei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSksIGZjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHljLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgem4obiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgSG4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIG1jKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyB6bihyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke0sodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgR3QgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBoYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBnYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBmYyh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBIbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogRXIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIHdjID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIEJuID0gYXN5bmMgKGUpID0+IHtcbiAgZyhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLmVcbiAgfSksIEVyKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke2UuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBoaShlKSwgZyhcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEVyKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgdmMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gd2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogdC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiB0LmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59LCBiYyA9IDQsIHsgbG9nX186IGtlLCBlcnJfXzogd3QgfSA9IEkoXCJ1bmlmaWVkLWNjXCIpLCBFYyA9IGFzeW5jICh7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiBvXG59KSA9PiB7XG4gIGtlKFwi4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihhKTtcbiAga2UoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgY29uc3QgYyA9IFcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogRW4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITAsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWRcbiAgfTtcbiAgd3QobywgbCksIGtlKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHUgPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgfSk7XG4gIFVuKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgcCA9IGF3YWl0IG1uKGEsIGwpO1xuICBpZiAoa2UoXCLilJwgc3RhcnRQZiByZXN1bHRcIiwgcCksIHAuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICByZXR1cm4gWW4ocy5tb2RlLCBwKTtcbiAgaWYgKCFwLmNoZWNrb3V0X2F0dGVtcHRfaWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgcmV0dXJuIFBjKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIHByZWZpbGw6IHMsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbCxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHAsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IHAuY2hlY2tvdXRfYXR0ZW1wdF9pZFxuICB9KTtcbn0sIFBjID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQ6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBuLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBvLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IGEsXG4gICAgc3RhcnRQZlJlc3VsdDogcyxcbiAgICBjaGVja291dEF0dGVtcHRJZDogY1xuICB9ID0gZTtcbiAgbGV0IGwgPSBzO1xuICBmb3IgKGxldCB1ID0gMDsgdSA8IGJjOyB1KyspIHtcbiAgICBrZShg4pScIFJ1bm5pbmcgY29uZmlybSBsb29wIGl0ZXJhdGlvbiAke3V9YCksIGcoXCJ1bmlmaWVkX2NjX2NvbmZpcm1fbG9vcF9pdGVyYXRpb25cIiwgeyBpdGVyYXRpb246IHUgfSk7XG4gICAgY29uc3QgeyB1c2VyQWN0aW9uOiBwIH0gPSBrYyhsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IGF3YWl0IFNjKHQuYmFzZVVybCwgcCwgciwgbik7XG4gICAgICBvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgICAuLi5vLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi55Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH0sIGtlKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKTtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICBjb25zdCBfID0gSyh5KTtcbiAgICAgIHd0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBvLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIGtlKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBZbihyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIFNjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBCbih2Yyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoa24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgQW4oZSwgdCkgfSB9O1xuICAgIGlmIChNbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IExuKFxuICAgICAgICBuW2QuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoQ2ModCkpXG4gICAgICByZXR1cm4gYXdhaXQgWm4oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgQ2MgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKbihbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBrYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBLby5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyB3dChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgd3QoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBZbiA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogVCwgZXJyX186IFByIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBBYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmO1xuICAgIFQoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihhKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi50LFxuICAgICAgcHJlZmlsbDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGMgPSAoKG0gPSBzLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncykgPT0gbnVsbCA/IHZvaWQgMCA6IG0udW5pZmllZF9jYykgPz8gMDtcbiAgICBUKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQoYyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpLCB1ID0gbCA8IGMsIHAgPSB7XG4gICAgICByb2xsOiBsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBjLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gVChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgcCksIEVjKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgVChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHApLCBUKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgeSA9IFcoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnlcbiAgICB9KTtcbiAgICBjb25zdCBfID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogeSxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICExLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogby5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgVChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChVbihoLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIFQoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cy50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IEUgPSBhd2FpdCBzcyhhLCBfKTtcbiAgICAgICAgcmV0dXJuIFQoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtFLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogRSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVChg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IEUgPSBhd2FpdCB3cihhLCBfKTtcbiAgICAgICAgcmV0dXJuIFQoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IEUgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBpZiAoaCBpbnN0YW5jZW9mIF9uICYmIGgub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgVChcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIFQoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgaC5yZXNwb25zZS5oZWFkZXJzKSwgZyhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICAuLi5oLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IEUgPSBoLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgIFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBFICYmIChfLmV4aXN0aW5nX2NjX3BtX2lkID0gRVtcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdLCBUKGDilJwgRXhpc3RpbmcgQ0MgUE0gSUQ6ICR7Xy5leGlzdGluZ19jY19wbV9pZH1gKSk7XG4gICAgICAgIGNvbnN0IFAgPSBoYyhoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoUCkge1xuICAgICAgICAgIFQoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IGdjKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBUKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IE0gPSBhd2FpdCBBbihlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgVChcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IExuKFxuICAgICAgICAgICAgcltkLkNPVU5UUlldLFxuICAgICAgICAgICAgaC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgcy5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSBNO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEEgPSBhd2FpdCBtbihhLCBfKTtcbiAgICAgICAgVChcIuKUnCBTdGFydCBwYXltZW50IGZsb3cgcmVzdWx0OlwiLCBBKTtcbiAgICAgICAgY29uc3QgTCA9ICgoZiA9IGgucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IGZbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIFAgPyBUKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBMID8gKFQoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBCbihJYyhBKSkpIDogKFQoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBabihBLCBlLmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgayA9IEEuY2NfcG1faWQ7XG4gICAgICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIFQoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7a31dYCk7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IFYoYSwge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBUKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIE0pO1xuICAgICAgICAgIGNvbnN0IEogPSBpdChNKTtcbiAgICAgICAgICByZXR1cm4gVChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0oucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBKIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVChg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtMID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IE0gPSBhd2FpdCB3cihhLCB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGssXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBMXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFQoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IE0gfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgUHIoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFByKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgSWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIHVpLnBhcnNlKHQpO1xufSwgVGMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIEpuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUuZmluZCgocikgPT4gVGMuaW5jbHVkZXMoci50eXBlKSk7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFRvLnBhcnNlKHQpO1xufSwgWm4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gSm4oZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICBpZiAoci5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBUKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIiksIGcoXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIFQoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtyLnJlZGlyZWN0X3VybH1dYCksIGcoXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLnJcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzOiBuIH0gPSBhd2FpdCBhdCh7IHVybDogci5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHQgfSk7XG4gIGlmIChUKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gTy5DQU5DRUxMRUQpXG4gICAgdGhyb3cgZyhcIjNkc19jYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gTy5GQUlMVVJFKVxuICAgIHRocm93IGcoXCIzZHNfZmFpbHVyZVwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGcoXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn0sIE5jID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogSCwgZXJyX186IFJjIH0gPSBJKFwibG9vcC1jcnlwdG9cIiksIEZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIEgoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTmMpO1xuICAgIEgoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgSChcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHIubW9kZSA9PT0gXCJzZXR1cFwiLCBvID0gYXdhaXQga3QoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgIH0pLCBhID0gYXdhaXQgZmUoXG4gICAgICBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICByLnRva2VuLFxuICAgICAgbixcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFuICYmICF0Lm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHIuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3IuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7dC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghbyB8fCAhby5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSBvLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjID0gcy5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHMubWluX2F1dGhvcml6YXRpb25fYW1vdW50O1xuICAgIGNvbnN0IHUgPSBzLmFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoO1xuICAgIGxldCBwO1xuICAgIG4gPyAocCA9IDAsIGMgPSBNYXRoLm1heChjLCBsKSkgOiAocCA9IChhID8gYS5hbW91bnRBdG9tIDogci5hbW91bnRfdG90YWxfYXRvbSkgKiBzLnRva2VuX3ByaWNlLCBsID0gTWF0aC5tYXgobCwgcCksIGMgPSBNYXRoLm1heChjLCBsKSk7XG4gICAgY29uc3QgeSA9IHAsIF8gPSB2NCgpLCBtID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogeSxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBjdXN0b21lclJlZklkOiBfLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudDogbCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGg6IHVcbiAgICB9LCBmID0ge1xuICAgICAgYXBpS2V5OiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBtLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGZcbiAgICB9O1xuICB9XG4pLCBNYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIEgoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgSChcImNvbnRleHRcIiwgZSksIEgoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgdCksIEgoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBIKFwiZmxvd0NhbGxiYWNrc1wiLCBuKSwgSChcImN1c3RvbVBhcmFtc1wiLCBvKTtcbiAgICBjb25zdCBhID0gYXdhaXQgRihlLmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIEgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBzID0gVyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGEuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYS5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBycihzLCBhLmNoZWNrb3V0X3NldHRpbmdzKSwgcCA9IGF3YWl0IHdlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgLi4udSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIGlmICghbylcbiAgICAgIHRocm93IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBGYWlsZWQgdG8gcHJvcGVybHkgc3VibWl0IGZvcm0gZGF0YS5cIik7XG4gICAgY29uc3QgeSA9IGF3YWl0IFYoYywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgLy8gVE9ETzogV2UgZG9uJ3QgaGF2ZSBhIHBheWluIG9uIHNldHVwXG4gICAgICB0aGVpcl9wbV9pZDogby5zdWNjZXNzICYmIG8ubW9kZSA9PSBcImNoZWNrb3V0XCIgPyBvLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgLy8gTk9URTogd2UgZG8gaGF2ZSB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBpZCBoZXJlIGV2ZW4gaWYgaXRzIGEgc2V0dXAsIGJ1dCBmb3Igbm93IHdlIGRvbid0IGluY2x1ZGUgaXRcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBjaGVja291dCBhdHRlbXB0IHN1cHBvcnQgZm9yIHNldHVwIGludGVudHMuXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsID8gcC5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IG8uc3VjY2VzcyA/IG8uY3VzdG9tZXIgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfcGF5aW46IG8uc3VjY2VzcyAmJiBvLm1vZGUgPT0gXCJjaGVja291dFwiID8gby5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IG8uc3VjY2VzcyA/IHZvaWQgMCA6IG8uZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogby5zdWNjZXNzID8gdm9pZCAwIDogby5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogby5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEgoYENvbmZpcm0gcmVzdWx0OiAke3l9YCksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBIKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCB5KTtcbiAgICAgIGNvbnN0IF8gPSBpdCh5KTtcbiAgICAgIHJldHVybiBIKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEgoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIXkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IFJjKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgeSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IHkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBFZSwgZXJyX186IExjIH0gPSBJKFwicGF5cGFsXCIpLCBLbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KSwgRGMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBLbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gTi5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIE9jID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIEVlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBGKGEpLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IG8uc2V0dGluZ3MgPz8ge307XG4gICAgICBFZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gS24ucGFyc2Uocik7XG4gICAgICBFZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBwID0gVyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIHkgPSBycihwLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIEVlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgbSA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogX1xuICAgICAgICB9LFxuICAgICAgICAuLi55XG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBFID0gYnRvYShKU09OLnN0cmluZ2lmeShmKSksIFAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IEVcbiAgICAgIH0pLCB2ID0gYCR7aH0/JHtQLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBFZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2LCBhd2FpdCBDdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IENuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhLFxuICAgICAgICBfLFxuICAgICAgICB2XG4gICAgICApO1xuICAgICAgRWUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBBID0gR3QoUy5ocmVmLCBcImNhdHRcIiksIEwgPSBHdChTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgayA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBBIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IEwgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEVlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGspLCBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHAsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGssXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdGhyb3cgTGMoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBhKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBhIH0pLCBuZXcgRXJyb3IoKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogY2UsIGVycl9fOiBTciB9ID0gSShcInBvY2t5dC1wYXlwYWxcIiksIFduID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgVWMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBqYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBrLCBNO1xuICAgIGNlKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoYSk7XG4gICAgY2UoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBXbi5wYXJzZSh0KTtcbiAgICBjZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MsIHUgPSBXKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gcnIodSwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgY2UoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCB5ID0gdjQoKSwgXyA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBtID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBfLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBfID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChrID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBrLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiB5XG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0sIGYgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KG0pKSwgRSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIFAgPSBgJHtmfT8ke0UudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoTSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgTS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBjZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBQLCBhd2FpdCBDdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNlKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBjZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCB2ID0gYXdhaXQgQ24oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgYSxcbiAgICAgIHksXG4gICAgICBQXG4gICAgKTtcbiAgICBjZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB2KTtcbiAgICBjb25zdCBTID0gSG4odi5ocmVmKSwgQSA9IEd0KHYuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghQSlcbiAgICAgIHRocm93IFNyKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB2LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgY2UoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7U31gKTtcbiAgICBjb25zdCBMID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUyxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IF8gPyBBIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKGNlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEwpLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEwucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgU3IoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBMKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIENyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHgsIGVycl9fOiB4YyB9ID0gSShcInN0cmlwZS1saW5rXCIpLCBHYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksICRjID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIFZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB4KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdjKTtcbiAgICB4KFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgRihvKSwgcyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIHgoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGZlKG8sIGEudG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgX2kobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICB4KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBwID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgeSA9ICgpID0+IHtcbiAgICAgIHAubW91bnQoYCMke0NyfWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBwLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8geChcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoeChcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgeSgpKSwgcC5vbihcImNsaWNrXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBpZiAoeChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgeChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbS5yZXNvbHZlKCk7XG4gICAgfSksIHAub24oXCJjb25maXJtXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICB4KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBtKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBtLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZi5lcnJvciA/ICh4YyhcImVycm9yXCIsIGYuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoZi5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoeChcInBheW1lbnRNZXRob2RcIiwgZi5wYXltZW50TWV0aG9kKSwgTi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IGYucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IHksXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgSGMoQ3IpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgcWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB4KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBGKGEpO1xuICAgIHgoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSB6YyhyLCBvLnN0cmlwZVBNKSwgbCA9IFcoYywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubFxuICAgIH0pLCB4KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCB3ZShhLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogby5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbFtkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBsW2QuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShsKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSk7XG4gICAgeChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCB5ID0gJGMucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHgoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB5XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBpdChfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB4KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBsW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IG9lKGwpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGxbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXdChhLCBfKSB9O1xuICAgIH1cbiAgfVxuKSwgemMgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgcCwgeSwgXztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4ub10gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltkLkVNQUlMXSA9IHJbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChwID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogcC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAoKHkgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogeS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKChfID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBzID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIHMgfHwgYyA/IChyW2QuRklSU1RfTkFNRV0gPSBzLCByW2QuTEFTVF9OQU1FXSA9IGMpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgeChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIEhjID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogQiwgZXJyX186IEJjIH0gPSBJKFwic3RyaXBlLXByXCIpLCBZYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIEpjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEIoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFljKTtcbiAgICBCKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBGKG4pLCBhID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQihcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgZmUobiwgby50b2tlbiwgYSwgdm9pZCAwKSwgYyA9IGF3YWl0IG1pKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgYVxuICAgICk7XG4gICAgQihcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBCYyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgQihcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKHAsIHkpID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBwLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgWmMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgIGluaXRSZXN1bHQ6IGFcbiAgfSkgPT4ge1xuICAgIGlmIChCKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgby5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7by5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGEucHI7XG4gICAgaWYgKG8gIT0gbnVsbCAmJiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBCKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBXYyhjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgQihcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgeWkoYyk7XG4gICAgQihcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEIoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBLYyhyLCBsKSwgcCA9IFcodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ucFxuICAgIH0pLCBCKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgcCk7XG4gICAgY29uc3QgeSA9IGF3YWl0IG5zKHMsIHtcbiAgICAgIGZpZWxkczogcCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdFxuICAgIH0pLCBfID0gUWMoeSk7XG4gICAgQihcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGZpKF8sIGwpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBGKHMpO1xuICAgIGlmIChtLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQihcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCBWKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBpdChmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBCKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogcFtkLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IHBbZC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogcFtkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogb2UocCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKHAsIG0uY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogbS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogbS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KHMsIGYpIH07XG4gICAgfVxuICB9XG4pLCBLYyA9IChlLCB0KSA9PiB7XG4gIHZhciBwLCB5LCBfLCBtO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgoeSA9IChwID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBwLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChtID0gKF8gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBfLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW2QuRklSU1RfTkFNRV0gPSBsLCByW2QuTEFTVF9OQU1FXSA9IHUpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgQihcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIFdjID0gKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBvID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBRYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBkaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBGZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigobykgPT4ge1xuICAgIGNvbnN0IGEgPSByID09PSB2b2lkIDAgPyAhMCA6IG8ucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBvLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBhICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEFjXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IEpjLFxuICAgIHJ1bjogWmNcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFZjLFxuICAgIHJ1bjogcWNcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IFVjLFxuICAgIHJ1bjogamNcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IERjLFxuICAgIHJ1bjogT2NcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGljLFxuICAgIHJ1bjogc2NcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBvYyxcbiAgICBydW46IGFjXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IEZjLFxuICAgIHJ1bjogTWNcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiB1YyxcbiAgICBydW46IGRjXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IHBjLFxuICAgIHJ1bjogX2NcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBYcyxcbiAgICBydW46IGVjXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBXcyxcbiAgICBydW46IFFzXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBYYywgZXJyX186IGVsIH0gPSBJKFwiaW5pdC1mbG93c1wiKSwgdGUgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFplKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IG8gPSBhd2FpdCB0KG4pO1xuICAgICAgICBYYyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBvKSwgci5zZXQobyk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIGVsKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEsobyksIFwiRGV0YWlsczpcIiwgbyksIHIudGhyb3cobywgSyhvKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgdGwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgcmwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogdGUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogdGUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB0ZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgTi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogdGUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiB0ZShcIkxvb3BcIiwgTi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB0ZShcIlBheVBhbFwiLCBOLnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IHRlKFwiUG9ja3l0IFBheVBhbFwiLCBOLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB0ZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE4uYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB0ZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgTi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiB0ZShcIkFkeWVuIEdvb2dsZVBheVwiLCBOLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiB0ZShcIkFkeWVuIEFwcGxlUGF5XCIsIE4uYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IG5sIH0gPSBJKFwiZm9ybS1jYWxsYmFja3NcIiksIHJlID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGtyID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiByZSxcbiAgb25CbHVyOiByZSxcbiAgb25DaGFuZ2U6IHJlLFxuICBvbkxvYWQ6IHJlLFxuICBvbkxvYWRFcnJvcjogcmUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiByZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IHJlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogcmUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcmUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogcmUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiByZVxufSksIGRlID0gY2xhc3MgZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IGFhKHIsIG4gPz8gZGUuTk9PUCwgbmwpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBvO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gZGUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmRlLk5PT1AgPSAoKSA9PiB7XG59LCBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoa3Iua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGRlLk5PT1A7XG4gIH0pLCB0O1xufSwgZGUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZGUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKGtyLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgJHQgPSBkZTtcbmZ1bmN0aW9uIG9sKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBqKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChvKSA9PiBvLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobykgPT4gby5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIGFsKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IGooKTtcbiAgICAgICAgcmV0dXJuICgodCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBvID0gKG4gPSBqKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBhID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gYSA/IGEuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBpbCgpIHtcbiAgY29uc3QgZSA9IG9sKCksIHQgPSBhbChlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBRbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIG8gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgYSA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBvLFxuICAgIGFjY2VwdF9oZWFkZXI6IGFcbiAgfTtcbn07XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZSkpKFIgfHwge30pO1xuei5uYXRpdmVFbnVtKFIpO1xuY29uc3Qgc2wgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IEx0LCBlcnJfXzogY2wgfSA9IEkoXCJ0cmFjZXJcIiksIGxsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICB1bChlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgQXI7XG5jb25zdCB1bCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUR2UmtsN2ZuLSF+ezAwM31+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogbywgV2ViVHJhY2VyUHJvdmlkZXI6IGEgfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRF9ueWtpVFItIX57MDA2fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogYyB9ID0gcywgbCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DN2poMldsbi0hfnswMGJ9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gbCwgcCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DSDljcHFHTy0hfnswMGN9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogeSB9ID0gcCwgXyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1TWGstcUNuby0hfnswMGV9fi5qcycpLCB7IFJlc291cmNlOiBtIH0gPSBfLCBmID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtQnFweWgxT3otIX57MDBofX4uanMnKS50aGVuKChiZSkgPT4gYmUuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0gZiwgRSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1Cc1VUSm1FTS0hfnswMGt9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBQIH0gPSBFLCB2ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURlMDJaMFBNLSF+ezAwbX1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBTLCBCM0luamVjdEVuY29kaW5nOiBBIH0gPSB2LCBMID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURtcnpneTkzLSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBrIH0gPSBMO1xuICBMdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IE0gPSBkbCh0KTtcbiAgTHQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtNfWApO1xuICBjb25zdCBKID0gbmV3IFAoeyB1cmw6IE0gfSksIHZlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGEoe1xuICAgIHJlc291cmNlOiBuZXcgbSh2ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IG8obmV3IG4oKSksXG4gICAgICBuZXcgayhKLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IFMoeyBpbmplY3RFbmNvZGluZzogQS5NVUxUSV9IRUFERVIgfSlcbiAgfSksIHkoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgQXIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBMdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgQXI7XG59LCBkbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn0sIElyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEFwcGxlUGF5LCBlLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBlLmFkeWVuQXBwbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgobykgPT4ge1xuICAgIGNvbnN0IGEgPSBvLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBhICE9IG51bGwgJiYgYS5pc0F2YWlsYWJsZSAmJiByLnB1c2goYSk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBuLnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IHBsKHIsIG8pXG4gIH07XG59LCBUciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhHb29nbGVQYXksIGUuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBlLmFkeWVuR29vZ2xlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKG8pID0+IHtcbiAgICBjb25zdCBhID0gby5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgYSAhPSBudWxsICYmIGEuaXNBdmFpbGFibGUgJiYgci5wdXNoKGEpO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IG4uc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IF9sKHIsIG8pXG4gIH07XG59LCBwbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChvKSA9PiBvLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIF9sID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKG8pID0+IG8ucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY2xhc3MgbWwge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBvKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGEpID0+IHtcbiAgICAgIGlmICghYS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoTnIoYS5vcmlnaW4pICE9PSBOcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEucGVucGFsIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEuc291cmNlICYmIGEuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBFcyhKU09OLnBhcnNlKGEuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgcCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAocCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGEuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIHApO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChhKSA9PiBhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWEuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBhLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBhKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGEubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGEpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGEubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gbztcbiAgfVxufVxuY29uc3QgTnIgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiB5bChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgdXMobik7XG4gIGlmICghZHMobiwgbykpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIGZsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IGhsID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChvKSA9PiB7XG4gICAgaWYgKG8uaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBhID0gby5sb2FkZWRWYWx1ZSwgcyA9IGEuaXNBdmFpbGFibGUgJiYgYS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBhLmlzQXZhaWxhYmxlICYmIGEuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIFJyKFwiYXBwbGVfcGF5XCIsIGEsIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBScihcImdvb2dsZV9wYXlcIiwgYSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIFJyID0gKGUsIHQsIHIsIG4sIG8pID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBZKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBGciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGxlLCBlcnJfXzogUSB9ID0gSShcIm9wLWZvcm1cIiksIHBlID0gY2xhc3MgcGUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIG87XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBaZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgWmUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IFplKCksIHRoaXMuaW5pdEZsb3dzID0gcmwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYSA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBhLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHJ0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihMZS5hY3RpdmUoKSwgcyksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KHVlLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIGxlKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIGxlKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIGxlKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxlKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpLCBsZShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIExlLmFjdGl2ZSgpKSwgcCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIGxlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBscyhwLCB0aGlzLmRldmljZVRva2VuKSwgbGUoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IHBlLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBwLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoeSksIGhsKHRoaXMuaW5pdEZsb3dzLCB5LCB0aGlzLmZvcm1DYWxsYmFja3MpLCBsZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdGwodGhpcy5pbml0Rmxvd3MsIHksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIGxlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7IGNvZGU6IGhlLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gSyhjKTtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIFEoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGEsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSB1ZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gYSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoYSksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoYSksIGEpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChhLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gbm8ucGFyc2UoYSksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBwID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gcC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gcC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChhLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBhLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbdWUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3VlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbdWUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFt1ZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW3VlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1thXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGEpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGEuc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIHNsKGEuc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGEpID0+IHV0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB5bChhLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihhLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGEudHlwZSA9PT0gdWUuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IFEoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHMpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChhKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgUShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB1dChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4uYSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBOLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB1dChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICBpZiAoIWEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IHMsIGlzQXZhaWxhYmxlOiBjIH0gPSBJcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCB7IHByb2Nlc3NvcnM6IGwsIGlzQXZhaWxhYmxlOiB1IH0gPSBUcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCBwID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgeSA9IChwID09IG51bGwgPyB2b2lkIDAgOiBwLmlzQXZhaWxhYmxlKSA/PyAhMSwgXyA9IGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICh2KSA9PiB2LnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIHYucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgKSwgbSA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBmID0gKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uaXNBdmFpbGFibGUpID8/ICExLCBoID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBzLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogbCxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHkgPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB5XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IF8gPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBmID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9XG4gICAgICAgIF0sIEUgPSB7XG4gICAgICAgICAgcGF5cGFsOiBSLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFIuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBSLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogUi5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFIuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFIuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogUi5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW3YsIFNdKSA9PiB7XG4gICAgICAgICAgY29uc3QgQSA9IFMucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBFW3ZdID8/IHYsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiAoQSA9PSBudWxsID8gdm9pZCAwIDogQS5pc0F2YWlsYWJsZSkgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uaF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKGEsIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBRKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHV0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogYSwgc2V0dGluZ3M6IHMgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChhKSB7XG4gICAgICAgICAgICAgIGNhc2UgUi5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gSXIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gVHIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFEoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBRKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFEoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBFdChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgYTtcbiAgICAgIGxlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoYSA9IGooKSkgPT0gbnVsbCB8fCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBsaSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhhKTtcbiAgICB9LCBwZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMlwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9ICR0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBmbCgpLCB0aGlzLmRldmljZVRva2VuID0gRW4oKSwgY2koKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0gaWwoKTtcbiAgICBvbih0aGlzLmJhc2VVcmwpLnRoZW4oKGEpID0+IHtcbiAgICAgIGlmICghanQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBhLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAganQuc2V0KHMpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBsbCh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IG1sKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAobyA9IGooKSkgPT0gbnVsbCB8fCBvLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSBwZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgbyA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAoUShvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKFEobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICEwO1xuICB9XG59O1xucGUub2pzRmxvd3MgPSBOLCBwZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmIChwZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHBlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBwZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIG8pID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gZ24pLm9yaWdpbixcbiAgZm9ybURpdjogbyxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgTXIgPSBwZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChNci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgTXIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBNci5nZXRJbnN0YW5jZSgpID8/IG5ldyBNcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBCdCBhcyBCLCBDYXJkQ3ZjRWxlbWVudCBhcyBDLCBFbGVtZW50c0Zvcm0gYXMgRSwgRmllbGROYW1lIGFzIEYsIEhpIGFzIEgsIExlIGFzIEwsIFBheUluRmFpbGVkIGFzIFAsIFJpIGFzIFIsIFN1Ym1pdE1ldGhvZHMgYXMgUywgVGkgYXMgVCwgVWUgYXMgVSwgWXQgYXMgWSwgWiwgWmkgYXMgYSwgSHQgYXMgYiwgY24gYXMgYywgZG4gYXMgZCwgZ3QgYXMgZSwgQ2FyZEVsZW1lbnQgYXMgZiwgZ3IgYXMgZywgaGUgYXMgaCwgQ2FyZEV4cGlyeUVsZW1lbnQgYXMgaSwgamkgYXMgaiwgQ2FyZE51bWJlckVsZW1lbnQgYXMgaywgbG4gYXMgbCwgRW52aXJvbm1lbnQgYXMgbSwgUGF5SW5TdGF0ZSBhcyBuLCBydCBhcyByLCB0dCBhcyB0LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHYsIHh0IGFzIHgsIHppIGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFB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QUFJekIsR0FBZ0IsVUFBVSxFQUFFLE9BQU95a0IsR0FBc0IsVUFBMEIsZ0JBQUFoakIsR0FBSSxPQUFPLEVBQUUsSUFBSTRpQixJQUFhLFdBQVdoa0IsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBU3lsQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUFya0IsR0FBSW9rQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUQsS0FBMEIsQ0FBQ3JCLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiIsICJjaGFsayIsICJ2NCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZUVmZmVjdCIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJhIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6IiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJDEiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgIkFXWF9MT0FESU5HIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJsb2dfXyIsICJlcnJfXyQxIiwgImNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hIiwgInJlcXVpcmVfemlwX2NvZGUiLCAicmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyIsICJyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyIsICJwYXltZW50X21ldGhvZCIsICJjb25kaXRpb25hbEZpZWxkcyIsICJGaWVsZE5hbWUiLCAiUmVxdWlyZWRTdHJpbmciLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgInZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImRlZmF1bHRGaWVsZFZhbHVlcyIsICJrZXlzIiwgInJlc3VsdCIsICJmb3JtYXR0ZWQiLCAiaXNzdWVzIiwgImlzc3VlS2V5cyIsICJFbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudDIiLCAiUGF5SW5GYWlsZWQiLCAiUGF5SW5GYWlsZWQyIiwgIlBheUluU3RhdGUiLCAiUGF5SW5TdGF0ZTIiLCAiTE9PUF9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3ciLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJjdXN0b21QYXJhbXMiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiWG4iLCAiZW8iLCAidG8iLCAiciIsICJuIiwgImEiLCAicyIsICJybyIsICJvIiwgIkMiLCAiYiIsICJEIiwgImQiLCAiT3IiLCAiVXIiLCAianIiLCAieHIiLCAidWUiLCAibm8iLCAidnQiLCAib28iLCAiaWUiLCAiYW8iLCAiaW8iLCAic28iLCAiY28iLCAibG8iLCAidW8iLCAicG8iLCAiX28iLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAiRGUiLCAiZ28iLCAid28iLCAidm8iLCAiYm8iLCAiRW8iLCAiUG8iLCAiU28iLCAiUWUiLCAiQ28iLCAia28iLCAiQW8iLCAiTyIsICJJbyIsICJUbyIsICJHciIsICJObyIsICJSbyIsICJ3IiwgIkZvIiwgIiRyIiwgIlZyIiwgIk1vIiwgIkxvIiwgIkdlIiwgIkRvIiwgIk9vIiwgInFyIiwgIlVvIiwgImpvIiwgInhvIiwgImlyIiwgInpyIiwgInNyIiwgIkhyIiwgIkdvIiwgIiRvIiwgIm10IiwgIkJyIiwgIlZvIiwgInFvIiwgInpvIiwgIllyIiwgIkhvIiwgIkpyIiwgIkJvIiwgIllvIiwgIkpvIiwgIlpvIiwgIktvIiwgIldvIiwgIlFvIiwgIlhvIiwgImVhIiwgInRhIiwgIkR0IiwgInJhIiwgIm5hIiwgIm9hIiwgIksiLCAiYWEiLCAiaWEiLCAiWnIiLCAic2EiLCAiY2EiLCAiZWUiLCAic2kiLCAiaG4iLCAieWUiLCAiSSIsICJjaGFsayIsICJPdCIsICJnZSIsICJsYSIsICJwIiwgInkiLCAiS3IiLCAiT2UiLCAieXQiLCAiZnQiLCAiTWUiLCAidWEiLCAibSIsICJmIiwgImgiLCAiRSIsICJQIiwgIl8iLCAiZGEiLCAiRyIsICJidCIsICJBdCIsICJodCIsICJvdCIsICJjciIsICJXciIsICJRciIsICJYciIsICJlbiIsICJ0biIsICJsciIsICJkdCIsICJWdCIsICJ5YSIsICJVdCIsICJwYSIsICJJdCIsICJjdCIsICJtYSIsICJxdCIsICJmYSIsICJoYSIsICJtZSIsICJ3YSIsICJ1ciIsICJnYSIsICJ2YSIsICJiYSIsICJFYSIsICJQYSIsICJTYSIsICJybiIsICJkciIsICJDYSIsICJrYSIsICJwciIsICJBYSIsICJfciIsICJJYSIsICJUYSIsICJOYSIsICJSYSIsICJGYSIsICJNYSIsICJMYSIsICJEYSIsICJPYSIsICJVYSIsICJqYSIsICJ4YSIsICJHYSIsICIkYSIsICJWYSIsICJxYSIsICJubiIsICJ6YSIsICJIYSIsICJCYSIsICJZYSIsICJKYSIsICJaYSIsICJLYSIsICJXYSIsICJRYSIsICJYYSIsICJlaSIsICJ2IiwgIlplIiwgIkV0IiwgIm1yIiwgInRpIiwgInJpIiwgIlR0IiwgIm9uIiwgIlB0IiwgImoiLCAianQiLCAieXIiLCAibmkiLCAib2kiLCAiYWkiLCAibHQiLCAiaWkiLCAiYyIsICJ6dCIsICJhbiIsICJzbiIsICJ0IiwgImNpIiwgImxpIiwgIkxyIiwgInVpIiwgImRpIiwgInBpIiwgIlN0IiwgImZyIiwgIkN0IiwgIm1pIiwgInlpIiwgImZpIiwgImhpIiwgImdpIiwgIlNlIiwgImhyIiwgIndpIiwgImwiLCAidSIsICJ2aSIsICJiaSIsICJYZSIsICJldCIsICJIdCIsICJ0dCIsICJCdCIsICJFaSIsICJQaSIsICJTaSIsICJ6ZSIsICJaIiwgIkNpIiwgImtpIiwgIkFpIiwgIklpIiwgImd0IiwgIlRpIiwgIk5pIiwgIlJpIiwgIkZpIiwgIk1pIiwgIkxpIiwgIkRpIiwgIk9pIiwgIk50IiwgIlVpIiwgIll0IiwgInh0IiwgImNuIiwgImxuIiwgImppIiwgIktlIiwgIkp0IiwgIlp0IiwgInhpIiwgIkt0IiwgIkdpIiwgIiRpIiwgInVuIiwgIlZpIiwgInFpIiwgInppIiwgIkhpIiwgImRuIiwgIkJpIiwgIlJ0IiwgInBuIiwgIllpIiwgIkppIiwgIlppIiwgIktpIiwgIldpIiwgImdyIiwgInJ0IiwgImhlIiwgIkxlIiwgIkZ0IiwgIlFpIiwgIlVlIiwgIlhpIiwgInV0IiwgIl9uIiwgInEiLCAidHMiLCAiZXMiLCAicnMiLCAiRiIsICJ3ZSIsICJtbiIsICJucyIsICJWIiwgIm9zIiwgImFzIiwgImlzIiwgImZlIiwgInluIiwgIndyIiwgInNzIiwgIld0IiwgImNzIiwgImNvbm5lY3RUb0NoaWxkIiwgImt0IiwgImxzIiwgInVzIiwgImRzIiwgImduIiwgInduIiwgIldlIiwgInBzIiwgInZuIiwgInZyIiwgIkNlIiwgIkhlIiwgIl9zIiwgIm1zIiwgInlzIiwgImdzIiwgImZzIiwgImhzIiwgIndzIiwgImJuIiwgIkVuIiwgInZzIiwgImJzIiwgIlkiLCAiRXMiLCAiUHMiLCAiUG4iLCAiU3MiLCAiQ3MiLCAiYXQiLCAiU24iLCAia3MiLCAiQ24iLCAiQXMiLCAiUXQiLCAiSXMiLCAiVHMiLCAia24iLCAiTnMiLCAiQW4iLCAiSW4iLCAiVG4iLCAiVSIsICJObiIsICJYdCIsICJlciIsICJScyIsICJGcyIsICJ0ciIsICJNcyIsICJvZSIsICJhZSIsICJFbCIsICJSbiIsICJpdCIsICIkIiwgInJyIiwgIkFlIiwgIkxzIiwgIkRzIiwgImplIiwgIm50IiwgIk9zIiwgIkZuIiwgIlVzIiwgImpzIiwgImJyIiwgInhzIiwgIkdzIiwgIiRzIiwgIk1uIiwgIkxuIiwgIkRuIiwgIk9uIiwgIlZzIiwgInFzIiwgInpzIiwgIkhzIiwgIkJzIiwgIllzIiwgIlciLCAiVW4iLCAiSnMiLCAiWnMiLCAiS3MiLCAiUW4iLCAiQmUiLCAiam4iLCAiV3MiLCAiTiIsICJRcyIsICIkZSIsICJuciIsICJNdCIsICJvciIsICJWZSIsICJ4biIsICJhciIsICJuZSIsICJOZSIsICJYcyIsICJlYyIsICJTIiwgIkEiLCAiTCIsICJrIiwgIk0iLCAiSiIsICJzZSIsICJiZSIsICJfZSIsICJUZSIsICJxZSIsICJJZSIsICJwdCIsICJ0YyIsICJyYyIsICJuYyIsICJZZSIsICJHbiIsICJvYyIsICJhYyIsICJYIiwgIlJlIiwgImljIiwgInNjIiwgInZlIiwgIiRuIiwgIlZuIiwgImNjIiwgImxjIiwgIl90IiwgInFuIiwgInVjIiwgImRjIiwgIlBlIiwgIkplIiwgInBjIiwgIm1jIiwgInpuIiwgInljIiwgImZjIiwgIkhuIiwgIkd0IiwgImhjIiwgImdjIiwgIkVyIiwgIndjIiwgIkJuIiwgInZjIiwgImJjIiwgImtlIiwgInd0IiwgIkVjIiwgIlluIiwgIlBjIiwgImtjIiwgIlNjIiwgIkNjIiwgIlpuIiwgIkpuIiwgIlQiLCAiUHIiLCAiQWMiLCAiSWMiLCAiVGMiLCAiTmMiLCAiSCIsICJSYyIsICJGYyIsICJNYyIsICJFZSIsICJMYyIsICJLbiIsICJEYyIsICJPYyIsICJjZSIsICJTciIsICJXbiIsICJVYyIsICJqYyIsICJDciIsICJ4YyIsICJHYyIsICIkYyIsICJWYyIsICJIYyIsICJxYyIsICJ6YyIsICJCIiwgIkJjIiwgIlljIiwgIkpjIiwgIkZlIiwgIlpjIiwgIldjIiwgIktjIiwgIlFjIiwgIlhjIiwgImVsIiwgInRlIiwgInRsIiwgInJsIiwgIm5sIiwgInJlIiwgImtyIiwgImRlIiwgIiR0IiwgIm9sIiwgImFsIiwgImlsIiwgIlIiLCAic2wiLCAiTHQiLCAiY2wiLCAibGwiLCAidWwiLCAiQXIiLCAiZGwiLCAiSXIiLCAicGwiLCAiVHIiLCAiX2wiLCAibWwiLCAiTnIiLCAieWwiLCAiZmwiLCAiaGwiLCAiUnIiLCAiRnIiLCAibGUiLCAiUSIsICJwZSIsICJNciIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAiZm9ybUNhbGxiYWNrcyIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgImFwcGxlUGF5UmVzdWx0IiwgInNldEFwcGxlUGF5UmVzdWx0IiwgImdvb2dsZVBheVJlc3VsdCIsICJzZXRHb29nbGVQYXlSZXN1bHQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJhcHBsZVBheVJlc3VsdDIiLCAiZ29vZ2xlUGF5UmVzdWx0MiIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgIkZyYWdtZW50IiwgImNoaWxkcmVuUHJvcHMiXQp9Cg==
8468
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlU3RhdGUsIHVzZVJlZiwgdXNlTWVtbywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyQxID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMVwiXSA9IFwibGluZTFcIjtcbiAgRmllbGROYW1lMltcIkxJTkUyXCJdID0gXCJsaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiTElORTNcIl0gPSBcImxpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUyXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTNcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DSVRZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19TVEFURVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0NPVU5UUllcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX1pJUF9DT0RFXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJJU19TSElQUElOR19TQU1FX0FTX0JJTExJTkdcIl0gPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6Lm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0gei51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHouYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogei5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHoub3B0aW9uYWwoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KHRydWUpLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUyXCIgLyogU0hJUFBJTkdfTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTNcIiAvKiBTSElQUElOR19MSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56Lm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnoub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogei5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6LmFycmF5KHouc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnoub2JqZWN0KHtcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHouc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6LnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6LnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnouZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKHRydWUpLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHouYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4gei5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnouc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZHVyYXRpb246IHouc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogei5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3VycmVuY3k6IHouc3RyaW5nKCksXG4gIGRpc2NvdW50czogei5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogei5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY3JlYXRlZDogei5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHouYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3Ioei5hcnJheSh6LnN0cmluZygpKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpLFxuICByZXR1cm5fdXJsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6LnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56LnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6Lm9iamVjdCh7XG4gIGxpbmUxOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogei5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGlkOiB6LnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHoub2JqZWN0KHtcbiAgbGluZV9pdGVtczogei5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBudWxsT3JVbmRlZk9yKHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSksXG4gIGNjX3BtX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcbnoub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3Ioei5ib29sZWFuKCkpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBtZXNzYWdlOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIGV2ZW50czogei5hcnJheShcbiAgICB6Lm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6LnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6LnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xuei5hbnkoKS5vcHRpb25hbCgpO1xuei5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe30pO1xuei5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogei5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogei5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoei5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbnouYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56LmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuei5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyQxKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18kMShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5nZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBtZXRyaWNzUXVldWUucHJvY2Vzc1F1ZXVlKCk7XG59KTtcblxuei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuei5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxuei5vYmplY3Qoe1xuICBkYXRhOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICAgIGVycm9yczogei5hcnJheSh6LmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogei5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogei5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHouZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56LmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56Lm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogei5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhjb25kaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcztcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzLmV4dGVuZChjb25kaXRpb25hbEZpZWxkcyk7XG59O1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMgPSB7fSkgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbnoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6LnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuXG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBFbnZpcm9ubWVudCA9IC8qIEBfX1BVUkVfXyAqLyAoKEVudmlyb25tZW50MikgPT4ge1xuICBFbnZpcm9ubWVudDJbXCJMb2NhbFwiXSA9IFwibG9jYWxcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGV2ZWxvcG1lbnRcIl0gPSBcImRldmVsb3BtZW50XCI7XG4gIEVudmlyb25tZW50MltcIlN0YWdpbmdcIl0gPSBcInN0YWdpbmdcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGVtb1wiXSA9IFwiZGVtb1wiO1xuICBFbnZpcm9ubWVudDJbXCJQcm9kdWN0aW9uXCJdID0gXCJwcm9kdWN0aW9uXCI7XG4gIHJldHVybiBFbnZpcm9ubWVudDI7XG59KShFbnZpcm9ubWVudCB8fCB7fSk7XG52YXIgUGF5SW5GYWlsZWQgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJbkZhaWxlZDIpID0+IHtcbiAgUGF5SW5GYWlsZWQyW1wiTUVUSE9EX0NSRUFUSU9OX0ZBSUxFRFwiXSA9IFwibWV0aG9kQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0JBTEFOQ0VcIl0gPSBcImluc3VmZmljaWVudEJhbGFuY2VcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0FVVEhPUklaQVRJT05cIl0gPSBcImluc3VmZmljaWVudEF1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5GYWlsZWQyW1wiU0lHTkVEX01FU1NBR0VfUkVRVUlSRURcIl0gPSBcInNpZ25lZE1lc3NhZ2VSZXF1aXJlZFwiO1xuICBQYXlJbkZhaWxlZDJbXCJDVVNUT01FUl9DUkVBVElPTl9GQUlMRURcIl0gPSBcImN1c3RvbWVyQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiUEFZTUVOVF9GQUlMRURcIl0gPSBcInBheW1lbnRGYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiVFJBTlNBQ1RJT05fRkFJTEVEXCJdID0gXCJ0cmFuc2FjdGlvbkZhaWxlZFwiO1xuICByZXR1cm4gUGF5SW5GYWlsZWQyO1xufSkoUGF5SW5GYWlsZWQgfHwge30pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRfTUVUSE9EXCJdID0gXCJjcmVhdGluZ1BheW1lbnRNZXRob2RcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7IGNsaWVudF9pZDogei5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG5cbnoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnVuaW9uKFt6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xuei5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgcHJvY2Vzc29yczogW10sXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5jb25zdCBnZXRBcHBsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGFwcGxlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBpbml0Rmxvd3MuYWR5ZW5BcHBsZVBheV07XG4gIGNvbnN0IGFwcGxlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgYXBwbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzQXBwbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5O1xuICAgIGlmIChpc0FwcGxlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBhcHBsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogYXBwbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGFwcGxlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0QXBwbGVQYXlGbG93KGFwcGxlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGdldEdvb2dsZVBheVByb2Nlc3NvcnMgPSAoaW5pdEZsb3dzKSA9PiB7XG4gIGNvbnN0IGdvb2dsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBpbml0Rmxvd3MuYWR5ZW5Hb29nbGVQYXldO1xuICBjb25zdCBnb29nbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBnb29nbGVQYXlJbml0Rmxvd3MuZm9yRWFjaCgoZmxvdykgPT4ge1xuICAgIGNvbnN0IGZsb3dWYWx1ZSA9IGZsb3cucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIGlmIChmbG93VmFsdWU/LmlzQXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0dvb2dsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5O1xuICAgIGlmIChpc0dvb2dsZVBheUF2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgcHJvY2Vzc29yczogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBnb29nbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRHb29nbGVQYXlGbG93KGdvb2dsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBzdGFydEFwcGxlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5jb25zdCBzdGFydEdvb2dsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn07XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5mdW5jdGlvbiBYbihlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIGVvKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB0byA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGE7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBhKSB7XG4gICAgICBmb3IgKHZhciBzIGluIGEpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBzKSAmJiAob1tzXSA9IGFbc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHJvID0gZnVuY3Rpb24oZSkge1xuICB0byh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBYbihhLCBvLnByb3RvdHlwZSksIGVvKGEpLCBhO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCBDID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkXCIgfSksIGIgPSB6LnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBEID0gKGUpID0+IHoubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBkID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLkxJTkUxID0gXCJsaW5lMVwiLCBlLkxJTkUyID0gXCJsaW5lMlwiLCBlLkxJTkUzID0gXCJsaW5lM1wiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5TSElQUElOR19MSU5FMSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIiwgZS5TSElQUElOR19MSU5FMiA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIiwgZS5TSElQUElOR19MSU5FMyA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTNcIiwgZS5TSElQUElOR19DSVRZID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIsIGUuU0hJUFBJTkdfU1RBVEUgPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIsIGUuU0hJUFBJTkdfQ09VTlRSWSA9IFwic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiLCBlLlNISVBQSU5HX1pJUF9DT0RFID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIsIGUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShkIHx8IHt9KTtcbmNvbnN0IE9yID0gei5uYXRpdmVFbnVtKGQpO1xudmFyIFVyID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKShVciB8fCB7fSk7XG5jb25zdCBqciA9IHoubmF0aXZlRW51bShVciksIHhyID0gei51bmlvbihbT3IsIGpyXSk7XG52YXIgdWUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodWUgfHwge30pO1xuY29uc3Qgbm8gPSB6Lm5hdGl2ZUVudW0odWUpLCB2dCA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBEKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogRCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBvbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBiLFxuICBleHBpcnk6IGIsXG4gIGN2YzogYlxufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogYixcbiAgY29sb3I6IGIsXG4gIGZvbnRGYW1pbHk6IGIsXG4gIGZvbnRTaXplOiBiLFxuICBmb250V2VpZ2h0OiBiLFxuICBtYXJnaW46IGIsXG4gIHBhZGRpbmc6IGIsXG4gIGxldHRlclNwYWNpbmc6IGIsXG4gIGxpbmVIZWlnaHQ6IGIsXG4gIGhpZGVJY29uOiBiXG59KTtcbmNvbnN0IGllID0gei5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBhbyA9IGllLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBpbyA9IHoub2JqZWN0KHsgdHlwZTogYW8gfSksIHNvID0gaWUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBjbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogc28sXG4gIGVsZW1lbnRUeXBlOiBqcixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgbG8gPSBpZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgdW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IGxvLFxuICBtZXNzYWdlOiBDLFxuICBoZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgcG8gPSBpZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBtbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogcG8sXG4gIGVsZW1lbnRUeXBlOiB4cixcbiAgZXJyb3JzOiB6LmFycmF5KHouc3RyaW5nKCkpXG59KSwgX28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQ1xufSksIHlvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEMsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6LmFycmF5KHZ0KVxufSksIGZvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6Lm9wdGlvbmFsKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIGhvID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoaWUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KSwgRGUgPSB6Lm9iamVjdCh7XG4gIGVtYWlsOiBDLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogQyxcbiAgbGFzdE5hbWU6IEMsXG4gIHByb21vdGlvbkNvZGU6IGIsXG4gIGxpbmUxOiBiLFxuICBsaW5lMjogYixcbiAgbGluZTM6IGIsXG4gIGNpdHk6IGIsXG4gIHN0YXRlOiBiLFxuICBjb3VudHJ5OiBDLFxuICB6aXBDb2RlOiBiLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogei5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQoITApLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogYixcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBiLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogYixcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogYlxufSksIGdvID0gei5vYmplY3Qoe1xuICBlbWFpbDogQy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBmaXJzdE5hbWU6IGIsXG4gIGxhc3ROYW1lOiBiLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBsaW5lMTogYixcbiAgbGluZTI6IGIsXG4gIGxpbmUzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYixcbiAgY291bnRyeTogQyxcbiAgemlwQ29kZTogYixcbiAgaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmc6IHouY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBiLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogYixcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogYixcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IGIsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IGJcbn0pO1xuei5vYmplY3Qoe1xuICBsaW5lMTogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IEMsXG4gIGNvdW50cnk6IENcbn0pO1xuei5vYmplY3Qoe1xuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbnoub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBDLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBDLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBDXG59KTtcbmNvbnN0IHdvID0gaWUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgdm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBzZXNzaW9uSWQ6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdnQsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHouYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBiLFxuICBwYXltZW50Um91dGVJZDogYlxufSkuZXh0ZW5kKERlLnNoYXBlKSwgYm8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHouYm9vbGVhbigpXG59KSwgRW8gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChpZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6LnN0cmluZygpXG59KSwgUG8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBpbyxcbiAgY28sXG4gIHVvLFxuICBtbyxcbiAgX28sXG4gIHlvLFxuICB2byxcbiAgYm8sXG4gIEVvLFxuICBmbyxcbiAgaG9cbl0pLCBTbyA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogUG8sXG4gIG5vbmNlOiBDLFxuICBmb3JtSWQ6IEMsXG4gIGVsZW1lbnRJZDogQ1xufSk7XG56Lm9iamVjdCh7XG4gIGFtb3VudEF0b206IHoubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IENcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBEKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogRCh6LnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBEKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBRZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBEKHouYXJyYXkoei5zdHJpbmcoKSkpXG59KSwgQ28gPSB6Lm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6LnN0cmluZygpLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IGtvID0gei5vYmplY3Qoe1xuICBzdWNjZXNzOiB6LmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6LmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHouYXJyYXkoQ28pXG59KSwgQW8gPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6Lm9iamVjdCh7IHN1Y2Nlc3M6IHoubGl0ZXJhbCghMCkgfSksXG4gIGtvXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHZ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEQoei5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRCh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdnQsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IERlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogRCh6LnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoei5zdHJpbmcoKSlcbn0pO1xudmFyIE8gPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShPIHx8IHt9KTtcbmNvbnN0IElvID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogei5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuei5vYmplY3Qoe1xuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBUbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIEdyID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IEQoei5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBEKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBEKHouc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogRCh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBEKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSksIE5vID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwoITApLCBocmVmOiB6LnN0cmluZygpIH0pLFxuICB6Lm9iamVjdCh7IHByZXNlbnQ6IHoubGl0ZXJhbCghMSkgfSlcbl0pLCBSbyA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KG9vKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IEQoUWUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IEQoei5hcnJheShHcikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBEKHouc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBEKFFlKVxufSksIHcgPSAoZSkgPT4gei5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xuei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEZvID0gei5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuei5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCAkciA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHoubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogdyh6Lm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoei5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6LnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IHcoei5udW1iZXIoKSlcbn0pLCBWciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoei5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHoubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIE1vID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksIExvID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogdyhNbylcbn0pLCBHZSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pLCBEbyA9IHoub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHoubnVtYmVyKClcbn0pLCBPbyA9IHoub2JqZWN0KHtcbiAgaWQ6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoei5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogei5hcnJheShEbyksXG4gIHRyaWFsX3N0YXJ0OiB3KHouc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoei5zdHJpbmcoKSlcbn0pLCBxciA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKClcbn0pLCBVbyA9IHoub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogei5zdHJpbmcoKVxufSksIGpvID0gei5vYmplY3Qoe1xuICBjb3Vwb246ICRyXG59KSwgeG8gPSB6Lm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkaXNjb3VudHM6IHouYXJyYXkoam8pLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IHcoei5zdHJpbmcoKSksXG4gIGxpbmVzOiB6LmFycmF5KFVvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHoubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHouYXJyYXkocXIpXG59KSwgaXIgPSB6Lm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHouYXJyYXkoT28pLFxuICBpbnZvaWNlczogei5hcnJheSh4byksXG4gIHByb2Nlc3NvcnNfdXNlZDogdyh6LmFycmF5KHouc3RyaW5nKCkpKVxufSksIHpyID0gei5vYmplY3Qoe1xuICBwcmV2aWV3OiBpcixcbiAgcHJldmlld19wb3N0X3RyaWFsOiB3KGlyKSxcbiAgY291cG9uczogei5hcnJheSgkcilcbn0pLCBzciA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IHcoei5zdHJpbmcoKSksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBlbWFpbDogdyh6LnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6LmFycmF5KFZyKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBicmFuZDogTG8sXG4gIHN1YnNfcHJldmlldzogdyh6ciksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogei5hcnJheShHZSksXG4gIHJldHVybl91cmw6IHcoei5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiB3KHouc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KSwgSHIgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgbW9kZTogei5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHoubnVsbGFibGUoei51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHNyLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoc3Iuc2hhcGUpXG5dKSwgR28gPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCAkbyA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnoudW5pb24oW0hyLCBHbywgJG9dKTtcbnoub2JqZWN0KHtcbiAgbG9nbzogei5zdHJpbmcoKSxcbiAgaWNvbjogei5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogei5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBfdCA9IHoub2JqZWN0KHtcbiAgbGluZTE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6LnN0cmluZygpLFxuICB6aXBfY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnoub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6LnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6LmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogX3QsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IF90Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoVnIpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogei5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBHZSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6LnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBWbyA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgbG9jOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBtc2c6IHouc3RyaW5nKCksXG4gIHVybDogei5zdHJpbmcoKVxufSk7XG56LmFycmF5KFZvKTtcbmNvbnN0IHFvID0gei5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogX3QsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBfdC5vcHRpb25hbCgpXG59KSwgem8gPSB6Lm9iamVjdCh7XG4gIHByaWNlX2lkOiB6LnN0cmluZygpLFxuICBxdWFudGl0eTogei5udW1iZXIoKS5pbnQoKVxufSksIFlyID0gei5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6LmFycmF5KHpvKSxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpXG59KSwgSG8gPSB6Lm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuei5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogR2UsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KS5leHRlbmQocW8uc2hhcGUpLmV4dGVuZChIby5zaGFwZSk7XG5jb25zdCBKciA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIGZpZWxkczogZ28sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogR2UsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBEZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiB3KHouYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBCbyA9IHoub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKSxcbiAgY2NfcG1faWQ6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoUWUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHouc3RyaW5nKCkpXG59KTtcbnoucmVjb3JkKHouYW55KCkpO1xuei5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHouc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHouc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6LnN0cmluZygpKSxcbiAgbGluZTM6IHcoei5zdHJpbmcoKSksXG4gIGNpdHk6IHcoei5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHouc3RyaW5nKCkpLFxuICBjb3VudHJ5OiB3KHouc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6LnN0cmluZygpKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6LnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6LmJvb2xlYW4oKSlcbn0pO1xuei5vYmplY3Qoe1xuICBpZDogei5zdHJpbmcoKSxcbiAgZW1haWw6IHcoei5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IHcoei5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6LnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHouc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHouc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgWW8gPSB6Lm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogR2UsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogei5yZWNvcmQoei5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6LnN0cmluZygpKVxufSk7XG5jb25zdCBKbyA9IHoub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoei5yZWNvcmQoei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZXZlbnRzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHouc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHouc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6LnJlY29yZCh6LmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56LmFueSgpLm9wdGlvbmFsKCk7XG56Lm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBabyA9IHoub2JqZWN0KHt9KSwgS28gPSB6Lm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6LnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6LnN0cmluZygpXG59KS5jYXRjaGFsbCh6LmFueSgpKSwgV28gPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pLCBRbyA9IHouYXJyYXkoV28pLCBYbyA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSksIGVhID0gei5hcnJheShYbyksIHRhID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBcIkNvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpblwiXG59LCBEdCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gdGFbdF0gPz8gZTtcbn0sIHJhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEpTT04ucGFyc2UoZSkgPT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBuYSA9IChlKSA9PiBlLmxlbmd0aCA9PT0gMSA/IER0KGVbMF0ubXNnKSA6IGBQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYOKAoiAke0R0KHIubXNnKX1gKS5qb2luKGBcbmApfWAsIG9hID0gKGUpID0+IGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGAtICR7ci5wYXRoLmpvaW4oXCIvXCIpfTogJHtyLm1lc3NhZ2V9YCkuam9pbihgXG5gKX1gLCBLID0gKGUpID0+IHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcilcbiAgICBpZiAocmEoZS5tZXNzYWdlKSkge1xuICAgICAgY29uc3QgdCA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIHJldHVybiBRby5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IG5hKHQpIDogZWEuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBvYSh0KSA6IChjb25zb2xlLndhcm4oYEVuY291bnRlcmVkIHVua25vd24gc3RyaW5naWZpZWQgSlNPTiBvYmplY3Q6XG4ke2UubWVzc2FnZX1gKSwgZS5tZXNzYWdlKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBEdChlLm1lc3NhZ2UpO1xuICBpZiAodHlwZW9mIGUgPT0gXCJvYmplY3RcIilcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB0ICsgXCJcIjtcbiAgICB9XG4gIGVsc2VcbiAgICByZXR1cm4gZSArIFwiXCI7XG59LCBhYSA9IChlLCB0LCByKSA9PiAoLi4ubikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0KC4uLm4pO1xuICB9IGNhdGNoIChvKSB7XG4gICAgcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7ZX0pOmAsIG8pO1xuICAgIHJldHVybjtcbiAgfVxufSwgaWEgPSAoZSkgPT4gZS5yZWR1Y2UoKHQsIHIpID0+IHQgKyByLCAwKSwgWnIgPSAoZSkgPT4ge1xuICBlLnByZXZlbnREZWZhdWx0KCksIGUucmV0dXJuVmFsdWUgPSAhMDtcbn0sIHNhID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBacik7XG59LCBjYSA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgWnIpO1xufSwgZWUgPSAoZSkgPT4ge1xuICBsZXQgdCA9ICExO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICB2YXIgbiwgbztcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSAhMDtcbiAgICB0cnkge1xuICAgICAgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiBzYSgpLCAobyA9IChuID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgby5jYWxsKG4pLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYSA9IGF3YWl0IGUocik7XG4gICAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5hXG4gICAgICB9KSwgc2koKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGEucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKGEubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIGEucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBhLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIGEucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke2F9YCk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgcyA9IEsoYSksIGMgPSBhd2FpdCBobihyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgcyk7XG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihzLCBjKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCwgZXJyb3JNZXNzYWdlOiBzLCBlcnJvckNvZGU6IGMsIGVycm9yOiBhIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0ID0gITEsIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgY2EoKTtcbiAgICB9XG4gIH07XG59LCB5ZSA9IChlKSA9PiBhc3luYyAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gSShcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgbyA9IEsociksIGEgPSBhd2FpdCBobih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgbyk7XG4gICAgcmV0dXJuIG4oYSwgbywgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IG8sIGVycm9yQ29kZTogYSwgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IG8sIGVycm9yQ29kZTogYSwgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgT3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBPdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIG8gaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIG8pICYmIChyW29dID0gbltvXSk7XG4gIH0sIE90KGUsIHQpO1xufTtcbmZ1bmN0aW9uIGdlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgT3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIGxhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gbyhhKSB7XG4gICAgcmV0dXJuIGEgaW5zdGFuY2VvZiByID8gYSA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoYSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihhLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHMoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgcyh5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICBwLmRvbmUgPyBhKHAudmFsdWUpIDogbyhwLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gS3IoZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChhWzBdICYgMSkgdGhyb3cgYVsxXTtcbiAgICByZXR1cm4gYVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgYSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gbChbdSwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBvICYmIChhID0gdVswXSAmIDIgPyBvLnJldHVybiA6IHVbMF0gPyBvLnRocm93IHx8ICgoYSA9IG8ucmV0dXJuKSAmJiBhLmNhbGwobyksIDApIDogby5uZXh0KSAmJiAhKGEgPSBhLmNhbGwobywgdVsxXSkpLmRvbmUpIHJldHVybiBhO1xuICAgICAgc3dpdGNoIChvID0gMCwgYSAmJiAodSA9IFt1WzBdICYgMiwgYS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgbyA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoYSA9IHIudHJ5cywgIShhID0gYS5sZW5ndGggPiAwICYmIGFbYS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghYSB8fCB1WzFdID4gYVswXSAmJiB1WzFdIDwgYVszXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBhWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gYVsxXSwgYSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEgJiYgci5sYWJlbCA8IGFbMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBhWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFbMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgdSA9IFs2LCBwXSwgbyA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBhID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gT2UoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHl0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufVxuZnVuY3Rpb24gZnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIE1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBNZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBNZShlKTtcbn1cbmZ1bmN0aW9uIHVhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBvLCBhID0gW107XG4gIHJldHVybiBvID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbztcbiAgZnVuY3Rpb24gcyhfKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZikudGhlbihfLCB5KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoXywgZikge1xuICAgIG5bX10gJiYgKG9bX10gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRSwgUCkge1xuICAgICAgICBhLnB1c2goW18sIGgsIEUsIFBdKSA+IDEgfHwgbChfLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIGYgJiYgKG9bX10gPSBmKG9bX10pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChfLCBmKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUobltfXShmKSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgbShhWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShfKSB7XG4gICAgXy52YWx1ZSBpbnN0YW5jZW9mIE1lID8gUHJvbWlzZS5yZXNvbHZlKF8udmFsdWUudikudGhlbihwLCB5KSA6IG0oYVswXVsyXSwgXyk7XG4gIH1cbiAgZnVuY3Rpb24gcChfKSB7XG4gICAgbChcIm5leHRcIiwgXyk7XG4gIH1cbiAgZnVuY3Rpb24geShfKSB7XG4gICAgbChcInRocm93XCIsIF8pO1xuICB9XG4gIGZ1bmN0aW9uIG0oXywgZikge1xuICAgIF8oZiksIGEuc2hpZnQoKSwgYS5sZW5ndGggJiYgbChhWzBdWzBdLCBhWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gZGEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIE9lID09IFwiZnVuY3Rpb25cIiA/IE9lKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4oYSkge1xuICAgIHJbYV0gPSBlW2FdICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW2FdKHMpLCBvKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG8oYSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGEoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gRyhlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBidChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEF0ID0gYnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gaHQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIG8sIGE7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gT2UocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChHKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIGEgPSBoIGluc3RhbmNlb2YgQXQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIHkgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKHkpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgbSA9IE9lKHkpLCBfID0gbS5uZXh0KCk7ICFfLmRvbmU7IF8gPSBtLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGYgPSBfLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY3IoZik7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIGEgPSBhID8/IFtdLCBoIGluc3RhbmNlb2YgQXQgPyBhID0gZnQoZnQoW10sIHl0KGEpKSwgeXQoaC5lcnJvcnMpKSA6IGEucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBfICYmICFfLmRvbmUgJiYgKG8gPSBtLnJldHVybikgJiYgby5jYWxsKG0pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChhKVxuICAgICAgICB0aHJvdyBuZXcgQXQoYSk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgY3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGh0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgaHQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBXciA9IG90LkVNUFRZO1xuZnVuY3Rpb24gUXIoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIG90IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIEcoZS5yZW1vdmUpICYmIEcoZS5hZGQpICYmIEcoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBjcihlKSB7XG4gIEcoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgWHIgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgZW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBmdChbZSwgdF0sIHl0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHRuKGUpIHtcbiAgZW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxyKCkge1xufVxuZnVuY3Rpb24gZHQoZSkge1xuICBlKCk7XG59XG52YXIgVnQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBRcihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0geWEsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIHJldHVybiBuZXcgVXQociwgbiwgbyk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KG90KSwgcGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEl0KGUsIHQpIHtcbiAgcmV0dXJuIHBhLmNhbGwoZSwgdCk7XG59XG52YXIgbWEgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgY3Qobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBjdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBjdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBjdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVXQgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChHKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IG8gPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBhICYmIFhyLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIEl0KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIEl0KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBJdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBuZXcgbWEocyksIGE7XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFZ0KTtcbmZ1bmN0aW9uIGN0KGUpIHtcbiAgdG4oZSk7XG59XG5mdW5jdGlvbiBfYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIgeWEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGxyLFxuICBlcnJvcjogX2EsXG4gIGNvbXBsZXRlOiBsclxufSwgcXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBmYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gaGEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBmYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgbykge1xuICAgICAgcmV0dXJuIG8obik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgX2UgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLCBhID0gd2EodCkgPyB0IDogbmV3IFV0KHQsIHIsIG4pO1xuICAgIHJldHVybiBkdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gbywgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIGEuYWRkKGMgPyBjLmNhbGwoYSwgbCkgOiBsID8gby5fc3Vic2NyaWJlKGEpIDogby5fdHJ5U3Vic2NyaWJlKGEpKTtcbiAgICB9KSwgYTtcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB1cihyKSwgbmV3IHIoZnVuY3Rpb24obywgYSkge1xuICAgICAgdmFyIHMgPSBuZXcgVXQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgYShsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGEsXG4gICAgICAgIGNvbXBsZXRlOiBvXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbcXRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gaGEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSB1cih0KSwgbmV3IHQoZnVuY3Rpb24obiwgbykge1xuICAgICAgdmFyIGE7XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBhID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIG8ocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4oYSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gdXIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBYci5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgRyhlLm5leHQpICYmIEcoZS5lcnJvcikgJiYgRyhlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIHdhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFZ0IHx8IGdhKGUpICYmIFFyKGUpO1xufVxuZnVuY3Rpb24gdmEoZSkge1xuICByZXR1cm4gRyhlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gYmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmICh2YSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gRWEoZSwgdCwgciwgbiwgbykge1xuICByZXR1cm4gbmV3IFBhKGUsIHQsIHIsIG4sIG8pO1xufVxudmFyIFBhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBvLCBhLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgci5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gYSA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEodSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHIuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBvID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFZ0KSwgU2EgPSBidChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHJuID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IGRyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgU2EoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbywgYTtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gT2Uobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBvID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKGEgPSBzLnJldHVybikgJiYgYS5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobykgdGhyb3cgby5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGR0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgbyA9IG4ub2JzZXJ2ZXJzOyBvLmxlbmd0aDsgKVxuICAgICAgICAgIG8uc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZHQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gdGhpcywgYSA9IG8uaGFzRXJyb3IsIHMgPSBvLmlzU3RvcHBlZCwgYyA9IG8ub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBhIHx8IHMgPyBXciA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBvdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGh0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBvID0gbi5oYXNFcnJvciwgYSA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBvID8gci5lcnJvcihhKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBfZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgZHIociwgbik7XG4gIH0sIHQ7XG59KF9lKSwgZHIgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLmRlc3RpbmF0aW9uID0gciwgby5zb3VyY2UgPSBuLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIChvID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgfHwgby5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBvO1xuICAgIHJldHVybiAobyA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogV3I7XG4gIH0sIHQ7XG59KHJuKSwgQ2EgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGthID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0ob3QpLCBwciA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgZnQoW2UsIHRdLCB5dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIEFhID0gZnVuY3Rpb24oZSkge1xuICBnZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5zY2hlZHVsZXIgPSByLCBvLndvcmsgPSBuLCBvLnBlbmRpbmcgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG87XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBhID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBhICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGEsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKG8gPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG8gPT09IHZvaWQgMCAmJiAobyA9IDApLCBwci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIG8pO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0gMCksIG8gIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBvICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgcHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgbyA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gbztcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIG8gPSAhMSwgYTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIG8gPSAhMCwgYSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKG8pXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBhO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIG8gPSByLnNjaGVkdWxlciwgYSA9IG8uYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBodChhLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChvLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oa2EpLCBtciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IENhLm5vdywgZTtcbn0oKSwgSWEgPSBmdW5jdGlvbihlKSB7XG4gIGdlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBtci5ub3cpO1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uYWN0aW9ucyA9IFtdLCBvLl9hY3RpdmUgPSAhMSwgbztcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbztcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKG8gPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIG8pIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IG87XG4gICAgfVxuICB9LCB0O1xufShtciksIFRhID0gbmV3IElhKEFhKSwgTmEgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBSYShlKSB7XG4gIHJldHVybiBHKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBGYShlKSB7XG4gIHJldHVybiBHKGVbcXRdKTtcbn1cbmZ1bmN0aW9uIE1hKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gTGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIERhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIE9hID0gRGEoKTtcbmZ1bmN0aW9uIFVhKGUpIHtcbiAgcmV0dXJuIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZVtPYV0pO1xufVxuZnVuY3Rpb24gamEoZSkge1xuICByZXR1cm4gdWEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgbywgYTtcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgTWUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIG8gPSBuLnZhbHVlLCBhID0gbi5kb25lLCBhID8gWzQsIE1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIE1lKG8pXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHhhKGUpIHtcbiAgcmV0dXJuIEcoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gR2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIF9lKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKEZhKGUpKVxuICAgICAgcmV0dXJuICRhKGUpO1xuICAgIGlmIChOYShlKSlcbiAgICAgIHJldHVybiBWYShlKTtcbiAgICBpZiAoUmEoZSkpXG4gICAgICByZXR1cm4gcWEoZSk7XG4gICAgaWYgKE1hKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChVYShlKSlcbiAgICAgIHJldHVybiB6YShlKTtcbiAgICBpZiAoeGEoZSkpXG4gICAgICByZXR1cm4gSGEoZSk7XG4gIH1cbiAgdGhyb3cgTGEoZSk7XG59XG5mdW5jdGlvbiAkYShlKSB7XG4gIHJldHVybiBuZXcgX2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtxdF0oKTtcbiAgICBpZiAoRyhyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIG5ldyBfZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcWEoZSkge1xuICByZXR1cm4gbmV3IF9lKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIHRuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6YShlKSB7XG4gIHJldHVybiBuZXcgX2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBvID0gT2UoZSksIGEgPSBvLm5leHQoKTsgIWEuZG9uZTsgYSA9IG8ubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gYS52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyBfZShmdW5jdGlvbih0KSB7XG4gICAgQmEoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbm4oamEoZSkpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYTtcbiAgcmV0dXJuIGxhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gS3IodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IGRhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIG8gPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChhID0gci5yZXR1cm4pID8gWzQsIGEuY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWWEoZSwgdCwgciwgbiwgbykge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgbyA9PT0gdm9pZCAwICYmIChvID0gITEpO1xuICB2YXIgYSA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBvID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQoYSksICFvKVxuICAgIHJldHVybiBhO1xufVxuZnVuY3Rpb24gSmEoZSwgdCkge1xuICB2YXIgciA9IEcoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihvKSB7XG4gICAgcmV0dXJuIG8uZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBfZShuKTtcbn1cbnZhciBaYSA9IGJ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEthKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBhO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgYSA9IHMsIG8gPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgbyA/IHIoYSkgOiBuKG5ldyBaYSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBXYShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgUWEgPSBidChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWGEoZSwgdCkge1xuICB2YXIgciA9IFdhKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIG8gPSByLmVhY2gsIGEgPSByLndpdGgsIHMgPSBhID09PSB2b2lkIDAgPyBlaSA6IGEsIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IFRhIDogYywgdSA9IHIubWV0YSwgcCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIG8gPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBiYShmdW5jdGlvbih5LCBtKSB7XG4gICAgdmFyIF8sIGYsIGggPSBudWxsLCBFID0gMCwgUCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGYgPSBZYShtLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBfLnVuc3Vic2NyaWJlKCksIEdhKHMoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IEVcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKG0pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgbS5lcnJvcihTKTtcbiAgICAgICAgfVxuICAgICAgfSwgdik7XG4gICAgfTtcbiAgICBfID0geS5zdWJzY3JpYmUoRWEobSwgZnVuY3Rpb24odikge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgRSsrLCBtLm5leHQoaCA9IHYpLCBvID4gMCAmJiBQKG8pO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFFICYmIFAobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBvKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlaShlKSB7XG4gIHRocm93IG5ldyBRYShlKTtcbn1cbmNsYXNzIFplIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIEV0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gSmEoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIEthKHRoaXMuX3N1YmplY3QucGlwZShYYShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBybigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBfciA9IHouZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgdGkgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIHJpID0gKGUpID0+IHRpW2VdLCBUdCA9IHt9LCBvbiA9IGFzeW5jIChlKSA9PiB7XG4gIGlmIChUdFtlXSlcbiAgICByZXR1cm4gVHRbZV07XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKChuKSA9PiBuLmpzb24oKSksIHIgPSBfci5wYXJzZSh0LmVudmlyb25tZW50KTtcbiAgICByZXR1cm4gVHRbZV0gPSByLCByO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gX3IuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5mdW5jdGlvbiBFdChlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IFB0ID0gKGUsIHQpID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFtyXSkgPT4gIXQuaW5jbHVkZXMocikpKSwgaiA9ICgpID0+IHtcbiAgaWYgKCEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSlcbiAgICByZXR1cm4gd2luZG93O1xufSwganQgPSBuZXcgWmUoKSwgeXIgPSBcIm9wX21ldHJpY3NfcXVldWVcIiwgbmkgPSAzLCBvaSA9IDMsIGFpID0gMWUzLCB7IGxvZ19fOiBsdCB9ID0gSShcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBpaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDAsIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbHQoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIiksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSwgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGx0KFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKSwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCksICh0ID0gaigpKSA9PSBudWxsIHx8IHQuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQodCwgciwgbikge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBldmVudE5hbWU6IHQsXG4gICAgICBwcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IG4gfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gby50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChvKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0gKHIgPSAodCA9IGooKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHQubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogci5nZXRJdGVtKHlyKTtcbiAgICAgIG4gJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKG4pKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciB0O1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQubG9jYWxTdG9yYWdlLnNldEl0ZW0oeXIsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCB0ID0gaigpO1xuICAgIHQgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB0LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIGFpKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciB0O1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgodCA9IGooKSkgPT0gbnVsbCB8fCB0LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHQgPSBqdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghdCkge1xuICAgICAgbHQoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMucXVldWUuc2xpY2UoMCwgb2kpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBuID0ge1xuICAgICAgICBldmVudHM6IHIubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogdC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBvID0gcmkodC5lbnZpcm9ubWVudCksIGEgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgbyk7XG4gICAgICAoYXdhaXQgZmV0Y2goYS50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShuKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGx0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgbmkpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9IGooKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHp0ID0gbmV3IGlpKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICB6dC5hZGRFdmVudChlLCB0LCByKTtcbn0sIHNpID0gKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0sIGFuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IEsoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHNuID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBLKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogKHIgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogci5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAobiA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBuLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIGNpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBqKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCAodCA9IGooKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgYW4pO1xufSwgbGkgPSAoKSA9PiB7XG4gIHZhciBlLCB0O1xuICAoZSA9IGooKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzbiksICh0ID0gaigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBhbik7XG59O1xudmFyIExyO1xuKExyID0gaigpKSA9PSBudWxsIHx8IExyLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICB6dC5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY29uc3QgdWkgPSB6Lm9iamVjdCh7XG4gIHN0cmlwZV9wazogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6LnN0cmluZygpXG59KSwgZGkgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wazogei5zdHJpbmcoKVxufSksIHBpID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgU3QgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgZnIoKSB8fCBhd2FpdCBDdCg1MDApO1xuICBpZiAoIWZyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgbWkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgU3QoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBfaSA9IGFzeW5jIChlLCB0LCByLCBuLCBvKSA9PiB7XG4gIGNvbnN0IGEgPSBhd2FpdCBTdChlKSwgcyA9IHBpW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gYS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEN0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgZnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgeWkgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgZmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBTdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBoaSA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBvLCBhLCBzLCBjO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IFN0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAobyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBvLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKGEgPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlKSA/PyAoKGMgPSAocyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgZ2kgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIFNlID0gXCIxLjkuMFwiLCBociA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIHdpKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goaHIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBvID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKG8ucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgICByZXR1cm4gbCA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBhKGMpIHtcbiAgICByZXR1cm4gci5hZGQoYyksICExO1xuICB9XG4gIGZ1bmN0aW9uIHMoYykge1xuICAgIHJldHVybiB0LmFkZChjKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICBpZiAodC5oYXMobCkpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGwpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gbC5tYXRjaChocik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIGEobCk7XG4gICAgdmFyIHAgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gcC5wcmVyZWxlYXNlICE9IG51bGwgfHwgby5tYWpvciAhPT0gcC5tYWpvciA/IGEobCkgOiBvLm1ham9yID09PSAwID8gby5taW5vciA9PT0gcC5taW5vciAmJiBvLnBhdGNoIDw9IHAucGF0Y2ggPyBzKGwpIDogYShsKSA6IG8ubWlub3IgPD0gcC5taW5vciA/IHMobCkgOiBhKGwpO1xuICB9O1xufVxudmFyIHZpID0gd2koU2UpLCBiaSA9IFNlLnNwbGl0KFwiLlwiKVswXSwgWGUgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBiaSksIGV0ID0gZ2k7XG5mdW5jdGlvbiBIdChlLCB0LCByLCBuKSB7XG4gIHZhciBvO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBhID0gZXRbWGVdID0gKG8gPSBldFtYZV0pICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB7XG4gICAgdmVyc2lvbjogU2VcbiAgfTtcbiAgaWYgKCFuICYmIGFbZV0pIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKGEudmVyc2lvbiAhPT0gU2UpIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgYS52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgU2UpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIGFbZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBTZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiB0dChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBldFtYZV0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIXZpKG4pKSlcbiAgICByZXR1cm4gKHIgPSBldFtYZV0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBCdChlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFNlICsgXCIuXCIpO1xuICB2YXIgciA9IGV0W1hlXTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBFaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgUGkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgU2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiB6ZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIHplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gemUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gemUoZSwgdCwgcikge1xuICB2YXIgbiA9IHR0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBQaShbXSwgRWkociksICExKSk7XG59XG52YXIgWjtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShaIHx8IChaID0ge30pKTtcbmZ1bmN0aW9uIENpKGUsIHQpIHtcbiAgZSA8IFouTk9ORSA/IGUgPSBaLk5PTkUgOiBlID4gWi5BTEwgJiYgKGUgPSBaLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIG8pIHtcbiAgICB2YXIgYSA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIiAmJiBlID49IG8gPyBhLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBaLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBaLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFouSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBaLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBaLlZFUkJPU0UpXG4gIH07XG59XG52YXIga2kgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgYSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGEucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn0sIEFpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgYTsgbiA8IG87IG4rKylcbiAgICAoYSB8fCAhKG4gaW4gdCkpICYmIChhIHx8IChhID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBhW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChhIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIElpID0gXCJkaWFnXCIsIGd0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KG8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBhW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBjID0gdHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChjKVxuICAgICAgICAgICAgcmV0dXJuIGNbb10uYXBwbHkoYywgQWkoW10sIGtpKGEpLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24obywgYSkge1xuICAgICAgICB2YXIgcywgYywgbDtcbiAgICAgICAgaWYgKGEgPT09IHZvaWQgMCAmJiAoYSA9IHsgbG9nTGV2ZWw6IFouSU5GTyB9KSwgbyA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigocyA9IHUuc3RhY2spICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgYSA9PSBcIm51bWJlclwiICYmIChhID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBhXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcCA9IHR0KFwiZGlhZ1wiKSwgeSA9IENpKChjID0gYS5sb2dMZXZlbCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IFouSU5GTywgbyk7XG4gICAgICAgIGlmIChwICYmICFhLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIG0gPSAobCA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgcC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgbSksIHkud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIG0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBIdChcImRpYWdcIiwgeSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIEJ0KElpLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24obykge1xuICAgICAgICByZXR1cm4gbmV3IFNpKG8pO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gVGkoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBOaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIHZhciBhID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gYS5fY3VycmVudENvbnRleHQuc2V0KG4sIG8pLCBhO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIG87XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBSaSA9IG5ldyBOaSgpLCBGaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBhID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgYS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBhO1xufSwgTWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBhOyBuIDwgbzsgbisrKVxuICAgIChhIHx8ICEobiBpbiB0KSkgJiYgKGEgfHwgKGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGFbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGEgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgTGkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFJpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBvID0gW10sIGEgPSAzOyBhIDwgYXJndW1lbnRzLmxlbmd0aDsgYSsrKVxuICAgICAgICBvW2EgLSAzXSA9IGFyZ3VtZW50c1thXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgTWkoW25dLCBGaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIERpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGEgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBhLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59LCBPaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGE7IG4gPCBvOyBuKyspXG4gICAgKGEgfHwgIShuIGluIHQpKSAmJiAoYSB8fCAoYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgYVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoYSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBOdCA9IFwiY29udGV4dFwiLCBVaSA9IG5ldyBMaSgpLCBZdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBIdChOdCwgdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbywgYSA9IFtdLCBzID0gMzsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgYVtzIC0gM10gPSBhcmd1bWVudHNbc107XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KG8sIE9pKFt0LCByLCBuXSwgRGkoYSksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdHQoTnQpIHx8IFVpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBCdChOdCwgZ3QuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCB4dDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoeHQgfHwgKHh0ID0ge30pKTtcbnZhciBjbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBsbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgamkgPSB7XG4gIHRyYWNlSWQ6IGxuLFxuICBzcGFuSWQ6IGNuLFxuICB0cmFjZUZsYWdzOiB4dC5OT05FXG59LCBLZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGppKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgSnQgPSBUaShcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIFp0KGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoSnQpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHhpKCkge1xuICByZXR1cm4gWnQoWXQuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBLdChlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKEp0LCB0KTtcbn1cbmZ1bmN0aW9uIEdpKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoSnQpO1xufVxuZnVuY3Rpb24gJGkoZSwgdCkge1xuICByZXR1cm4gS3QoZSwgbmV3IEtlKHQpKTtcbn1cbmZ1bmN0aW9uIHVuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IFp0KGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgVmkgPSAvXihbMC05YS1mXXszMn0pJC9pLCBxaSA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gemkoZSkge1xuICByZXR1cm4gVmkudGVzdChlKSAmJiBlICE9PSBsbjtcbn1cbmZ1bmN0aW9uIEhpKGUpIHtcbiAgcmV0dXJuIHFpLnRlc3QoZSkgJiYgZSAhPT0gY247XG59XG5mdW5jdGlvbiBkbihlKSB7XG4gIHJldHVybiB6aShlLnRyYWNlSWQpICYmIEhpKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIEJpKGUpIHtcbiAgcmV0dXJuIG5ldyBLZShlKTtcbn1cbnZhciBSdCA9IFl0LmdldEluc3RhbmNlKCksIHBuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBSdC5hY3RpdmUoKSk7XG4gICAgICB2YXIgbyA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKG8pXG4gICAgICAgIHJldHVybiBuZXcgS2UoKTtcbiAgICAgIHZhciBhID0gbiAmJiB1bihuKTtcbiAgICAgIHJldHVybiBZaShhKSAmJiBkbihhKSA/IG5ldyBLZShhKSA6IG5ldyBLZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhLCBzLCBjO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBjID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAoYSA9IHIsIGMgPSBuKSA6IChhID0gciwgcyA9IG4sIGMgPSBvKTtcbiAgICAgICAgdmFyIGwgPSBzID8/IFJ0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgYSwgbCksIHAgPSBLdChsLCB1KTtcbiAgICAgICAgcmV0dXJuIFJ0LndpdGgocCwgYywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZaShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgSmkgPSBuZXcgcG4oKSwgWmkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBvKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IG87XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8pIHtcbiAgICAgIHZhciBhID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhLnN0YXJ0QWN0aXZlU3BhbiwgYSwgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IEppO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgS2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgcG4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFdpID0gbmV3IEtpKCksIGdyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgWmkodGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBXaTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBvO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG8uZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgcnQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkocnQgfHwgKHJ0ID0ge30pKTtcbnZhciBoZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShoZSB8fCAoaGUgPSB7fSkpO1xudmFyIExlID0gWXQuZ2V0SW5zdGFuY2UoKSwgRnQgPSBcInRyYWNlXCIsIFFpID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IGdyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gQmksIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0gZG4sIHRoaXMuZGVsZXRlU3BhbiA9IEdpLCB0aGlzLmdldFNwYW4gPSBadCwgdGhpcy5nZXRBY3RpdmVTcGFuID0geGksIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSB1biwgdGhpcy5zZXRTcGFuID0gS3QsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSAkaTtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IEh0KEZ0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBndC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0dChGdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBCdChGdCwgZ3QuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgZ3IoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFVlID0gUWkuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IFhpID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBMZS5hY3RpdmUoKSwgYSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihvLCBhKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBoZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCB1dCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gTGUuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBydC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogaGUuT0sgfSksIGE7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBzID0gYSBpbnN0YW5jZW9mIEVycm9yID8gYS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIGE7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIG1uIGV4dGVuZHMgcm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBYaShlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKHRzKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgbW4obyk7XG4gIGlmICghZXMobywgcikpIHtcbiAgICBjb25zdCBhID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgZXMgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgdHMgPSAoZSkgPT4gRm8uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIHJzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgenIpLCBGID0gYXN5bmMgKGUpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEhyKSwgd2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIEpyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBfbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIEJvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgbnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IHEoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBKcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBWID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFJvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIG9zID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIEJyLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIGFzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBObyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgaXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgcnMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgYSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBpYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBhLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGZlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBpcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBvLmFtb3VudEF0b20sIGN1cnJlbmN5OiBvLmN1cnJlbmN5IH07XG4gIH1cbn0sIHluID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBxKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgQW8pXG4gICAgKVxuICApO1xufSwgd3IgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICBRZSxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIHNzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgQnIsIFwic2V0dXBfY2hlY2tvdXRcIiksIFd0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IHEoZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgUWUsIFwicGVyZm9ybV9jaGVja291dFwiKSwgZm4gPSAxZTMsIGNzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBmbixcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgbyA9IGF3YWl0IHEobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIElvKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgbyksIG87XG59LCBrdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBxKFxuICBlLFxuICB7IHR5cGU6IFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogdCB9LFxuICBKbyxcbiAgXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiXG4pLCBobiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBxKFxuICAgICAgZSxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiB0IH0gfSxcbiAgICAgIFlvXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAocikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEsocikpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufSwgbHMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgcShcbiAgZSxcbiAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogdCB9IH0sXG4gIFpvXG4pLCB1cyA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgZHMgPSAoZSwgdCkgPT4gISFlICYmIHQsIGduID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB3biA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgV2UgPSAzMiwgcHMgPSAxNiwgdm4gPSAxMCwgdnIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgQ2U7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShDZSB8fCAoQ2UgPSB7fSkpO1xuY2xhc3MgSGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gbXMoZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogV2UpO1xuICByZXR1cm4gdCA9PT0gV2UgJiYgKHQgPSBXZSAtIDEpLCB3bi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBfcyhlKSB7XG4gIGNvbnN0IHQgPSB5cygpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IEhlKENlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIHlzKCkge1xuICByZXR1cm4gZ3MoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBmcyhlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9IG1zKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBocyhlLCB0ID0gdm4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBIZShDZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiB2cilcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7dnJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgSGUoQ2UuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBvID0gdDsgbyA+IDA7IG8tLSlcbiAgICByID0gZSAlIFdlLCBuID0gd24uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyBXZTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBncygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIHdzKGUsIHQpIHtcbiAgY29uc3QgciA9IF9zKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4gaHMobiwgdm4pICsgZnMocHMsIHIpO1xufVxuY29uc3QgYm4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgRW4gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoYm4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gd3MoKTtcbiAgcmV0dXJuIHZzKHQpLCB0O1xufSwgdnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke2JufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn0sIGJzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG8gPSBPci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W29dID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFtvXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIFkgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChvLCBhKSA9PiB7XG4gIGNvbnN0IHMgPSBhLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgaWYgKCFzKSByZXR1cm4gbztcbiAgY29uc3QgYyA9IGEudHlwZSA9PT0gXCJjaGVja2JveFwiID8gYS5jaGVja2VkIDogYS52YWx1ZTtcbiAgcmV0dXJuIHsgLi4ubywgW3NdOiBjIH07XG59LCB7fSksIEVzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU28ucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCB0KSwgdDtcbiAgfVxufSwgUHMgPSBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIG1heC1oZWlnaHQ6IDYwMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgUG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke1BzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGEgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGEgfTtcbn07XG5mdW5jdGlvbiBTcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBhd2FpdCBjcyhlLCByKTtcbiAgICAgIGEgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoYSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgZm4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIENzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogTy5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBhdChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gUG4odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGEgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IFNzKG4uaWZyYW1lLCBhLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBDcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBTbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBhdChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBPLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBPLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gTy5TVUNDRVNTICYmIEV0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwga3MgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBDbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IEkoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBrcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBhcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGEoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKEsodSkpLCBjbGVhckludGVydmFsKGwpLCBzKEsodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogQXMsIGVycl9fOiBRdCB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgSXMgPSB6Lm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogei5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6LnN0cmluZygpXG59KSwgVHMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gSXMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBRdChuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBrbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBOcyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gQXMoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7dH1dYCksIHQ7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBjb25zdCByID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFF0KHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7Syh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBBbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBUcyh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIG8gPSBOcyhuLmhyZWYgPz8gXCJcIiksIGEgPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoYSAhPT0gbykge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7b30pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHthfSkuYDtcbiAgICB0aHJvdyBRdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBvLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgSW4gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFRuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgVSA9IHouZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcblUuRW51bS5zdHJpcGU7XG5jb25zdCBObiA9ICh7XG4gIHNjcmlwdElkOiBlLFxuICBzcmM6IHQsXG4gIGNoZWNrTG9hZGVkRm46IHJcbn0pID0+IHtcbiAgY29uc3QgbiA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBhKSA9PiB7XG4gICAgbGV0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHMuc3JjID0gdCwgcy5pZCA9IGUsIHMuYXN5bmMgPSAhMDtcbiAgICBjb25zdCBjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgcigpID8gbygpIDogYyA/IHMgPSBjIDogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJsb2FkXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgbygpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKSwgcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgXCJlcnJvclwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoXCJGYWlsZWQgdG8gbG9hZCB0aGUgc2NyaXB0XCIpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiBuLnNpZ25hbCB9XG4gICAgKTtcbiAgfSk7XG59LCBYdCA9ICgpID0+IE5uKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBlciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBvID0gdC5zaGlwcGluZ0NvbnRhY3QsIGEgPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBvKSB7XG4gICAgYVtkLkVNQUlMXSA9IGFbZC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgYVtkLkNPVU5UUlldID0gYVtkLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgYVtkLlpJUF9DT0RFXSA9IGFbZC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBhW2QuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IGFbZC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChvID09IG51bGwgPyB2b2lkIDAgOiBvLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKGFbZC5GSVJTVF9OQU1FXSA9IHMsIGFbZC5MQVNUX05BTUVdID0gYykgOiAoYVtkLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBhW2QuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBhO1xufTtcbnoub2JqZWN0KHtcbiAgZGF0YTogei5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSxcbiAgICBlcnJvcnM6IHouYXJyYXkoei5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHoubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBScyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgZ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIEZzID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgbyA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdHIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBvLCB0b3RhbDogYSB9ID0gRnMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBvLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBhLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBScyh7XG4gICAgICB0b3RhbDogYSxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBNcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgb2UgPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbZC5MSU5FMV0sXG4gIGxpbmUyOiBlW2QuTElORTJdLFxuICBsaW5lMzogZVtkLkxJTkUzXSxcbiAgY2l0eTogZVtkLkNJVFldLFxuICBzdGF0ZTogZVtkLlNUQVRFXSxcbiAgY291bnRyeTogZVtkLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtkLlpJUF9DT0RFXVxufSksIGFlID0gKGUsIHQpID0+IHtcbiAgaWYgKHQucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmUxOiBlW2QuU0hJUFBJTkdfTElORTFdLFxuICAgICAgbGluZTI6IGVbZC5TSElQUElOR19MSU5FMl0sXG4gICAgICBsaW5lMzogZVtkLlNISVBQSU5HX0xJTkUzXSxcbiAgICAgIGNpdHk6IGVbZC5TSElQUElOR19DSVRZXSxcbiAgICAgIHN0YXRlOiBlW2QuU0hJUFBJTkdfU1RBVEVdLFxuICAgICAgY291bnRyeTogZVtkLlNISVBQSU5HX0NPVU5UUlldLFxuICAgICAgemlwX2NvZGU6IGVbZC5TSElQUElOR19aSVBfQ09ERV1cbiAgICB9O1xufSwgeyBsb2dfXzogRWwsIGVycl9fOiBSbiB9ID0gSShcImNvbW1vblwiKSwgaXQgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCAkID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gdC5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBSbihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiB0LnBhcnNlKHIpO1xufSwgcnIgPSAoZSwgdCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShlKSxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKGUsIHQpXG59KSwgQWUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IGl0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IG9zKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBSbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgdChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBvZShlLnJlcXVpcmVkRm9ybUZpZWxkcyksXG4gICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KGUuYW55Q2RlQ29ubmVjdGlvbiwgbykgfTtcbiAgfVxufSwgTHMgPSB6LmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCBEcyA9IHouZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogamUsIGVycl9fOiBudCB9ID0gSShcImFkeWVuLWNjXCIpLCBPcyA9IHoub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHouc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IExzLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6LnN0cmluZygpXG59KSwgRm4gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFVzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IE9zLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbnQoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiB0LmRhdGE7XG59LCBqcyA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBiciA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCB4cyA9IGFzeW5jICgpID0+IHtcbiAgamUoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIGJyKCkgfHwgYXdhaXQgQ3QoNTAwKTtcbiAgaWYgKCFicigpKVxuICAgIHRocm93IG50KFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcihGbik7XG4gIHJldHVybiBqZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIEdzID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiB0LCBsb2NhbGU6IHIsIGNvdW50cnlDb2RlOiBuLCBjb21wb25lbnQ6IG8sIGhvc3Q6IGEsIGNhbmNlbEJ1dHRvbjogcyB9ID0gZSwgYyA9IGpzKHRbXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gamUoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgamUoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbSksIGEucmVtb3ZlKCk7XG4gICAgfSwgcCA9IChmKSA9PiB7XG4gICAgICBudChcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBmKSwgbCh7IHN0YXR1czogTy5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIHkgPSAoZikgPT4ge1xuICAgICAgbnQoXCJBZHllbiBlcnJvcjpcIiwgZiksIGwoeyBzdGF0dXM6IE8uRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBtID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogTy5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBtKTtcbiAgICBjb25zdCBfID0gKGYsIGgsIEUpID0+IHtcbiAgICAgIGEucmVtb3ZlKCksIGwoeyBzdGF0dXM6IE8uU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IGYsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICB4cygpLnRoZW4oXG4gICAgICAoZikgPT4gZih7XG4gICAgICAgIGNsaWVudEtleTogdFtcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiB0W1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogcixcbiAgICAgICAgY291bnRyeUNvZGU6IG4sXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IF8sXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogcCxcbiAgICAgICAgb25FcnJvcjogeVxuICAgICAgfSlcbiAgICApLnRoZW4oKGYpID0+IHtcbiAgICAgIGYuY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChvKTtcbiAgICB9KTtcbiAgfSk7XG59LCAkcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgciA9IGUgPz8gdCwgbiA9IERzLnNhZmVQYXJzZShyKTtcbiAgcmV0dXJuIG4uc3VjY2VzcyA/IChqZShgUmVzb2x2ZWQgbG9jYWxlOiAke24uZGF0YX1gKSwgbi5kYXRhKSA6IChudChgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7cn0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBNbiA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgTG4gPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gVXModCksIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBvLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBhLCBpZnJhbWU6IHMsIGNhbmNlbEJ1dHRvbjogYyB9ID0gUG4oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIHMucmVwbGFjZVdpdGgobyk7XG4gIGNvbnN0IGwgPSBhd2FpdCBHcyh7XG4gICAgaGVhZGVyczogbixcbiAgICBsb2NhbGU6ICRzKHIpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogbyxcbiAgICBob3N0OiBhLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gTy5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IE8uQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IE8uU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gamUoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBFdChsLnN0YXR1cyk7XG59LCBEbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pLCBPbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogei5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6LnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHouc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzogVnMsIGVycl9fOiBxcyB9ID0gSShcImNvbW1vbi1jY1wiKSwgenMgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlOiBlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzOiB0LFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzczogcixcbiAgcGF5bWVudF9tZXRob2Q6IG5cbn0pID0+IHtcbiAgY29uc3QgbyA9IHt9O1xuICByZXR1cm4gbiA9PT0gXCJhY2hcIiAmJiAob1tkLkZJUlNUX05BTUVdID0gei5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgb1tkLkxBU1RfTkFNRV0gPSB6LnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pKSwgZSAmJiAob1tkLlpJUF9DT0RFXSA9IEMpLCB0ICYmIChvW2QuTElORTFdID0gQywgb1tkLkNJVFldID0gQywgb1tkLlNUQVRFXSA9IEMsIG9bZC5DT1VOVFJZXSA9IEMsIG9bZC5aSVBfQ09ERV0gPSBDKSwgciAmJiAob1tkLlNISVBQSU5HX0xJTkUxXSA9IEMsIG9bZC5TSElQUElOR19DSVRZXSA9IEMsIG9bZC5TSElQUElOR19TVEFURV0gPSBDLCBvW2QuU0hJUFBJTkdfQ09VTlRSWV0gPSBDLCBvW2QuU0hJUFBJTkdfWklQX0NPREVdID0gQyksIE9iamVjdC5rZXlzKG8pLmxlbmd0aCA9PT0gMCA/IERlIDogRGUuZXh0ZW5kKG8pO1xufSwgSHMgPSAoZSwgdCwgciA9IHt9KSA9PiB7XG4gIGlmIChyKSB7XG4gICAgVnMoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIGNvbnN0IGEgPSBPYmplY3Qua2V5cyhyKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IGEubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IGMgPSBhW3NdLCBsID0gcltjXTtcbiAgICAgIGVbY10gfHwgKGVbY10gPSBsKTtcbiAgICB9XG4gIH1cbiAgZVtkLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIWVbZC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddLCBlW2QuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSAmJiAoZVtkLlNISVBQSU5HX0xJTkUxXSA9IGVbZC5MSU5FMV0sIGVbZC5TSElQUElOR19MSU5FMl0gPSBlW2QuTElORTJdLCBlW2QuU0hJUFBJTkdfTElORTNdID0gZVtkLkxJTkUzXSwgZVtkLlNISVBQSU5HX0NJVFldID0gZVtkLkNJVFldLCBlW2QuU0hJUFBJTkdfU1RBVEVdID0gZVtkLlNUQVRFXSwgZVtkLlNISVBQSU5HX0NPVU5UUlldID0gZVtkLkNPVU5UUlldLCBlW2QuU0hJUFBJTkdfWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSk7XG4gIGNvbnN0IG8gPSB6cyhyKS5zYWZlUGFyc2UoZSk7XG4gIGlmICghby5zdWNjZXNzKSB7XG4gICAgY29uc3QgYSA9IG8uZXJyb3IuZm9ybWF0KCksIHMgPSBicyhhKSwgYyA9IE9iamVjdC5rZXlzKHMpO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgYy5sZW5ndGg7IGwrKykge1xuICAgICAgY29uc3QgdSA9IGNbbF0sIHAgPSBzW3VdO1xuICAgICAgdCh1LCBwLCB1KTtcbiAgICB9XG4gICAgdGhyb3cgcXMoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gby5kYXRhO1xufSwgeyBsb2dfXzogQnMsIGVycl9fOiBZcyB9ID0gSShcImNvbW1vbi1jY1wiKSwgVyA9IEhzLCBVbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBvID0geHIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgICAgICBZcyhgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGEgPSBvLmRhdGE7XG4gICAgICAgICAgdChhLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBCcyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogSnMgfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gWnMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQga3QodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEtzKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBXKFxuICAgICAgYSxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIHMsXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGJyb3dzZXJfaW5mbzogUW4oKSxcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoby50b2tlbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChKcyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGMpLCAhKChuID0gKHIgPSBjLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHUgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodSksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhZHllbi1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGMsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEJlLCBlcnJfXzogam4gfSA9IEkoXCJhZHllbi1hcHBsZS1wYXlcIiksIFdzID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoQmUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFh0KCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChCZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gQmUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmFkeWVuQXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBqbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIFFzID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgYSA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBEbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgXyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogcCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG8sXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBQdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCBFKSA9PiB7XG4gICAgICBjb25zdCBQID0gKCkgPT4ge1xuICAgICAgICBCZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIEUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFpzKHYsIF8pO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdiA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi55LnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgS3ModiwgXyk7XG4gICAgICAgICAgaChTKTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIEUoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0ub25jYW5jZWwgPSBQLCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgJGUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogbyxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgeSwgbTtcbiAgY29uc3QgYyA9ICgoeSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5hbW91bnRBdG9tKSA/PyAobyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChtID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gby5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgcCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogYSAhPSBudWxsICYmIGEucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBhICE9IG51bGwgJiYgYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBhLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4ucCwgLi4uYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdChwKSB9IDogeyAuLi5wLCAuLi5hLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBwO1xufSwgbnIgPSAoKSA9PiBObih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBNdCA9IG51bGw7XG5jb25zdCBvciA9IGFzeW5jIChlKSA9PiBhd2FpdCBvbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBWZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBvcihlKTtcbiAgcmV0dXJuIE10ID09PSBudWxsICYmIChNdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIE10O1xufSwgeG4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gR3IucGFyc2UodCkgOiBudWxsO1xufSwgYXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgYSwgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAoYSA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBhLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBvID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLnBdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHkgPSBwLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltkLkxJTkUxXSA9IHJbZC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW2QuTElORTJdID0gcltkLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5MSU5FM10gPSByW2QuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltkLkNJVFldID0gcltkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNUQVRFXSA9IHJbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLkNPVU5UUlldID0gcltkLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IG0gPSByW2QuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBfID0gcltkLkxBU1RfTkFNRV0gfHwgeSB8fCBcIlwiO1xuICAgIG0gfHwgXyA/IChyW2QuRklSU1RfTkFNRV0gPSBtLCByW2QuTEFTVF9OQU1FXSA9IF8pIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gbyAmJiAocltkLlNISVBQSU5HX0xJTkUxXSA9IHJbZC5TSElQUElOR19MSU5FMV0gfHwgby5hZGRyZXNzMSB8fCBcIlwiLCByW2QuU0hJUFBJTkdfTElORTJdID0gcltkLlNISVBQSU5HX0xJTkUyXSB8fCBvLmFkZHJlc3MyIHx8IFwiXCIsIHJbZC5TSElQUElOR19MSU5FM10gPSByW2QuU0hJUFBJTkdfTElORTNdIHx8IG8uYWRkcmVzczMgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NJVFldID0gcltkLlNISVBQSU5HX0NJVFldIHx8IG8ubG9jYWxpdHkgfHwgXCJcIiwgcltkLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbZC5TSElQUElOR19aSVBfQ09ERV0gfHwgby5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltkLlNISVBQSU5HX1NUQVRFXSA9IHJbZC5TSElQUElOR19TVEFURV0gfHwgby5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltkLlNISVBQSU5HX0NPVU5UUlldID0gcltkLlNISVBQSU5HX0NPVU5UUlldIHx8IG8uY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IG5lLCBlcnJfXzogTmUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBYcyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgbTtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBPbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgbmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChuZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKG0gPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIG0uYXBpKSlcbiAgICAgIHJldHVybiBOZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IG9yKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIG5lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBGKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBfID0gJGUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBWZShlLmJhc2VVcmwsIF8pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkoXyk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBuZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBOZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIF8pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE4uYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBOZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgdC5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBlYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBfLCBmLCBoLCBFLCBQLCB2LCBTLCBBLCBMO1xuICAgIG5lKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBvLCBsID0gYS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHAgPSBhd2FpdCBGKHUpLCB5ID0gJGUoe1xuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIGdhdGV3YXk6IFwiYWR5ZW5cIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogYS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IFB0KHAsIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBtID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgayA9IGF3YWl0IG0ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgbmUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBrKTtcbiAgICAgIGNvbnN0IE0gPSBhcihyLCBrKSwgSiA9IFcoXG4gICAgICAgIE0sXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGlmIChnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uSlxuICAgICAgfSksICEoKGYgPSAoXyA9IGsucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBzZSA9IGF3YWl0IHdlKHUsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogSltkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEpbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogSltkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShKKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKEosIHAuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgYmUgPSB4bihzZSk7XG4gICAgICBuZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGJlKTtcbiAgICAgIGxldCB6ID0gYXdhaXQgVih1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IFFuKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoRSA9IChoID0gay5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbmUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB6KTtcbiAgICAgIGxldCBtZSA9ICh2ID0gKFAgPSB6LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IFBbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgVGUgPSAoUyA9IHoucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKChxZSkgPT4gcWUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoVGUgJiYgVGUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIG5lKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgVGUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogcWUgfSA9IGF3YWl0IGF0KHtcbiAgICAgICAgICB1cmw6IFRlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cWV9XWApLCBxZSA9PT0gTy5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChxZSA9PT0gTy5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFRlICYmICFtZSAmJiAoeiA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBUZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgbmUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgeiksIG1lID0gKEwgPSAoQSA9IHoucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEwuaWQpLCAhbWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogSixcbiAgICAgICAgY29uZmlybVJlc3VsdDogeixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaykge1xuICAgICAgdGhyb3cgTmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgayksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjoga1xuICAgICAgfSksIG5ldyBFcnJvcigoayA9PSBudWxsID8gdm9pZCAwIDogay5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBJZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBwdCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiB0YyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBrdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiByYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBwdChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYXQoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAocHQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBPLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IE8uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IFYodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwdChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gbmMoZSwgdCkge1xuICB2YXIgciwgbiwgbywgYSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gZXIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IFcoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBtID0gKGF3YWl0IHdlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UodSksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoXG4gICAgICAgIHUsXG4gICAgICAgIHQucHJlZmlsbC5jaGVja291dF9zZXR0aW5nc1xuICAgICAgKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IF8gPSBhd2FpdCBWKHQuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBtLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHB0KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgXyk7XG4gICAgbGV0IGYgPSAobiA9IChyID0gXy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZDtcbiAgICBjb25zdCBoID0gKG8gPSBfLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmluZChcbiAgICAgIChQKSA9PiBQLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmIChfID0gYXdhaXQgcmMoaCwgdCksIGYgPSAocyA9IChhID0gXy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBhWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgRSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChFKSwgQWUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IF8sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFllLCBlcnJfXzogR24gfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpLCBvYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChZZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKFllKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBZZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBGKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE4uYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBHbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHBcbiAgICB9O1xuICB9XG4pLCBhYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGEgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRihsKSwgcCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB5ID0gdHIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIF8gPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGEubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogUHQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgY29uc3QgUCA9ICgpID0+IHtcbiAgICAgICAgWWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIG0ub25jYW5jZWwgPSBQLCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGModiwgXyk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICBFKFMpO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLnkudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih2KTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBuYyh2LCBfKTtcbiAgICAgICAgICBoKFMpO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBHbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IFgsIGVycl9fOiBSZSB9ID0gSShcImF3eC1nb29nbGUtcGF5XCIpLCBpYyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgeSwgbTtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIFgoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gUmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChYKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgbnIoKSwgISgobSA9ICh5ID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucGF5bWVudHMpICE9IG51bGwgJiYgbS5hcGkpKVxuICAgICAgcmV0dXJuIFJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgb3IoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBSZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgWChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9ICRlKHtcbiAgICAgICAgcHJlZmlsbDogYyxcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG8ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogby5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBmID0gYXdhaXQgVmUoZS5iYXNlVXJsLCBfKSwgeyByZXN1bHQ6IGggfSA9IGF3YWl0IGYuaXNSZWFkeVRvUGF5KF8pO1xuICAgICAgaWYgKCFoKVxuICAgICAgICByZXR1cm4gWChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBSZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIF8pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBmZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBwID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE4uYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIHNjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIF8sIGYsIGgsIEUsIFAsIHYsIFM7XG4gICAgWChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKSwgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gbywgbCA9IGEubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgRih1KSwgeSA9ICRlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBhLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogUHQocCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBWZShlLmJhc2VVcmwsIHkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgbS5sb2FkUGF5bWVudERhdGEoeSk7XG4gICAgICBYKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQSk7XG4gICAgICBjb25zdCBMID0gYXIociwgQSksIGsgPSBXKFxuICAgICAgICBMLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgbyA9PSBudWxsID8gdm9pZCAwIDogby5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBYKFwiX19fXCIsIGspLCBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ua1xuICAgICAgfSk7XG4gICAgICBjb25zdCBNID0gKGYgPSAoXyA9IEEucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuO1xuICAgICAgaWYgKCFNKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IEogPSBhd2FpdCB3ZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogb2UoayksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShrLCBwLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEllKClcbiAgICAgIH0pLCB2ZSA9IHhuKEopO1xuICAgICAgWChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCBzZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBNXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFgoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSk7XG4gICAgICBsZXQgYmUgPSAoRSA9IChoID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICBjb25zdCB6ID0gKFAgPSBzZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBQLmZpbmQoXG4gICAgICAgIChtZSkgPT4gbWUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoeiAmJiB6LnJlZGlyZWN0X3VybCkge1xuICAgICAgICBYKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgeik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBtZSB9ID0gYXdhaXQgYXQoe1xuICAgICAgICAgIHVybDogei5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoWChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bWV9XWApLCBtZSA9PT0gTy5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChtZSA9PT0gTy5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHogJiYgIWJlICYmIChzZSA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiB6LnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB6LmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIFgoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSksIGJlID0gKFMgPSAodiA9IHNlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiBTLmlkKSwgIWJlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBrLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBzZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgUmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCAkbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSksIFZuID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHoubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6LnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBjYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBrdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGxjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGUucGF5bWVudCwgYSA9IGVyKHQubm9uQ2RlRm9ybUlucHV0cywgbyksIHMgPSBXKGEsIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCB3ZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbZC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKHMpLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKFxuICAgICAgICBzLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShvLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgVih0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChuID0gKHIgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHAgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocCksIEFlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChhKSwgbztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogbXQsIGVycl9fOiBxbiB9ID0gSShcImF1dGhuZXQtYXBwbGVwYXlcIiksIHVjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChtdChcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgWHQoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBtdChcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gbXQoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgcCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogbVxuICAgICAgICB9KSwgdC5nZXQub25DaGVja291dEVycm9yKChtID09IG51bGwgPyB2b2lkIDAgOiBtLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogcFxuICAgIH07XG4gIH1cbiksIGRjID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogYSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCAkbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBwID0gdS5tb2RlID09PSBcInNldHVwXCIsIHkgPSB0cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIF8gPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IHAsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBvXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIEUpID0+IHtcbiAgICAgIG0ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIG10KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgRShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIG0ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKFApID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjYyhQLCBfKTtcbiAgICAgICAgfSBjYXRjaCAodikge1xuICAgICAgICAgIEUodik7XG4gICAgICAgIH1cbiAgICAgIH0sIG0ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFAgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHkudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUCk7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2ID0gYXdhaXQgbGMoUCwgXyk7XG4gICAgICAgICAgaCh2KTtcbiAgICAgICAgfSBjYXRjaCAodikge1xuICAgICAgICAgIEUodik7XG4gICAgICAgIH1cbiAgICAgIH0sIG0uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgcW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBQZSwgZXJyX186IEplIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIHBjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBwLCB5O1xuICAgIFBlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBWbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBvID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIW8ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gSmUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChQZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG5yKCksICEoKHkgPSAocCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBwLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBKZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgUGUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoYSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSAkZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgXyA9IGF3YWl0IFZlKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBmIH0gPSBhd2FpdCBfLmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghZilcbiAgICAgICAgcmV0dXJuIFBlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIEplKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IGZlKGEsIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBtYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBfLCBmLCBoLCBFO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG8sIGwgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVm4pLm1ldGFkYXRhLCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBwID0gYXdhaXQgRih1KSwgeSA9ICRlKHtcbiAgICAgIHByZWZpbGw6IHAsXG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGEsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiByLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogcCxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBjb25zdCBtID0gYXdhaXQgVmUoZS5iYXNlVXJsLCB5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgUCA9IGF3YWl0IG0ubG9hZFBheW1lbnREYXRhKHkpO1xuICAgICAgUGUoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBQKTtcbiAgICAgIGNvbnN0IHYgPSBhcih0LCBQKSwgUyA9IFcodiwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgQSA9IChmID0gKF8gPSBQLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogXy50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghQSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBMID0gYXdhaXQgd2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1tkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IG9lKFMpLFxuICAgICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogYWUoUywgcC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgICB9KTtcbiAgICAgIFBlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEwpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IFYodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHAudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShBKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoRSA9IChoID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIEFlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBTLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChQKSB7XG4gICAgICB0aHJvdyBKZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBQKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBQXG4gICAgICB9KSwgbmV3IEVycm9yKChQID09IG51bGwgPyB2b2lkIDAgOiBQLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IF9jLCBlcnJfXzogem4gfSA9IEkoXCJwb2NreXQtY2NcIiksIHljID0gei5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHouc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogei5zdHJpbmcoKVxufSksIGZjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHljLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgem4obiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgSG4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIF9jKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyB6bihyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke0sodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgR3QgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBoYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBnYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBmYyh0KSwgbiA9IGF3YWl0IFNuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBIbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogRXIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIHdjID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSksIEJuID0gYXN5bmMgKGUpID0+IHtcbiAgZyhcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLmVcbiAgfSksIEVyKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke2UuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBoaShlKSwgZyhcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIEVyKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgdmMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gd2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSAzRFMgbWV0YWRhdGEgaGFzIHVuZXhwZWN0ZWQgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3IuZXJyb3JzKX1gKTtcbiAgcmV0dXJuIHtcbiAgICBzdHJpcGVfcGs6IHQuZGF0YS5zdHJpcGVfcGssXG4gICAgY2xpZW50X3NlY3JldDogdC5kYXRhLmNsaWVudF9zZWNyZXQsXG4gICAgc3RyaXBlX3BtX2lkOiB0LmRhdGEuc3RyaXBlX3BtX2lkXG4gIH07XG59LCBiYyA9IDQsIHsgbG9nX186IGtlLCBlcnJfXzogd3QgfSA9IEkoXCJ1bmlmaWVkLWNjXCIpLCBFYyA9IGFzeW5jICh7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiBvXG59KSA9PiB7XG4gIGtlKFwi4pScIFJ1bm5pbmcgdW5pZmllZCBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihhKTtcbiAga2UoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgY29uc3QgYyA9IFcociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpbiB0aGUgY2hlY2tvdXQgYXR0ZW1wdCBsb2dzXG4gICAgICBkZXZpY2VUb2tlbjogRW4oKVxuICAgIH0sXG4gICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITAsXG4gICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB7XG4gICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICB9LFxuICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWRcbiAgfTtcbiAgd3QobywgbCksIGtlKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gUGFydGlhbCBQTXMgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gIGNvbnN0IHUgPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgfSk7XG4gIFVuKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgY29uc3QgcCA9IGF3YWl0IF9uKGEsIGwpO1xuICBpZiAoa2UoXCLilJwgc3RhcnRQZiByZXN1bHRcIiwgcCksIHAuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICByZXR1cm4gWW4ocy5tb2RlLCBwKTtcbiAgaWYgKCFwLmNoZWNrb3V0X2F0dGVtcHRfaWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgYXR0ZW1wdCBJRCBmcm9tIFBGIHJlc3VsdFwiKTtcbiAgcmV0dXJuIFBjKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIHByZWZpbGw6IHMsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbCxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBhLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHAsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IHAuY2hlY2tvdXRfYXR0ZW1wdF9pZFxuICB9KTtcbn0sIFBjID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQ6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBuLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBvLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IGEsXG4gICAgc3RhcnRQZlJlc3VsdDogcyxcbiAgICBjaGVja291dEF0dGVtcHRJZDogY1xuICB9ID0gZTtcbiAgbGV0IGwgPSBzO1xuICBmb3IgKGxldCB1ID0gMDsgdSA8IGJjOyB1KyspIHtcbiAgICBrZShg4pScIFJ1bm5pbmcgY29uZmlybSBsb29wIGl0ZXJhdGlvbiAke3V9YCksIGcoXCJ1bmlmaWVkX2NjX2NvbmZpcm1fbG9vcF9pdGVyYXRpb25cIiwgeyBpdGVyYXRpb246IHUgfSk7XG4gICAgY29uc3QgeyB1c2VyQWN0aW9uOiBwIH0gPSBrYyhsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IGF3YWl0IFNjKHQuYmFzZVVybCwgcCwgciwgbik7XG4gICAgICBvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgICAuLi5vLmV4dHJhX21ldGFkYXRhLFxuICAgICAgICAuLi55Lm1ldGFkYXRhRm9yQ29uZmlybVN0ZXBcbiAgICAgIH0sIGtlKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKTtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICBjb25zdCBtID0gSyh5KTtcbiAgICAgIHd0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBtKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBtLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBvLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIGtlKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBZbihyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIFNjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBCbih2Yyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoa24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgQW4oZSwgdCkgfSB9O1xuICAgIGlmIChNbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IExuKFxuICAgICAgICBuW2QuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoQ2ModCkpXG4gICAgICByZXR1cm4gYXdhaXQgWm4oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgQ2MgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBKbihbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBrYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBLby5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyB3dChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgd3QoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBZbiA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogVCwgZXJyX186IFByIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xuei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBBYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBfLCBmO1xuICAgIFQoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihhKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi50LFxuICAgICAgcHJlZmlsbDogc1xuICAgIH0pO1xuICAgIGNvbnN0IGMgPSAoKF8gPSBzLmZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5ncykgPT0gbnVsbCA/IHZvaWQgMCA6IF8udW5pZmllZF9jYykgPz8gMDtcbiAgICBUKGDilJwgVW5pZmllZCBDQyByb2xsb3V0OiAke01hdGgucm91bmQoYyAqIDEwMCl9JWApO1xuICAgIGNvbnN0IGwgPSBNYXRoLnJhbmRvbSgpLCB1ID0gbCA8IGMsIHAgPSB7XG4gICAgICByb2xsOiBsLFxuICAgICAgdW5pZmllZENDUm9sbG91dFJhdGlvOiBjLFxuICAgICAgdXNlVW5pZmllZENDRmxvdzogdVxuICAgIH07XG4gICAgaWYgKHUpXG4gICAgICByZXR1cm4gVChg4pScIFBpY2tlZCB1bmlmaWVkIENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcInVuaWZpZWRfY2NfZmxvd19waWNrZWRcIiwgcCksIEVjKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IG8sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgVChg4pScIFBpY2tlZCBsZWdhY3kgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwibGVnYWN5X2NjX2Zsb3dfcGlja2VkXCIsIHApLCBUKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gICAgY29uc3QgeSA9IFcoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBzLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnlcbiAgICB9KTtcbiAgICBjb25zdCBtID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogeSxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICExLFxuICAgICAgcGF5bWVudF9yb3V0ZV9pZDogby5wYXltZW50Um91dGVJZCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgVChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCB5bihvLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChVbihoLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIFQoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cy50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IEUgPSBhd2FpdCBzcyhhLCBtKTtcbiAgICAgICAgcmV0dXJuIFQoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtFLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogRSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVChg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IEUgPSBhd2FpdCB3cihhLCBtKTtcbiAgICAgICAgcmV0dXJuIFQoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IEUgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBpZiAoaCBpbnN0YW5jZW9mIG1uICYmIGgub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgVChcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIFQoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgaC5yZXNwb25zZS5oZWFkZXJzKSwgZyhcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgLi4udCxcbiAgICAgICAgICAuLi5oLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IEUgPSBoLnJlc3BvbnNlLmhlYWRlcnMgPz8ge307XG4gICAgICAgIFwib3AtZXhpc3RpbmctY2MtcG0taWRcIiBpbiBFICYmIChtLmV4aXN0aW5nX2NjX3BtX2lkID0gRVtcIm9wLWV4aXN0aW5nLWNjLXBtLWlkXCJdLCBUKGDilJwgRXhpc3RpbmcgQ0MgUE0gSUQ6ICR7bS5leGlzdGluZ19jY19wbV9pZH1gKSk7XG4gICAgICAgIGNvbnN0IFAgPSBoYyhoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoUCkge1xuICAgICAgICAgIFQoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IGdjKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBtLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBUKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IE0gPSBhd2FpdCBBbihlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbS5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgVChcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IExuKFxuICAgICAgICAgICAgcltkLkNPVU5UUlldLFxuICAgICAgICAgICAgaC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgcy5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIG0uZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSBNO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEEgPSBhd2FpdCBfbihhLCBtKTtcbiAgICAgICAgVChcIuKUnCBTdGFydCBwYXltZW50IGZsb3cgcmVzdWx0OlwiLCBBKTtcbiAgICAgICAgY29uc3QgTCA9ICgoZiA9IGgucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IGZbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIFAgPyBUKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBMID8gKFQoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBCbihJYyhBKSkpIDogKFQoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBabihBLCBlLmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgayA9IEEuY2NfcG1faWQ7XG4gICAgICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIFQoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7a31dYCk7XG4gICAgICAgICAgY29uc3QgTSA9IGF3YWl0IFYoYSwge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBUKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIE0pO1xuICAgICAgICAgIGNvbnN0IEogPSBpdChNKTtcbiAgICAgICAgICByZXR1cm4gVChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0oucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBKIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVChg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtMID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IE0gPSBhd2FpdCB3cihhLCB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGssXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBMXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFQoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IE0gfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgUHIoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFByKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgSWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIHVpLnBhcnNlKHQpO1xufSwgVGMgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIEpuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUuZmluZCgocikgPT4gVGMuaW5jbHVkZXMoci50eXBlKSk7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFRvLnBhcnNlKHQpO1xufSwgWm4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gSm4oZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpO1xuICBpZiAoci5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBUKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIiksIGcoXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIFQoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtyLnJlZGlyZWN0X3VybH1dYCksIGcoXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLnJcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzOiBuIH0gPSBhd2FpdCBhdCh7IHVybDogci5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHQgfSk7XG4gIGlmIChUKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gTy5DQU5DRUxMRUQpXG4gICAgdGhyb3cgZyhcIjNkc19jYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gTy5GQUlMVVJFKVxuICAgIHRocm93IGcoXCIzZHNfZmFpbHVyZVwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGcoXCJjb21tb25fM2RzX2NvbXBsZXRlZFwiKTtcbn0sIE5jID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogei5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6LnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogSCwgZXJyX186IFJjIH0gPSBJKFwibG9vcC1jcnlwdG9cIiksIEZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIEgoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSAkKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTmMpO1xuICAgIEgoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgSChcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHIubW9kZSA9PT0gXCJzZXR1cFwiLCBvID0gYXdhaXQga3QoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgIH0pLCBhID0gYXdhaXQgZmUoXG4gICAgICBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICByLnRva2VuLFxuICAgICAgbixcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFuICYmICF0Lm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHIuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3IuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7dC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghbyB8fCAhby5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSBvLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjID0gcy5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHMubWluX2F1dGhvcml6YXRpb25fYW1vdW50O1xuICAgIGNvbnN0IHUgPSBzLmFsbG93X2N1c3RvbWVyX3RvX2Nob29zZV9hdXRoO1xuICAgIGxldCBwO1xuICAgIG4gPyAocCA9IDAsIGMgPSBNYXRoLm1heChjLCBsKSkgOiAocCA9IChhID8gYS5hbW91bnRBdG9tIDogci5hbW91bnRfdG90YWxfYXRvbSkgKiBzLnRva2VuX3ByaWNlLCBsID0gTWF0aC5tYXgobCwgcCksIGMgPSBNYXRoLm1heChjLCBsKSk7XG4gICAgY29uc3QgeSA9IHAsIG0gPSB2NCgpLCBfID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogeSxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBjdXN0b21lclJlZklkOiBtLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudDogbCxcbiAgICAgIGFsbG93Q3VzdG9tZXJUb0Nob29zZUF1dGg6IHVcbiAgICB9LCBmID0ge1xuICAgICAgYXBpS2V5OiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBfLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGZcbiAgICB9O1xuICB9XG4pLCBNYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIEgoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgSChcImNvbnRleHRcIiwgZSksIEgoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgdCksIEgoXCJub25DZGVGb3JtSW5wdXRzXCIsIHIpLCBIKFwiZmxvd0NhbGxiYWNrc1wiLCBuKSwgSChcImN1c3RvbVBhcmFtc1wiLCBvKTtcbiAgICBjb25zdCBhID0gYXdhaXQgRihlLmFueUNkZUNvbm5lY3Rpb24pO1xuICAgIEgoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBzID0gVyhcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGEuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYS5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBycihzLCBhLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBpZiAoIW8uc3VjY2VzcylcbiAgICAgIHRocm93IGcoXCJsb29wX3BheV9mbG93X2ZhaWx1cmVcIiwgbyksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gU3VjY2VzcyBpcyBub3QgdHJ1ZS5cIik7XG4gICAgY29uc3QgcCA9IGF3YWl0IHdlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgLi4udSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogSWUoKVxuICAgIH0pLCB5ID0gYXdhaXQgVihjLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogby5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IHAuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBvLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBvLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogby5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEgoYENvbmZpcm0gcmVzdWx0OiAke3l9YCksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBIKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCB5KTtcbiAgICAgIGNvbnN0IG0gPSBpdCh5KTtcbiAgICAgIHJldHVybiBIKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7bS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG0gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEgoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIXkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IFJjKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgeSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IHkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBFZSwgZXJyX186IExjIH0gPSBJKFwicGF5cGFsXCIpLCBLbiA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHoub2JqZWN0KHsgY2xpZW50X2lkOiB6LnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KSwgRGMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBLbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gTi5wYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIE9jID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIEVlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBGKGEpLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IG8uc2V0dGluZ3MgPz8ge307XG4gICAgICBFZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gS24ucGFyc2Uocik7XG4gICAgICBFZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBwID0gVyh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTXMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIHkgPSBycihwLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIEVlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBtID0gdjQoKSwgXyA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBfLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IF8gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogbVxuICAgICAgICB9LFxuICAgICAgICAuLi55XG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBFID0gYnRvYShKU09OLnN0cmluZ2lmeShmKSksIFAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IEVcbiAgICAgIH0pLCB2ID0gYCR7aH0/JHtQLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBFZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2LCBhd2FpdCBDdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IENuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhLFxuICAgICAgICBtLFxuICAgICAgICB2XG4gICAgICApO1xuICAgICAgRWUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBBID0gR3QoUy5ocmVmLCBcImNhdHRcIiksIEwgPSBHdChTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgayA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IF8gPyBBIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogXyA/IEwgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEVlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIGspLCBBZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHAsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGssXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogX1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdGhyb3cgTGMoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBhKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBhIH0pLCBuZXcgRXJyb3IoKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogY2UsIGVycl9fOiBTciB9ID0gSShcInBvY2t5dC1wYXlwYWxcIiksIFduID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogei5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgVWMgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9ICQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBqYyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBrLCBNO1xuICAgIGNlKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoYSk7XG4gICAgY2UoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBXbi5wYXJzZSh0KTtcbiAgICBjZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MsIHUgPSBXKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gcnIodSwgcy5jaGVja291dF9zZXR0aW5ncyk7XG4gICAgY2UoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCB5ID0gdjQoKSwgbSA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBfID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBtID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChrID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBrLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiB5XG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0sIGYgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KF8pKSwgRSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIFAgPSBgJHtmfT8ke0UudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoTSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgTS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBjZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBQLCBhd2FpdCBDdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNlKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBjZShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCB2ID0gYXdhaXQgQ24oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgYSxcbiAgICAgIHksXG4gICAgICBQXG4gICAgKTtcbiAgICBjZShcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB2KTtcbiAgICBjb25zdCBTID0gSG4odi5ocmVmKSwgQSA9IEd0KHYuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghQSlcbiAgICAgIHRocm93IFNyKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB2LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgY2UoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7U31gKTtcbiAgICBjb25zdCBMID0gYXdhaXQgVihhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUyxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBBIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKGNlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEwpLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEwucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgU3IoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBMKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIENyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IHgsIGVycl9fOiB4YyB9ID0gSShcInN0cmlwZS1saW5rXCIpLCBHYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksICRjID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIFZjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB4KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEdjKTtcbiAgICB4KFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgRihvKSwgcyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIHgoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGZlKG8sIGEudG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgbWkobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICB4KFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBwID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgeSA9ICgpID0+IHtcbiAgICAgIHAubW91bnQoYCMke0NyfWApO1xuICAgIH0sIG0gPSAoKSA9PiB7XG4gICAgICBwLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8geChcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoeChcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgeSgpKSwgcC5vbihcImNsaWNrXCIsIGFzeW5jIChfKSA9PiB7XG4gICAgICBpZiAoeChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgeChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXy5yZXNvbHZlKCk7XG4gICAgfSksIHAub24oXCJjb25maXJtXCIsIGFzeW5jIChfKSA9PiB7XG4gICAgICB4KFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBfKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBfLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZi5lcnJvciA/ICh4YyhcImVycm9yXCIsIGYuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoZi5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoeChcInBheW1lbnRNZXRob2RcIiwgZi5wYXltZW50TWV0aG9kKSwgTi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IGYucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IHksXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBtLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgSGMoQ3IpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgcWMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB4KFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBGKGEpO1xuICAgIHgoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSB6YyhyLCBvLnN0cmlwZVBNKSwgbCA9IFcoYywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubFxuICAgIH0pLCB4KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCB3ZShhLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogby5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogbFtkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBsW2QuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBvZShsKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBJZSgpXG4gICAgfSk7XG4gICAgeChcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCB5ID0gJGMucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHgoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgbSA9IGF3YWl0IFYoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB5XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBpdChtKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB4KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBtID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBsW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBsW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IG9lKGwpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBhZShsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGxbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBXdChhLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgemMgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgcCwgeSwgbTtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4ub10gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltkLkVNQUlMXSA9IHJbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChwID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogcC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAoKHkgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogeS5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKChtID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBzID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIHMgfHwgYyA/IChyW2QuRklSU1RfTkFNRV0gPSBzLCByW2QuTEFTVF9OQU1FXSA9IGMpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgeChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIEhjID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogQiwgZXJyX186IEJjIH0gPSBJKFwic3RyaXBlLXByXCIpLCBZYyA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSksIEpjID0geWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEIoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gJChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFljKTtcbiAgICBCKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBGKG4pLCBhID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgQihcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgZmUobiwgby50b2tlbiwgYSwgdm9pZCAwKSwgYyA9IGF3YWl0IF9pKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgYVxuICAgICk7XG4gICAgQihcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBCYyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgQihcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKHAsIHkpID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBwLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgWmMgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgIGluaXRSZXN1bHQ6IGFcbiAgfSkgPT4ge1xuICAgIGlmIChCKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgby5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7by5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGEucHI7XG4gICAgaWYgKG8gIT0gbnVsbCAmJiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBCKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBXYyhjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgQihcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgeWkoYyk7XG4gICAgQihcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEIoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBLYyhyLCBsKSwgcCA9IFcodSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ucFxuICAgIH0pLCBCKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgcCk7XG4gICAgY29uc3QgeSA9IGF3YWl0IG5zKHMsIHtcbiAgICAgIGZpZWxkczogcCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdFxuICAgIH0pLCBtID0gUWMoeSk7XG4gICAgQihcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGZpKG0sIGwpO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBGKHMpO1xuICAgIGlmIChfLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQihcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCBWKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBpdChmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBCKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogcFtkLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IHBbZC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogcFtkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogb2UocCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGFlKHAsIF8uY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogXy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogXy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFd0KHMsIGYpIH07XG4gICAgfVxuICB9XG4pLCBLYyA9IChlLCB0KSA9PiB7XG4gIHZhciBwLCB5LCBtLCBfO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgoeSA9IChwID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBwLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuc3BsaXQoL1xccysvKSkgPz8gW10sIGEgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChfID0gKG0gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBtLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW2QuRU1BSUxdID0gcltkLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW2QuWklQX0NPREVdID0gcltkLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW2QuQ09VTlRSWV0gPSByW2QuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gcltkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbZC5MQVNUX05BTUVdIHx8IGEgfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW2QuRklSU1RfTkFNRV0gPSBsLCByW2QuTEFTVF9OQU1FXSA9IHUpIDogKHJbZC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltkLkxBU1RfTkFNRV0gPSBcIlwiKSwgQihcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIFdjID0gKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBvID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBRYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBkaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBGZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigobykgPT4ge1xuICAgIGNvbnN0IGEgPSByID09PSB2b2lkIDAgPyAhMCA6IG8ucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBvLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBhICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEFjXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IEpjLFxuICAgIHJ1bjogWmNcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFZjLFxuICAgIHJ1bjogcWNcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IFVjLFxuICAgIHJ1bjogamNcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IERjLFxuICAgIHJ1bjogT2NcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGljLFxuICAgIHJ1bjogc2NcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBvYyxcbiAgICBydW46IGFjXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IEZjLFxuICAgIHJ1bjogTWNcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiB1YyxcbiAgICBydW46IGRjXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IHBjLFxuICAgIHJ1bjogbWNcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBYcyxcbiAgICBydW46IGVjXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBXcyxcbiAgICBydW46IFFzXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBYYywgZXJyX186IGVsIH0gPSBJKFwiaW5pdC1mbG93c1wiKSwgdGUgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFplKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IG8gPSBhd2FpdCB0KG4pO1xuICAgICAgICBYYyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBvKSwgci5zZXQobyk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIGVsKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEsobyksIFwiRGV0YWlsczpcIiwgbyksIHIudGhyb3cobywgSyhvKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgdGwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgcmwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogdGUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogdGUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB0ZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgTi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogdGUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiB0ZShcIkxvb3BcIiwgTi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB0ZShcIlBheVBhbFwiLCBOLnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IHRlKFwiUG9ja3l0IFBheVBhbFwiLCBOLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB0ZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE4uYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB0ZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgTi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiB0ZShcIkFkeWVuIEdvb2dsZVBheVwiLCBOLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiB0ZShcIkFkeWVuIEFwcGxlUGF5XCIsIE4uYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IG5sIH0gPSBJKFwiZm9ybS1jYWxsYmFja3NcIiksIHJlID0gei5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGtyID0gei5vYmplY3Qoe1xuICBvbkZvY3VzOiByZSxcbiAgb25CbHVyOiByZSxcbiAgb25DaGFuZ2U6IHJlLFxuICBvbkxvYWQ6IHJlLFxuICBvbkxvYWRFcnJvcjogcmUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiByZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IHJlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogcmUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcmUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogcmUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiByZVxufSksIGRlID0gY2xhc3MgZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IGFhKHIsIG4gPz8gZGUuTk9PUCwgbmwpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBvO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gZGUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmRlLk5PT1AgPSAoKSA9PiB7XG59LCBkZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoa3Iua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGRlLk5PT1A7XG4gIH0pLCB0O1xufSwgZGUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZGUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKGtyLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgJHQgPSBkZTtcbmZ1bmN0aW9uIG9sKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBqKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChvKSA9PiBvLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobykgPT4gby5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIGFsKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IGooKTtcbiAgICAgICAgcmV0dXJuICgodCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBvID0gKG4gPSBqKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBhID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gYSA/IGEuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBpbCgpIHtcbiAgY29uc3QgZSA9IG9sKCksIHQgPSBhbChlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBRbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIG8gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgYSA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBvLFxuICAgIGFjY2VwdF9oZWFkZXI6IGFcbiAgfTtcbn07XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZSkpKFIgfHwge30pO1xuei5uYXRpdmVFbnVtKFIpO1xuY29uc3Qgc2wgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IEx0LCBlcnJfXzogY2wgfSA9IEkoXCJ0cmFjZXJcIiksIGxsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICB1bChlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgQXI7XG5jb25zdCB1bCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUQzWFJ0UXlPLSF+ezAwM31+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogbywgV2ViVHJhY2VyUHJvdmlkZXI6IGEgfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtREs1WmRRNWktIX57MDA2fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogYyB9ID0gcywgbCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DNnVmUnZORi0hfnswMGJ9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gbCwgcCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CYVRia0Y4TS0hfnswMGN9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogeSB9ID0gcCwgbSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CRGhJdlFYMC0hfnswMGV9fi5qcycpLCB7IFJlc291cmNlOiBfIH0gPSBtLCBmID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtQ2k5OFA0SVktIX57MDBofX4uanMnKS50aGVuKChiZSkgPT4gYmUuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0gZiwgRSA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1Cbm5XMXJDNS0hfnswMGt9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBQIH0gPSBFLCB2ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUMySXVicENxLSF+ezAwbX1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBTLCBCM0luamVjdEVuY29kaW5nOiBBIH0gPSB2LCBMID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURObnRxOGFVLSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBrIH0gPSBMO1xuICBMdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IE0gPSBkbCh0KTtcbiAgTHQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtNfWApO1xuICBjb25zdCBKID0gbmV3IFAoeyB1cmw6IE0gfSksIHZlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGEoe1xuICAgIHJlc291cmNlOiBuZXcgXyh2ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IG8obmV3IG4oKSksXG4gICAgICBuZXcgayhKLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IFMoeyBpbmplY3RFbmNvZGluZzogQS5NVUxUSV9IRUFERVIgfSlcbiAgfSksIHkoe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgQXIgPSBVZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBMdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgQXI7XG59LCBkbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn0sIElyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEFwcGxlUGF5LCBlLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBlLmFkeWVuQXBwbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgobykgPT4ge1xuICAgIGNvbnN0IGEgPSBvLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBhICE9IG51bGwgJiYgYS5pc0F2YWlsYWJsZSAmJiByLnB1c2goYSk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBuLnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IHBsKHIsIG8pXG4gIH07XG59LCBUciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhHb29nbGVQYXksIGUuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBlLmFkeWVuR29vZ2xlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKG8pID0+IHtcbiAgICBjb25zdCBhID0gby5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgYSAhPSBudWxsICYmIGEuaXNBdmFpbGFibGUgJiYgci5wdXNoKGEpO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IG4uc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChvKSA9PiBvLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IG1sKHIsIG8pXG4gIH07XG59LCBwbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChvKSA9PiBvLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIG1sID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKG8pID0+IG8ucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY2xhc3MgX2wge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBvKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGEpID0+IHtcbiAgICAgIGlmICghYS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoTnIoYS5vcmlnaW4pICE9PSBOcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEucGVucGFsIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEuc291cmNlICYmIGEuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBFcyhKU09OLnBhcnNlKGEuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgcCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAocCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGEuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIHApO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChhKSA9PiBhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWEuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBhLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBhKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGEubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGEpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGEubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gbztcbiAgfVxufVxuY29uc3QgTnIgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiB5bChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgdXMobik7XG4gIGlmICghZHMobiwgbykpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIGZsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IGhsID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChvKSA9PiB7XG4gICAgaWYgKG8uaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBhID0gby5sb2FkZWRWYWx1ZSwgcyA9IGEuaXNBdmFpbGFibGUgJiYgYS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBhLmlzQXZhaWxhYmxlICYmIGEuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIFJyKFwiYXBwbGVfcGF5XCIsIGEsIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBScihcImdvb2dsZV9wYXlcIiwgYSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIFJyID0gKGUsIHQsIHIsIG4sIG8pID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBZKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBGciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGxlLCBlcnJfXzogUSB9ID0gSShcIm9wLWZvcm1cIiksIHBlID0gY2xhc3MgcGUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIG87XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBaZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgWmUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IFplKCksIHRoaXMuaW5pdEZsb3dzID0gcmwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYSA9IFVlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBhLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHJ0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIExlLndpdGgoVWUuc2V0U3BhbihMZS5hY3RpdmUoKSwgcyksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KHVlLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIGxlKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIGxlKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIGxlKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxlKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcIndhaXRpbmdfZm9yX2NkZV9jb25uZWN0aW9uXCIpLCBsZShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIExlLmFjdGl2ZSgpKSwgcCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBGclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIGxlKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBscyhwLCB0aGlzLmRldmljZVRva2VuKSwgbGUoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgICAgY29uc3QgeSA9IHBlLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBwLFxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zZXQoeSksIGhsKHRoaXMuaW5pdEZsb3dzLCB5LCB0aGlzLmZvcm1DYWxsYmFja3MpLCBsZShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdGwodGhpcy5pbml0Rmxvd3MsIHksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIGxlKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7IGNvZGU6IGhlLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gSyhjKTtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogaGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIFEoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGEsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSB1ZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gYSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoYSksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGEpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoYSksIGEpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChhLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gbm8ucGFyc2UoYSksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBwID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gcC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gcC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChhLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBhLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbdWUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3VlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbdWUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFt1ZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW3VlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1thXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGEpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGEuc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIHNsKGEuc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGEpID0+IHV0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB5bChhLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihhLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGEudHlwZSA9PT0gdWUuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IFEoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHMpKSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9IGFzeW5jIChhKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgUShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB1dChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4uYSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBOLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRmUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB1dChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICBpZiAoIWEpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IHMsIGlzQXZhaWxhYmxlOiBjIH0gPSBJcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCB7IHByb2Nlc3NvcnM6IGwsIGlzQXZhaWxhYmxlOiB1IH0gPSBUcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCBwID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgeSA9IChwID09IG51bGwgPyB2b2lkIDAgOiBwLmlzQXZhaWxhYmxlKSA/PyAhMSwgbSA9IGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICh2KSA9PiB2LnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIHYucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgKSwgXyA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBmID0gKF8gPT0gbnVsbCA/IHZvaWQgMCA6IF8uaXNBdmFpbGFibGUpID8/ICExLCBoID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBzLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogbCxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHkgPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB5XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IG0gPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBtXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBmID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9XG4gICAgICAgIF0sIEUgPSB7XG4gICAgICAgICAgcGF5cGFsOiBSLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFIuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBSLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogUi5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFIuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFIuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogUi5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW3YsIFNdKSA9PiB7XG4gICAgICAgICAgY29uc3QgQSA9IFMucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBFW3ZdID8/IHYsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiAoQSA9PSBudWxsID8gdm9pZCAwIDogQS5pc0F2YWlsYWJsZSkgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uaF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKGEsIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBRKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHV0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogYSwgc2V0dGluZ3M6IHMgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChhKSB7XG4gICAgICAgICAgICAgIGNhc2UgUi5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogWShsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEZlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBZKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBGZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFkobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gSXIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5nb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXJ0RmxvdzogdSB9ID0gVHIodGhpcy5pbml0Rmxvd3MpO1xuICAgICAgICAgICAgICAgIHJldHVybiB1KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFEoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgUShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBRKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIFEoXG4gICAgICAgICAgICAgICAgICAgIFwiYWR5ZW4tYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBFdChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgYTtcbiAgICAgIGxlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoYSA9IGooKSkgPT0gbnVsbCB8fCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBsaSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhhKTtcbiAgICB9LCBwZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuM1wiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9ICR0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBmbCgpLCB0aGlzLmRldmljZVRva2VuID0gRW4oKSwgY2koKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0gaWwoKTtcbiAgICBvbih0aGlzLmJhc2VVcmwpLnRoZW4oKGEpID0+IHtcbiAgICAgIGlmICghanQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBhLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAganQuc2V0KHMpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBsbCh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IF9sKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAobyA9IGooKSkgPT0gbnVsbCB8fCBvLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSBwZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgbyA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAoUShvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKFEobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICEwO1xuICB9XG59O1xucGUub2pzRmxvd3MgPSBOLCBwZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmIChwZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHBlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBwZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIG8pID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gZ24pLm9yaWdpbixcbiAgZm9ybURpdjogbyxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgTXIgPSBwZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChNci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgTXIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBNci5nZXRJbnN0YW5jZSgpID8/IG5ldyBNcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBCdCBhcyBCLCBDYXJkQ3ZjRWxlbWVudCBhcyBDLCBFbGVtZW50c0Zvcm0gYXMgRSwgRmllbGROYW1lIGFzIEYsIEhpIGFzIEgsIExlIGFzIEwsIFBheUluRmFpbGVkIGFzIFAsIFJpIGFzIFIsIFN1Ym1pdE1ldGhvZHMgYXMgUywgVGkgYXMgVCwgVWUgYXMgVSwgWXQgYXMgWSwgWiwgWmkgYXMgYSwgSHQgYXMgYiwgY24gYXMgYywgZG4gYXMgZCwgZ3QgYXMgZSwgQ2FyZEVsZW1lbnQgYXMgZiwgZ3IgYXMgZywgaGUgYXMgaCwgQ2FyZEV4cGlyeUVsZW1lbnQgYXMgaSwgamkgYXMgaiwgQ2FyZE51bWJlckVsZW1lbnQgYXMgaywgbG4gYXMgbCwgRW52aXJvbm1lbnQgYXMgbSwgUGF5SW5TdGF0ZSBhcyBuLCBydCBhcyByLCB0dCBhcyB0LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHYsIHh0IGFzIHgsIHppIGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUFDLFNBQVM7QUFDbEIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNB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LEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJjb25uZWN0VG9DaGlsZCIsICJ6IiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlQWRkcmVzcyIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgImEiLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInoiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18kMSIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJrZXkiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAiQVdYX0xPQURJTkciLCAiUGF5bWVudFByb2Nlc3NvciIsICJBZHllbkVudmlyb25tZW50IiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAicmVzdWx0IiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgIkVudmlyb25tZW50IiwgIkVudmlyb25tZW50MiIsICJQYXlJbkZhaWxlZCIsICJQYXlJbkZhaWxlZDIiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIk1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvdyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgImN1c3RvbVBhcmFtcyIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJFbGVtZW50c0NvbnRleHQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAidXNlQ29udGV4dCIsICJFbGVtZW50RnJhbWUiLCAicHJvcHMiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJ1c2VTdGF0ZSIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVzZUVmZmVjdCIsICJqc3giLCAidXJsIiwgIkNhcmRFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCIsICJYbiIsICJlbyIsICJ0byIsICJyIiwgIm4iLCAiYSIsICJzIiwgInJvIiwgIm8iLCAiQyIsICJiIiwgIkQiLCAiZCIsICJPciIsICJVciIsICJqciIsICJ4ciIsICJ1ZSIsICJubyIsICJ2dCIsICJvbyIsICJpZSIsICJhbyIsICJpbyIsICJzbyIsICJjbyIsICJsbyIsICJ1byIsICJwbyIsICJtbyIsICJfbyIsICJ5byIsICJmbyIsICJobyIsICJEZSIsICJnbyIsICJ3byIsICJ2byIsICJibyIsICJFbyIsICJQbyIsICJTbyIsICJRZSIsICJDbyIsICJrbyIsICJBbyIsICJPIiwgIklvIiwgIlRvIiwgIkdyIiwgIk5vIiwgIlJvIiwgInciLCAiRm8iLCAiJHIiLCAiVnIiLCAiTW8iLCAiTG8iLCAiR2UiLCAiRG8iLCAiT28iLCAicXIiLCAiVW8iLCAiam8iLCAieG8iLCAiaXIiLCAienIiLCAic3IiLCAiSHIiLCAiR28iLCAiJG8iLCAiX3QiLCAiQnIiLCAiVm8iLCAicW8iLCAiem8iLCAiWXIiLCAiSG8iLCAiSnIiLCAiQm8iLCAiWW8iLCAiSm8iLCAiWm8iLCAiS28iLCAiV28iLCAiUW8iLCAiWG8iLCAiZWEiLCAidGEiLCAiRHQiLCAicmEiLCAibmEiLCAib2EiLCAiSyIsICJhYSIsICJpYSIsICJaciIsICJzYSIsICJjYSIsICJlZSIsICJzaSIsICJobiIsICJ5ZSIsICJJIiwgImNoYWxrIiwgIk90IiwgImdlIiwgImxhIiwgInAiLCAieSIsICJLciIsICJPZSIsICJ5dCIsICJmdCIsICJNZSIsICJ1YSIsICJfIiwgImYiLCAiaCIsICJFIiwgIlAiLCAibSIsICJkYSIsICJHIiwgImJ0IiwgIkF0IiwgImh0IiwgIm90IiwgImNyIiwgIldyIiwgIlFyIiwgIlhyIiwgImVuIiwgInRuIiwgImxyIiwgImR0IiwgIlZ0IiwgInlhIiwgIlV0IiwgInBhIiwgIkl0IiwgIm1hIiwgImN0IiwgInF0IiwgImZhIiwgImhhIiwgIl9lIiwgIndhIiwgInVyIiwgImdhIiwgInZhIiwgImJhIiwgIkVhIiwgIlBhIiwgIlNhIiwgInJuIiwgImRyIiwgIkNhIiwgImthIiwgInByIiwgIkFhIiwgIm1yIiwgIklhIiwgIlRhIiwgIk5hIiwgIlJhIiwgIkZhIiwgIk1hIiwgIkxhIiwgIkRhIiwgIk9hIiwgIlVhIiwgImphIiwgInhhIiwgIkdhIiwgIiRhIiwgIlZhIiwgInFhIiwgIm5uIiwgInphIiwgIkhhIiwgIkJhIiwgIllhIiwgIkphIiwgIlphIiwgIkthIiwgIldhIiwgIlFhIiwgIlhhIiwgImVpIiwgInYiLCAiWmUiLCAiRXQiLCAiX3IiLCAidGkiLCAicmkiLCAiVHQiLCAib24iLCAiUHQiLCAiaiIsICJqdCIsICJ5ciIsICJuaSIsICJvaSIsICJhaSIsICJsdCIsICJpaSIsICJjIiwgInp0IiwgImFuIiwgInNuIiwgInQiLCAiY2kiLCAibGkiLCAiTHIiLCAidWkiLCAiZGkiLCAicGkiLCAiU3QiLCAiZnIiLCAiQ3QiLCAibWkiLCAieWkiLCAiZmkiLCAiaGkiLCAiZ2kiLCAiU2UiLCAiaHIiLCAid2kiLCAibCIsICJ1IiwgInZpIiwgImJpIiwgIlhlIiwgImV0IiwgIkh0IiwgInR0IiwgIkJ0IiwgIkVpIiwgIlBpIiwgIlNpIiwgInplIiwgIloiLCAiQ2kiLCAia2kiLCAiQWkiLCAiSWkiLCAiZ3QiLCAiVGkiLCAiTmkiLCAiUmkiLCAiRmkiLCAiTWkiLCAiTGkiLCAiRGkiLCAiT2kiLCAiTnQiLCAiVWkiLCAiWXQiLCAieHQiLCAiY24iLCAibG4iLCAiamkiLCAiS2UiLCAiSnQiLCAiWnQiLCAieGkiLCAiS3QiLCAiR2kiLCAiJGkiLCAidW4iLCAiVmkiLCAicWkiLCAiemkiLCAiSGkiLCAiZG4iLCAiQmkiLCAiUnQiLCAicG4iLCAiWWkiLCAiSmkiLCAiWmkiLCAiS2kiLCAiV2kiLCAiZ3IiLCAicnQiLCAiaGUiLCAiTGUiLCAiRnQiLCAiUWkiLCAiVWUiLCAiWGkiLCAidXQiLCAibW4iLCAicSIsICJ0cyIsICJlcyIsICJycyIsICJGIiwgIndlIiwgIl9uIiwgIm5zIiwgIlYiLCAib3MiLCAiYXMiLCAiaXMiLCAiZmUiLCAieW4iLCAid3IiLCAic3MiLCAiV3QiLCAiY3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAia3QiLCAibHMiLCAidXMiLCAiZHMiLCAiZ24iLCAid24iLCAiV2UiLCAicHMiLCAidm4iLCAidnIiLCAiQ2UiLCAiSGUiLCAibXMiLCAiX3MiLCAieXMiLCAiZ3MiLCAiZnMiLCAiaHMiLCAid3MiLCAiYm4iLCAiRW4iLCAidnMiLCAiYnMiLCAiWSIsICJFcyIsICJQcyIsICJQbiIsICJTcyIsICJDcyIsICJhdCIsICJTbiIsICJrcyIsICJDbiIsICJBcyIsICJRdCIsICJJcyIsICJUcyIsICJrbiIsICJOcyIsICJBbiIsICJJbiIsICJUbiIsICJVIiwgIk5uIiwgIlh0IiwgImVyIiwgIlJzIiwgIkZzIiwgInRyIiwgIk1zIiwgIm9lIiwgImFlIiwgIkVsIiwgIlJuIiwgIml0IiwgIiQiLCAicnIiLCAiQWUiLCAiTHMiLCAiRHMiLCAiamUiLCAibnQiLCAiT3MiLCAiRm4iLCAiVXMiLCAianMiLCAiYnIiLCAieHMiLCAiR3MiLCAiJHMiLCAiTW4iLCAiTG4iLCAiRG4iLCAiT24iLCAiVnMiLCAicXMiLCAienMiLCAiSHMiLCAiQnMiLCAiWXMiLCAiVyIsICJVbiIsICJKcyIsICJacyIsICJLcyIsICJRbiIsICJCZSIsICJqbiIsICJXcyIsICJOIiwgIlFzIiwgIiRlIiwgIm5yIiwgIk10IiwgIm9yIiwgIlZlIiwgInhuIiwgImFyIiwgIm5lIiwgIk5lIiwgIlhzIiwgImVjIiwgIlMiLCAiQSIsICJMIiwgImsiLCAiTSIsICJKIiwgInNlIiwgImJlIiwgIm1lIiwgIlRlIiwgInFlIiwgIkllIiwgInB0IiwgInRjIiwgInJjIiwgIm5jIiwgIlllIiwgIkduIiwgIm9jIiwgImFjIiwgIlgiLCAiUmUiLCAiaWMiLCAic2MiLCAidmUiLCAiJG4iLCAiVm4iLCAiY2MiLCAibGMiLCAibXQiLCAicW4iLCAidWMiLCAiZGMiLCAiUGUiLCAiSmUiLCAicGMiLCAibWMiLCAiem4iLCAieWMiLCAiZmMiLCAiSG4iLCAiR3QiLCAiaGMiLCAiZ2MiLCAiRXIiLCAid2MiLCAiQm4iLCAidmMiLCAiYmMiLCAia2UiLCAid3QiLCAiRWMiLCAiWW4iLCAiUGMiLCAia2MiLCAiU2MiLCAiQ2MiLCAiWm4iLCAiSm4iLCAiVCIsICJQciIsICJBYyIsICJJYyIsICJUYyIsICJOYyIsICJIIiwgIlJjIiwgIkZjIiwgIk1jIiwgIkVlIiwgIkxjIiwgIktuIiwgIkRjIiwgIk9jIiwgImNlIiwgIlNyIiwgIlduIiwgIlVjIiwgImpjIiwgIkNyIiwgInhjIiwgIkdjIiwgIiRjIiwgIlZjIiwgIkhjIiwgInFjIiwgInpjIiwgIkIiLCAiQmMiLCAiWWMiLCAiSmMiLCAiRmUiLCAiWmMiLCAiV2MiLCAiS2MiLCAiUWMiLCAiWGMiLCAiZWwiLCAidGUiLCAidGwiLCAicmwiLCAibmwiLCAicmUiLCAia3IiLCAiZGUiLCAiJHQiLCAib2wiLCAiYWwiLCAiaWwiLCAiUiIsICJzbCIsICJMdCIsICJjbCIsICJsbCIsICJ1bCIsICJBciIsICJkbCIsICJJciIsICJwbCIsICJUciIsICJtbCIsICJfbCIsICJOciIsICJ5bCIsICJmbCIsICJobCIsICJSciIsICJGciIsICJsZSIsICJRIiwgInBlIiwgIk1yIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K