@getopenpay/openpay-js-react 0.2.24 → 0.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -681,7 +681,7 @@ const ue = (e) => async (t) => {
681
681
  return await e(t);
682
682
  } catch (r) {
683
683
  const { err__: o } = T("init-error-catcher"), i = B(r), a = await sn(t.context.anyCdeConnection, i);
684
- return o(a, i, r), g("init_flow_error", { errorMessage: i, errorCode: a }), { isAvailable: !1, reason: i, errorCode: a };
684
+ return o(a, i, r), g("init_flow_error", { errorMessage: i, errorCode: a }), { isAvailable: !1, reason: i, errorCode: a, isLoading: !1 };
685
685
  }
686
686
  }, T = (e) => {
687
687
  const t = (...o) => {
@@ -1812,24 +1812,24 @@ class _a {
1812
1812
  const r = this.queue.slice(0, fa);
1813
1813
  try {
1814
1814
  const o = {
1815
- events: r.map((a) => ({
1816
- event_name: a.eventName,
1815
+ events: r.map((s) => ({
1816
+ event_name: s.eventName,
1817
1817
  device_token: t.deviceToken,
1818
1818
  context_properties: {
1819
1819
  ...t,
1820
- ...a.contextProperties
1820
+ ...s.contextProperties
1821
1821
  },
1822
1822
  properties: {
1823
- nonce: a.nonce,
1824
- datetime: a.datetime,
1825
- timestamp: a.timestamp,
1826
- time_diff_from_previous_event: a.timeDiffFromPreviousEvent,
1823
+ nonce: s.nonce,
1824
+ datetime: s.datetime,
1825
+ timestamp: s.timestamp,
1826
+ time_diff_from_previous_event: s.timeDiffFromPreviousEvent,
1827
1827
  checkout_secure_token: t.checkoutSecureToken,
1828
- ...a.properties
1828
+ ...s.properties
1829
1829
  }
1830
1830
  }))
1831
- }, i = new URL("/metrics/public/capture", t.metricsBaseUrl);
1832
- (await fetch(i.toString(), {
1831
+ }, i = bc(t.environment), a = new URL("/metrics/public/capture", i);
1832
+ (await fetch(a.toString(), {
1833
1833
  method: "POST",
1834
1834
  headers: {
1835
1835
  "Content-Type": "application/json"
@@ -2000,7 +2000,7 @@ const U = async (e, t, r, o) => {
2000
2000
  function ht(e) {
2001
2001
  throw new Error(`Unhandled case: ${e}`);
2002
2002
  }
2003
- const cn = (e, t) => Object.fromEntries(Object.entries(e).filter(([r]) => !t.includes(r))), { log__: Uu, err__: Oa } = T("common"), He = (e) => {
2003
+ const cn = (e, t) => Object.fromEntries(Object.entries(e).filter(([r]) => !t.includes(r))), { log__: qu, err__: Oa } = T("common"), He = (e) => {
2004
2004
  if (e.payment_methods.length !== 1)
2005
2005
  throw new Error(`Expected exactly one payment method, got ${e.payment_methods.length}`);
2006
2006
  return { payment_method_id: e.payment_methods[0].id };
@@ -4081,19 +4081,18 @@ function gc() {
4081
4081
  const e = yc(), t = _c(e);
4082
4082
  return { framework: e, version: t };
4083
4083
  }
4084
- const yr = {
4085
- prod: "https://cde.getopenpay.com",
4086
- stg: "https://cde.openpaystaging.com",
4087
- dev: "http://localhost:8001"
4088
- // We usually use loclx for dev
4089
- }, vc = {
4084
+ const yr = n.enum(["dev", "stg", "prod"]), vc = {
4090
4085
  prod: "https://connto.getopenpay.com",
4091
4086
  stg: "https://connto.openpaystaging.com",
4092
4087
  dev: "http://localhost:8000"
4093
- }, bc = (e) => {
4094
- const t = new URL(e);
4095
- return Object.keys(yr).find((r) => t.toString().startsWith(yr[r])) ?? "dev";
4096
- }, wc = (e) => vc[e];
4088
+ }, bc = (e) => vc[e], wc = async (e) => {
4089
+ try {
4090
+ const t = await fetch(new URL("/health/environment", e)).then((r) => r.json());
4091
+ return yr.parse(t.environment);
4092
+ } catch {
4093
+ return yr.Values.prod;
4094
+ }
4095
+ };
4097
4096
  class Ec {
4098
4097
  constructor(t, r, o, i) {
4099
4098
  this.handleMessage = (a) => {
@@ -4392,18 +4391,20 @@ const Sc = (e, t, r) => {
4392
4391
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), va(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
4393
4392
  }, this.updateCallbacks = (i) => {
4394
4393
  this.formCallbacks.setCallbacks(i);
4395
- }, Nt.assignAsSingleton(this), this.ojsVersion = "0.2.24", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = tc.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${$e()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Pc(), this.deviceToken = hc(), ga();
4394
+ }, Nt.assignAsSingleton(this), this.ojsVersion = "0.2.26", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = tc.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${$e()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Pc(), this.deviceToken = hc(), ga();
4396
4395
  const { framework: r, version: o } = gc();
4397
- Dt.current.isSuccess || Dt.set({
4398
- checkoutSecureToken: this.config.checkoutSecureToken,
4399
- deviceToken: this.deviceToken,
4400
- metricsBaseUrl: wc(bc(this.baseUrl)),
4401
- framework: r,
4402
- frameworkVersion: o,
4403
- ojsVersion: this.ojsVersion,
4404
- ojsReleaseVersion: this.ojsReleaseVersion,
4405
- referrer: this.referrer,
4406
- baseUrl: this.baseUrl
4396
+ wc(this.baseUrl).then((i) => {
4397
+ Dt.current.isSuccess || Dt.set({
4398
+ checkoutSecureToken: this.config.checkoutSecureToken,
4399
+ deviceToken: this.deviceToken,
4400
+ environment: i,
4401
+ framework: r,
4402
+ frameworkVersion: o,
4403
+ ojsVersion: this.ojsVersion,
4404
+ ojsReleaseVersion: this.ojsReleaseVersion,
4405
+ referrer: this.referrer,
4406
+ baseUrl: this.baseUrl
4407
+ });
4407
4408
  }), g("form_init"), this.eventHandler = new Ec(this.formId, this.baseUrl, this.formCallbacks, {
4408
4409
  setFormHeight: this.setFormHeight,
4409
4410
  onCdeLoaded: this.onCdeLoaded,
@@ -6084,24 +6085,24 @@ class _u {
6084
6085
  const r = this.queue.slice(0, fu);
6085
6086
  try {
6086
6087
  const o = {
6087
- events: r.map((s) => ({
6088
- event_name: s.eventName,
6088
+ events: r.map((c) => ({
6089
+ event_name: c.eventName,
6089
6090
  device_token: t.deviceToken,
6090
6091
  context_properties: {
6091
6092
  ...t,
6092
- ...s.contextProperties
6093
+ ...c.contextProperties
6093
6094
  },
6094
6095
  properties: {
6095
- nonce: s.nonce,
6096
- datetime: s.datetime,
6097
- timestamp: s.timestamp,
6098
- time_diff_from_previous_event: s.timeDiffFromPreviousEvent,
6096
+ nonce: c.nonce,
6097
+ datetime: c.datetime,
6098
+ timestamp: c.timestamp,
6099
+ time_diff_from_previous_event: c.timeDiffFromPreviousEvent,
6099
6100
  checkout_secure_token: t.checkoutSecureToken,
6100
- ...s.properties
6101
+ ...c.properties
6101
6102
  }
6102
6103
  }))
6103
- }, i = new URL("/metrics/public/capture", t.metricsBaseUrl);
6104
- (await fetch(i.toString(), {
6104
+ }, i = xu(t.environment), a = new URL("/metrics/public/capture", i);
6105
+ (await fetch(a.toString(), {
6105
6106
  method: "POST",
6106
6107
  headers: {
6107
6108
  "Content-Type": "application/json"
@@ -6346,7 +6347,12 @@ console.error = function(...e) {
6346
6347
  console.debug = function(...e) {
6347
6348
  Iu.call(console, ...e), window._ojs_console_callbacks.forEach((t) => t(ku, ...e));
6348
6349
  };
6349
- const Tu = (e) => {
6350
+ n.enum(["dev", "stg", "prod"]);
6351
+ const Tu = {
6352
+ prod: "https://connto.getopenpay.com",
6353
+ stg: "https://connto.openpaystaging.com",
6354
+ dev: "http://localhost:8000"
6355
+ }, xu = (e) => Tu[e], Ru = (e) => {
6350
6356
  var r;
6351
6357
  const t = qt.fromObject({
6352
6358
  onFocus: e.onFocus,
@@ -6362,7 +6368,7 @@ const Tu = (e) => {
6362
6368
  onPaymentRequestLoad: e.onPaymentRequestLoad
6363
6369
  });
6364
6370
  return st.getInstance() && ((r = st.getInstance()) == null || r.updateCallbacks(t.get)), t.get;
6365
- }, xu = (e) => {
6371
+ }, Ou = (e) => {
6366
6372
  const [t, r] = pe({
6367
6373
  apple_pay: xr,
6368
6374
  google_pay: xr
@@ -6373,11 +6379,11 @@ const Tu = (e) => {
6373
6379
  [e]
6374
6380
  );
6375
6381
  return { paymentRequests: t, overridenOnPaymentRequestLoad: o };
6376
- }, Or = "op_ojs_form", Fu = (e) => {
6377
- const [t, r] = pe(), [o, i] = pe(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = xu(e.onPaymentRequestLoad), [c, l] = pe(!1), [u, d] = pe(null), [y, f] = pe(Cu), [p, h] = pe({
6382
+ }, Or = "op_ojs_form", zu = (e) => {
6383
+ const [t, r] = pe(), [o, i] = pe(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = Ou(e.onPaymentRequestLoad), [c, l] = pe(!1), [u, d] = pe(null), [y, f] = pe(Cu), [p, h] = pe({
6378
6384
  googlePay: Tr,
6379
6385
  applePay: Tr
6380
- }), _ = Tu({
6386
+ }), _ = Ru({
6381
6387
  ...e,
6382
6388
  onPaymentRequestLoad: s,
6383
6389
  onLoad: (v, P) => {
@@ -6395,7 +6401,7 @@ const Tu = (e) => {
6395
6401
  ..._
6396
6402
  });
6397
6403
  r(v);
6398
- const P = Ru(v);
6404
+ const P = ju(v);
6399
6405
  return i(P), v.initFlows.stripeLink.publisher.subscribe((E) => {
6400
6406
  E.isSuccess && E.loadedValue.isAvailable && d(E.loadedValue.controller);
6401
6407
  }), v.initFlows.loop.publisher.subscribe((E) => {
@@ -6411,17 +6417,14 @@ const Tu = (e) => {
6411
6417
  config: null
6412
6418
  });
6413
6419
  }), v.initFlows.airwallexGooglePay.publisher.subscribe((E) => {
6414
- E.isSuccess && E.loadedValue.isAvailable && h((S) => ({
6420
+ E.isSuccess && E.loadedValue && h((S) => ({
6415
6421
  applePay: S.applePay,
6416
6422
  googlePay: E.loadedValue
6417
6423
  }));
6418
6424
  }), v.initFlows.airwallexApplePay.publisher.subscribe((E) => {
6419
- E.isSuccess && E.loadedValue.isAvailable && h((S) => ({
6425
+ E.isSuccess && E.loadedValue && h((S) => ({
6420
6426
  googlePay: S.googlePay,
6421
- applePay: {
6422
- ...E.loadedValue,
6423
- isLoading: !1
6424
- }
6427
+ applePay: E.loadedValue
6425
6428
  }));
6426
6429
  }), () => {
6427
6430
  v.destroy();
@@ -6445,7 +6448,7 @@ const Tu = (e) => {
6445
6448
  loop: y
6446
6449
  };
6447
6450
  return /* @__PURE__ */ Q(kt, { children: o ? /* @__PURE__ */ Q(Lr.Provider, { value: o, children: /* @__PURE__ */ Q("div", { id: Or, className: e.className, children: e.children(C) }) }) : /* @__PURE__ */ Q(kt, {}) });
6448
- }, Ru = (e) => ({
6451
+ }, ju = (e) => ({
6449
6452
  formId: e.formId,
6450
6453
  formHeight: e.formProperties.height,
6451
6454
  referrer: e.referrer,
@@ -6478,15 +6481,15 @@ const Tu = (e) => {
6478
6481
  ref: f
6479
6482
  }
6480
6483
  );
6481
- }, qu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_CVC }), zu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD }), Vu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_EXPIRY }), Gu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_NUMBER });
6484
+ }, Vu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_CVC }), Gu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD }), $u = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_EXPIRY }), Bu = ({ styles: e }) => /* @__PURE__ */ Q(Et, { styles: e, elementType: Le.CARD_NUMBER });
6482
6485
  export {
6483
- qu as CardCvcElement,
6484
- zu as CardElement,
6485
- Vu as CardExpiryElement,
6486
- Gu as CardNumberElement,
6487
- Fu as ElementsForm,
6486
+ Vu as CardCvcElement,
6487
+ Gu as CardElement,
6488
+ $u as CardExpiryElement,
6489
+ Bu as CardNumberElement,
6490
+ zu as ElementsForm,
6488
6491
  Qt as FieldName,
6489
6492
  Eu as PayInState,
6490
6493
  eo as useOpenPayElements
6491
6494
  };
6492
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBGZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBvdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgVW4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBqbiA9IHokMS5hcnJheShVbiksIHhuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksICRuID0geiQxLmFycmF5KHhuKSwgR24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFhlID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBHbltuXSA/PyBlO1xufSwgem4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIFZuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gWGUoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7WGUodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgcW4gPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmICh6bihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGpuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gVm4obikgOiAkbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IHFuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFhlKGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIFluID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyICQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlKSkoJCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSgkKTsgY29uc3QgSSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgayA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5BRERSRVNTID0gXCJhZGRyZXNzXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgT3QgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBVdCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoVXQgfHwge30pO1xuY29uc3QganQgPSB6JDEubmF0aXZlRW51bShVdCksIHh0ID0geiQxLnVuaW9uKFtPdCwganRdKTtcbnZhciBLID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKEsgfHwge30pO1xuY29uc3QgQm4gPSB6JDEubmF0aXZlRW51bShLKSwgR2UgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgV24gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogayxcbiAgZXhwaXJ5OiBrLFxuICBjdmM6IGtcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogayxcbiAgY29sb3I6IGssXG4gIGZvbnRGYW1pbHk6IGssXG4gIGZvbnRTaXplOiBrLFxuICBmb250V2VpZ2h0OiBrLFxuICBtYXJnaW46IGssXG4gIHBhZGRpbmc6IGssXG4gIGxldHRlclNwYWNpbmc6IGssXG4gIGxpbmVIZWlnaHQ6IGssXG4gIGhpZGVJY29uOiBrXG59KTtcbmNvbnN0IEIgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgSG4gPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBKbiA9IHokMS5vYmplY3QoeyB0eXBlOiBIbiB9KSwgS24gPSBCLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgWm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogS24sXG4gIGVsZW1lbnRUeXBlOiBqdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgUW4gPSBCLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBYbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBRbixcbiAgbWVzc2FnZTogSSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGVyID0gQi5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCB0ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBlcixcbiAgZWxlbWVudFR5cGU6IHh0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgbnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogSVxufSksIHJyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEIuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEksXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IGssXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShHZSlcbn0pLCBvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgaXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIEFlID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogSSxcbiAgbGFzdE5hbWU6IEksXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBrXG59KSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBrLFxuICBsYXN0TmFtZTogayxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IGssXG4gIGFkZHJlc3M6IGssXG4gIGNpdHk6IGssXG4gIHN0YXRlOiBrXG59KSwgYXIgPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIGNyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGFyLFxuICBzZXNzaW9uSWQ6IEksXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogR2UsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDoga1xufSkuZXh0ZW5kKEFlLnNoYXBlKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB1ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgZHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEpuLFxuICBabixcbiAgWG4sXG4gIHRyLFxuICBucixcbiAgcnIsXG4gIGNyLFxuICBscixcbiAgdXIsXG4gIG9yLFxuICBpclxuXSksIHByID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IGRyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogSVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGl0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IFUoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHlyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShtcilcbn0pLCBmciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgeXJcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShUIHx8IHt9KTtcbmNvbnN0IF9yID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgaHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCAkdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogVSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBnciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgd3IgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoV24pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogVShpdCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogVSh6JDEuYXJyYXkoJHQpKVxufSksIEd0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBPdC5wYXJzZSh0KTtcbiAgICAgIEFycmF5LmlzQXJyYXkocikgPyBuW2ldID0gciA6IEFycmF5LmlzQXJyYXkoci5fZXJyb3JzKSAmJiAobltpXSA9IHIuX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgbjtcbn0sIGJyID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgdnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgRXIgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCB6ZSA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHQgPSAwOyB0IDwgMTA7IHQrKylcbiAgICBwdCgpIHx8IGF3YWl0IHN0KDUwMCk7XG4gIGlmICghcHQoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBDciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCB6ZShlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogdC5lbGVtZW50cyhuKSxcbiAgICBzdHJpcGU6IHRcbiAgfTtcbn0sIFNyID0gYXN5bmMgKGUsIG4sIHQsIHIsIGkpID0+IHtcbiAgY29uc3QgcyA9IGF3YWl0IHplKGUpLCBhID0gRXJbdC50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBzLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogbixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgc3QgPSAoZSkgPT4gbmV3IFByb21pc2UoKG4pID0+IHtcbiAgc2V0VGltZW91dChuLCBlKTtcbn0pLCBwdCA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBQciA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgobiwgdCkgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIHIpLCBuKHIpO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIHIpO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHQobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHQocik7XG4gIH1cbn0pLCBrciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IHplKGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbi5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoci5lcnJvcilcbiAgICB0aHJvdyBuLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtyLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiBuLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgcjtcbn0sIEFyID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IHQgPSBhd2FpdCAoYXdhaXQgemUoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgciA9IChpID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAociA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgdC5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgciA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IHQuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgSXIgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIFEgPSAoZSwgbikgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgUnIgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwci5wYXJzZShlKTtcbiAgfSBjYXRjaCAobikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIG4pLCBuO1xuICB9XG59LCBUciA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IHsgdHlwZTogXCJwaW5nXCIgfSwgdCA9IGF3YWl0IGUuc2VuZChuKTtcbiAgICBpZiAodCAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIG4pLCAhMTtcbiAgfVxufSwgRnIgPSAoZSwgbikgPT4gISFlICYmIG4sIGIgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBNciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCB6dCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogYih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogYih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogYih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGIoeiQxLm51bWJlcigpKVxufSksIFZ0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBiKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogYih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgRHIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgTnIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogYihEcilcbn0pLCBfZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBMciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KExyKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBxdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgVXIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShxdCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBqciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHp0XG59KSwgeHIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoanIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShVciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkocXQpXG59KSwgbXQgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KE9yKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheSh4ciksXG4gIHByb2Nlc3NvcnNfdXNlZDogYih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBZdCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBtdCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKG10KSxcbiAgY291cG9uczogeiQxLmFycmF5KHp0KVxufSksIHl0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IGIoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFZ0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IE5yLFxuICBzdWJzX3ByZXZpZXc6IGIoWXQpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShfZSlcbn0pLCBCdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHl0LnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoeXQuc2hhcGUpXG5dKSwgJHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtCdCwgJHIsIEdyXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoVnQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBiKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgV3QgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHpyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheSh6cik7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIHFyID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBZciA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkocXIpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgQnIgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBiKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpXG59KS5leHRlbmQoVnIuc2hhcGUpLmV4dGVuZChCci5zaGFwZSk7XG5jb25zdCBIdCA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBzcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IF9lLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFdyID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IGIoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogYih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogYih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBiKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBiKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGIoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBiKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IGIoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IGIoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBiKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IGIoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSHIgPSB6JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgSnIgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IGIoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgS3IgPSB6JDEub2JqZWN0KHt9KSwgWnIgPSAoZSkgPT4gZS5yZWR1Y2UoKG4sIHQpID0+IG4gKyB0LCAwKTtcbmZ1bmN0aW9uIFFyKGUsIG4pIHtcbiAgdmFyIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHQgPyB0KGUsIG4pIDogZS5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gWHIoZSwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHQgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgdCAmJiB0KGUsIG4pO1xufVxudmFyIGVvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGkuX19wcm90b19fID0gcztcbiAgICB9IHx8IGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gcylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGEpICYmIChpW2FdID0gc1thXSk7XG4gICAgfSwgZSh0LCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKG4sIHQpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgdG8gPSBmdW5jdGlvbihlKSB7XG4gIGVvKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgaSA9IHRoaXMuY29uc3RydWN0b3IsIHMgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogaS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFFyKHMsIGkucHJvdG90eXBlKSwgWHIocyksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNvbnN0IG5lID0gKGUpID0+IGFzeW5jIChuKSA9PiB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIChyID0gKHQgPSBuLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCByLmNhbGwodCksIGgoXCJjaGVja291dF9zdGFydGVkXCIpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBlKG4pO1xuICAgIGlmIChoKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAuLi5pXG4gICAgfSksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgIGVsc2UgaWYgKGkubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICBpLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgaS5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGNvbnN0IHMgPSBHKGkpLCBhID0gYXdhaXQgbG4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGEpLCBoKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYSB9KTtcbiAgfVxufSwgdWUgPSAoZSkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZShuKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHsgZXJyX186IHIgfSA9IEEoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGkgPSBHKHQpLCBzID0gYXdhaXQgbG4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIHJldHVybiByKHMsIGksIHQpLCBoKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBpLCBlcnJvckNvZGU6IHMgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGksIGVycm9yQ29kZTogcyB9O1xuICB9XG59LCBBID0gKGUpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7RmUuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5yKTtcbiAgfSwgdCA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtGZS5yZWQuYm9sZChcIm9qcy9cIil9JHtGZS5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IHQsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IHRcbiAgfTtcbn07XG52YXIgZXQgPSBmdW5jdGlvbihlLCBuKSB7XG4gIHJldHVybiBldCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB0Ll9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGkgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGkpICYmICh0W2ldID0gcltpXSk7XG4gIH0sIGV0KGUsIG4pO1xufTtcbmZ1bmN0aW9uIHJlKGUsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXQoZSwgbik7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6ICh0LnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgdCgpKTtcbn1cbmZ1bmN0aW9uIG5vKGUsIG4sIHQsIHIpIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiB0ID8gcyA6IG5ldyB0KGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAodCB8fCAodCA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgYShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBzKGQudmFsdWUpIDogaShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSnQoZSwgbikge1xuICB2YXIgdCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgdVswXSAmJiAodCA9IDApKSwgdDsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBpICYmIChzID0gdVswXSAmIDIgPyBpLnJldHVybiA6IHVbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgdVsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAodSA9IFt1WzBdICYgMiwgcy52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHQubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHQubGFiZWwrKywgaSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IHQudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghcyB8fCB1WzFdID4gc1swXSAmJiB1WzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHQubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICB0LmxhYmVsID0gc1sxXSwgcyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgdC5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSBzWzJdLCB0Lm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwoZSwgdCk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24geWUoZSkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgdCA9IG4gJiYgZVtuXSwgciA9IDA7XG4gIGlmICh0KSByZXR1cm4gdC5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIHIgPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbcisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIFVlKGUsIG4pIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghdCkgcmV0dXJuIGU7XG4gIHZhciByID0gdC5jYWxsKGUpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShpID0gci5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmICh0ID0gci5yZXR1cm4pICYmIHQuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gamUoZSwgbiwgdCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGkgPSBuLmxlbmd0aCwgczsgciA8IGk7IHIrKylcbiAgICAocyB8fCAhKHIgaW4gbikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBzW3JdID0gbltyXSk7XG4gIHJldHVybiBlLmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIG1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBtZShlKTtcbn1cbmZ1bmN0aW9uIHJvKGUsIG4sIHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0LmFwcGx5KGUsIG4gfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYSh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobSkudGhlbih5LCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgbSkge1xuICAgIHJbeV0gJiYgKGlbeV0gPSBmdW5jdGlvbihnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRSwgdykge1xuICAgICAgICBzLnB1c2goW3ksIGcsIEUsIHddKSA+IDEgfHwgbCh5LCBnKTtcbiAgICAgIH0pO1xuICAgIH0sIG0gJiYgKGlbeV0gPSBtKGlbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShtKSk7XG4gICAgfSBjYXRjaCAoZykge1xuICAgICAgXyhzWzBdWzNdLCBnKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIG1lID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBmKSA6IF8oc1swXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZih5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIF8oeSwgbSkge1xuICAgIHkobSksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gb28oZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCB0O1xuICByZXR1cm4gbiA/IG4uY2FsbChlKSA6IChlID0gdHlwZW9mIHllID09IFwiZnVuY3Rpb25cIiA/IHllKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHQgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdCk7XG4gIGZ1bmN0aW9uIHIocykge1xuICAgIHRbc10gPSBlW3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGEgPSBlW3NdKGEpLCBpKGMsIGwsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIHMoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gTShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBWZShlKSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgdCA9IGUobik7XG4gIHJldHVybiB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCB0O1xufVxudmFyIEtlID0gVmUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHQgPyB0Lmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyB0Lm1hcChmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24geGUoZSwgbikge1xuICBpZiAoZSkge1xuICAgIHZhciB0ID0gZS5pbmRleE9mKG4pO1xuICAgIDAgPD0gdCAmJiBlLnNwbGljZSh0LCAxKTtcbiAgfVxufVxudmFyIEllID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIHQsIHIsIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0geWUoYSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IGcgfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmICh0ID0gYy5yZXR1cm4pICYmIHQuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChNKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgIHMgPSBnIGluc3RhbmNlb2YgS2UgPyBnLmVycm9ycyA6IFtnXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IHllKGYpLCB5ID0gXy5uZXh0KCk7ICF5LmRvbmU7IHkgPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIG0gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnQobSk7XG4gICAgICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCBnIGluc3RhbmNlb2YgS2UgPyBzID0gamUoamUoW10sIFVlKHMpKSwgVWUoZy5lcnJvcnMpKSA6IHMucHVzaChnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgICByID0geyBlcnJvcjogZyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGkgPSBfLnJldHVybikgJiYgaS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgS2Uocyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQ7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgZnQobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAodCA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gdCA9PT0gbiB8fCBBcnJheS5pc0FycmF5KHQpICYmIHQuaW5jbHVkZXMobik7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheSh0KSA/ICh0LnB1c2gobiksIHQpIDogdCA/IFt0LCBuXSA6IG47XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdCA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHQpICYmIHhlKHQsIG4pO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHQgJiYgeGUodCwgbiksIG4gaW5zdGFuY2VvZiBlICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IGUoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCBlO1xufSgpLCBLdCA9IEllLkVNUFRZO1xuZnVuY3Rpb24gWnQoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIEllIHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIE0oZS5yZW1vdmUpICYmIE0oZS5hZGQpICYmIE0oZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBmdChlKSB7XG4gIE0oZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgUXQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgWHQgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBqZShbZSwgbl0sIFVlKHQpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGVuKGUpIHtcbiAgWHQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF90KCkge1xufVxuZnVuY3Rpb24gTmUoZSkge1xuICBlKCk7XG59XG52YXIgYXQgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCB0ID8gKHIuZGVzdGluYXRpb24gPSB0LCBadCh0KSAmJiB0LmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gY28sIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgciwgaSkge1xuICAgIHJldHVybiBuZXcgdHQodCwgciwgaSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dCh0KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHQpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KEllKSwgaW8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIFplKGUsIG4pIHtcbiAgcmV0dXJuIGlvLmNhbGwoZSwgbik7XG59XG52YXIgc28gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHQubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgTWUocik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICB0LmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBNZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBNZShuKTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICBNZSh0KTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgdHQgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIsIGkpIHtcbiAgICB2YXIgcyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChNKHQpIHx8ICF0KVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogdCA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIFF0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZSh0KSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogdC5uZXh0ICYmIFplKHQubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiB0LmVycm9yICYmIFplKHQuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogdC5jb21wbGV0ZSAmJiBaZSh0LmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgc28oYSksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KGF0KTtcbmZ1bmN0aW9uIE1lKGUpIHtcbiAgZW4oZSk7XG59XG5mdW5jdGlvbiBhbyhlKSB7XG4gIHRocm93IGU7XG59XG52YXIgY28gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IF90LFxuICBlcnJvcjogYW8sXG4gIGNvbXBsZXRlOiBfdFxufSwgY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBsbyhlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gdW8oZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBsbyA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkocik7XG4gICAgfSwgdCk7XG4gIH07XG59XG52YXIgdGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgbiAmJiAodGhpcy5fc3Vic2NyaWJlID0gbik7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQub3BlcmF0b3IgPSBuLCB0O1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gbW8obikgPyBuIDogbmV3IHR0KG4sIHQsIHIpO1xuICAgIHJldHVybiBOZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShuKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICBuLmVycm9yKHQpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBodCh0KSwgbmV3IHQoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgdHQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG4oYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIHIuc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0O1xuICAgIHJldHVybiAodCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnN1YnNjcmliZShuKTtcbiAgfSwgZS5wcm90b3R5cGVbY3RdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIHQgPSAwOyB0IDwgYXJndW1lbnRzLmxlbmd0aDsgdCsrKVxuICAgICAgblt0XSA9IGFyZ3VtZW50c1t0XTtcbiAgICByZXR1cm4gdW8obikodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgcmV0dXJuIG4gPSBodChuKSwgbmV3IG4oZnVuY3Rpb24ociwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICB0LnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG5ldyBlKG4pO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gaHQoZSkge1xuICB2YXIgbjtcbiAgcmV0dXJuIChuID0gZSA/PyBRdC5Qcm9taXNlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIHBvKGUpIHtcbiAgcmV0dXJuIGUgJiYgTShlLm5leHQpICYmIE0oZS5lcnJvcikgJiYgTShlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIG1vKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIGF0IHx8IHBvKGUpICYmIFp0KGUpO1xufVxuZnVuY3Rpb24geW8oZSkge1xuICByZXR1cm4gTShlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gZm8oZSkge1xuICByZXR1cm4gZnVuY3Rpb24obikge1xuICAgIGlmICh5byhuKSlcbiAgICAgIHJldHVybiBuLmxpZnQoZnVuY3Rpb24odCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHQsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gX28oZSwgbiwgdCwgciwgaSkge1xuICByZXR1cm4gbmV3IGhvKGUsIG4sIHQsIHIsIGkpO1xufVxudmFyIGhvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgdCkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gYSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSByID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgdC5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHQuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHQuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdDtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgciA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIXIgJiYgKCh0ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgfHwgdC5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIG47XG59KGF0KSwgZ28gPSBWZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHRuID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbigpIHtcbiAgICB2YXIgdCA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICExLCB0LmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB0Lm9ic2VydmVycyA9IFtdLCB0LmlzU3RvcHBlZCA9ICExLCB0Lmhhc0Vycm9yID0gITEsIHQudGhyb3duRXJyb3IgPSBudWxsLCB0O1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gbmV3IGd0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiByLm9wZXJhdG9yID0gdCwgcjtcbiAgfSwgbi5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgZ28oKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgTmUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmN1cnJlbnRPYnNlcnZlcnMgfHwgKHIuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oci5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0geWUoci5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIE5lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaGFzRXJyb3IgPSByLmlzU3RvcHBlZCA9ICEwLCByLnRocm93bkVycm9yID0gdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IHIub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcih0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgTmUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodC5fdGhyb3dJZkNsb3NlZCgpLCAhdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgdC5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgciA9IHQub2JzZXJ2ZXJzOyByLmxlbmd0aDsgKVxuICAgICAgICAgIHIuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAoKHQgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG4ucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHQpO1xuICB9LCBuLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBLdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2godCksIG5ldyBJZShmdW5jdGlvbigpIHtcbiAgICAgIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHhlKGMsIHQpO1xuICAgIH0pKTtcbiAgfSwgbi5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gci5oYXNFcnJvciwgcyA9IHIudGhyb3duRXJyb3IsIGEgPSByLmlzU3RvcHBlZDtcbiAgICBpID8gdC5lcnJvcihzKSA6IGEgJiYgdC5jb21wbGV0ZSgpO1xuICB9LCBuLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyB0ZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQ7XG4gIH0sIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiBuZXcgZ3QodCwgcik7XG4gIH0sIG47XG59KHRlKSwgZ3QgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gdCwgaS5zb3VyY2UgPSByLCBpO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwociwgdCk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKHIsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByO1xuICAgIChyID0gKHQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIHJldHVybiAoaSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogS3Q7XG4gIH0sIG47XG59KHRuKSwgd28gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGJvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oSWUpLCB3dCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgamUoW2UsIG5dLCBVZSh0KSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHZvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSB0LCBpLndvcmsgPSByLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSB0O1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbih0LCByLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCB3dC5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCwgdGhpcyksIGkpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHQsIHIsIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgd3QuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUodCwgcik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHQpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciA9IHQuaWQsIGkgPSB0LnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCB4ZShzLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oYm8pLCBidCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4sIHQpIHtcbiAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gdDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIHQpO1xuICB9LCBlLm5vdyA9IHdvLm5vdywgZTtcbn0oKSwgRW8gPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBidC5ub3cpO1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMsIHQsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSB0LmV4ZWN1dGUodC5zdGF0ZSwgdC5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlICh0ID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyB0ID0gci5zaGlmdCgpOyApXG4gICAgICAgIHQudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCBuO1xufShidCksIENvID0gbmV3IEVvKHZvKSwgU28gPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBQbyhlKSB7XG4gIHJldHVybiBNKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBrbyhlKSB7XG4gIHJldHVybiBNKGVbY3RdKTtcbn1cbmZ1bmN0aW9uIEFvKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSW8oZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIFJvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFRvID0gUm8oKTtcbmZ1bmN0aW9uIEZvKGUpIHtcbiAgcmV0dXJuIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZVtUb10pO1xufVxuZnVuY3Rpb24gTW8oZSkge1xuICByZXR1cm4gcm8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgaSwgcztcbiAgICByZXR1cm4gSnQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB0ID0gZS5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgbWUodC5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gYS5zZW50KCksIGkgPSByLnZhbHVlLCBzID0gci5kb25lLCBzID8gWzQsIG1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIG1lKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiB0LnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIERvKGUpIHtcbiAgcmV0dXJuIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gTm8oZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIHRlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKGtvKGUpKVxuICAgICAgcmV0dXJuIExvKGUpO1xuICAgIGlmIChTbyhlKSlcbiAgICAgIHJldHVybiBPbyhlKTtcbiAgICBpZiAoUG8oZSkpXG4gICAgICByZXR1cm4gVW8oZSk7XG4gICAgaWYgKEFvKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChGbyhlKSlcbiAgICAgIHJldHVybiBqbyhlKTtcbiAgICBpZiAoRG8oZSkpXG4gICAgICByZXR1cm4geG8oZSk7XG4gIH1cbiAgdGhyb3cgSW8oZSk7XG59XG5mdW5jdGlvbiBMbyhlKSB7XG4gIHJldHVybiBuZXcgdGUoZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gZVtjdF0oKTtcbiAgICBpZiAoTSh0LnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gdC5zdWJzY3JpYmUobik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9vKGUpIHtcbiAgcmV0dXJuIG5ldyB0ZShmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmxlbmd0aCAmJiAhbi5jbG9zZWQ7IHQrKylcbiAgICAgIG4ubmV4dChlW3RdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gVW8oZSkge1xuICByZXR1cm4gbmV3IHRlKGZ1bmN0aW9uKG4pIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24odCkge1xuICAgICAgbi5jbG9zZWQgfHwgKG4ubmV4dCh0KSwgbi5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gbi5lcnJvcih0KTtcbiAgICB9KS50aGVuKG51bGwsIGVuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBqbyhlKSB7XG4gIHJldHVybiBuZXcgdGUoZnVuY3Rpb24obikge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0geWUoZSksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKG4ubmV4dChhKSwgbi5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHQgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAociA9IGkucmV0dXJuKSAmJiByLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyB0ZShmdW5jdGlvbihuKSB7XG4gICAgJG8oZSwgbikuY2F0Y2goZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IodCk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geG8oZSkge1xuICByZXR1cm4gbm4oTW8oZSkpO1xufVxuZnVuY3Rpb24gJG8oZSwgbikge1xuICB2YXIgdCwgciwgaSwgcztcbiAgcmV0dXJuIG5vKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gSnQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgdCA9IG9vKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgdC5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSByLnZhbHVlLCBuLm5leHQoYSksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChzID0gdC5yZXR1cm4pID8gWzQsIHMuY2FsbCh0KV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR28oZSwgbiwgdCwgciwgaSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgdCgpLCBpID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAoZS5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gem8oZSwgbikge1xuICB2YXIgdCA9IE0oZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIHIgPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IodCgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyB0ZShyKTtcbn1cbnZhciBWbyA9IFZlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHFvKGUsIG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogcixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IHQocykgOiByKG5ldyBWbygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBZbyhlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgQm8gPSBWZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdCA9PT0gdm9pZCAwICYmICh0ID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gV28oZSwgbikge1xuICB2YXIgdCA9IFlvKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgciA9IHQuZmlyc3QsIGkgPSB0LmVhY2gsIHMgPSB0LndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBIbyA6IHMsIGMgPSB0LnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IENvIDogYywgdSA9IHQubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAociA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBmbyhmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIHksIG0sIGcgPSBudWxsLCBFID0gMCwgdyA9IGZ1bmN0aW9uKEMpIHtcbiAgICAgIG0gPSBHbyhfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB5LnVuc3Vic2NyaWJlKCksIE5vKGEoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogZyxcbiAgICAgICAgICAgIHNlZW46IEVcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChQKSB7XG4gICAgICAgICAgXy5lcnJvcihQKTtcbiAgICAgICAgfVxuICAgICAgfSwgQyk7XG4gICAgfTtcbiAgICB5ID0gZi5zdWJzY3JpYmUoX28oXywgZnVuY3Rpb24oQykge1xuICAgICAgbSA9PSBudWxsIHx8IG0udW5zdWJzY3JpYmUoKSwgRSsrLCBfLm5leHQoZyA9IEMpLCBpID4gMCAmJiB3KGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIG0gIT0gbnVsbCAmJiBtLmNsb3NlZCB8fCBtID09IG51bGwgfHwgbS51bnN1YnNjcmliZSgpLCBnID0gbnVsbDtcbiAgICB9KSksICFFICYmIHcociAhPSBudWxsID8gdHlwZW9mIHIgPT0gXCJudW1iZXJcIiA/IHIgOiArciAtIGwubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBIbyhlKSB7XG4gIHRocm93IG5ldyBCbyhlKTtcbn1cbmNsYXNzIENlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogbiB9LCB0aGlzLl9zdWJqZWN0Lm5leHQobiksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKG4sIHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiBuLCBlcnJNc2c6IHQgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihuKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKG4pID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiBuLCB0aGlzLnN1YnNjcmliZSA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpLCB0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIHFlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdCA9IHtcbiAgICAgICAgZmlyc3Q6IG4udGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gem8oKCkgPT4gbmV3IEVycm9yKG4udGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHFvKHRoaXMuX3N1YmplY3QucGlwZShXbyh0KSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB0bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBudCA9IG5ldyBDZSgpLCB2dCA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBKbyA9IDMsIEtvID0gMywgWm8gPSAxZTMsIHsgbG9nX186IERlIH0gPSBBKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIFFvIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBEZShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgRGUoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sICEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSAmJiAodGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSk7XG4gIH1cbiAgYWRkRXZlbnQobiwgdCwgcikge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBldmVudE5hbWU6IG4sXG4gICAgICBwcm9wZXJ0aWVzOiB0IHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBpLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGkpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odnQpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHZ0LCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgWm8pKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBuID0gbnQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIW4pIHtcbiAgICAgIERlKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEtvKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZXZlbnRzOiB0Lm1hcCgoYSkgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBhLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IG4uZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi5uLFxuICAgICAgICAgICAgLi4uYS5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGEubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYS5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYS50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYS50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBuLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5hLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgaSA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBuLm1ldHJpY3NCYXNlVXJsKTtcbiAgICAgIChhd2FpdCBmZXRjaChpLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHIpXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2godCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgRGUoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIHIpLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChuKSB7XG4gICAgbi5mb3JFYWNoKChyKSA9PiB7XG4gICAgICByLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHQgPSBuLmZpbHRlcigocikgPT4gci5hdHRlbXB0Q291bnQgPCBKbyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uobi5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnQsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHJuID0gbmV3IFFvKCksIGggPSAoZSwgbiwgdCkgPT4ge1xuICBybi5hZGRFdmVudChlLCBuLCB0KTtcbn0sIG9uID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IEcoZS5yZWFzb24pO1xuICBoKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogbixcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHNuID0gKGUpID0+IHtcbiAgdmFyIHQsIHI7XG4gIGNvbnN0IG4gPSBHKGUuZXJyb3IpO1xuICBoKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IG4sXG4gICAgZXJyb3JfbmFtZTogKHQgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogdC5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAociA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiByLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIFhvID0gKCkgPT4ge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHNuKSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgb24pO1xufSwgZWkgPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvbik7XG59O1xudHlwZW9mIHdpbmRvdyA8IFwidVwiICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgcm4ucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNsYXNzIGFuIGV4dGVuZHMgdG8ge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgY29uc3QgdCA9IGAke24ubWVzc2FnZX1gO1xuICAgIHN1cGVyKHQpLCB0aGlzLnJlc3BvbnNlID0gbjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgTiA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIHIgJiYgaChyLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgaSA9IGF3YWl0IGUuc2VuZChuKTtcbiAgaWYgKG5pKGkpKVxuICAgIHRocm93IG5ldyBhbihpKTtcbiAgaWYgKCF0aShpLCB0KSkge1xuICAgIGNvbnN0IHMgPSB0LnNhZmVQYXJzZShpKTtcbiAgICB0aHJvdyBzLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHQsIFwiQWN0dWFsOlwiLCBpKSwgcy5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIHIgJiYgaChyLCB7XG4gICAgLi4uaVxuICB9KSwgaTtcbn0sIHRpID0gKGUsIG4pID0+IG4uc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIG5pID0gKGUpID0+IE1yLnNhZmVQYXJzZShlKS5zdWNjZXNzLCByaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiBuIH0sIFl0KSwgRCA9IGFzeW5jIChlKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCdCksIGhlID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LFxuICBIdCxcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dcIlxuKSwgb2kgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihcbiAgZSxcbiAgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogbiB9LFxuICBXcixcbiAgXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCJcbiksIGlpID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgaChcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwge1xuICAgIC4uLm5cbiAgfSk7XG4gIGNvbnN0IHQgPSBhd2FpdCBOKGUsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IG4gfSwgSHQpO1xuICByZXR1cm4gaChcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJfcmVzdWx0XCIsIHtcbiAgICAuLi50XG4gIH0pLCB0O1xufSwgcSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogbiB9LFxuICB3cixcbiAgXCJjb25maXJtX3BheW1lbnRfZmxvd1wiXG4pLCBzaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LFxuICBXdCxcbiAgXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiXG4pLCBhaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IG4gfSxcbiAgZ3IsXG4gIFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCJcbiksIGNpID0gYXN5bmMgKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IHJpKGUsIHtcbiAgICBzZWN1cmVfdG9rZW46IG4sXG4gICAgcHJvbW90aW9uX2NvZGU6IHRcbiAgfSksIGkgPSBuZXcgU2V0KHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0gWnIoci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBnZSA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGlmICh0KVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICByID0gciB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IGNpKGUsIG4sIHIpO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgbGkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKHIpID0+IE4ociwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogbiB9LCBmcilcbiAgICApXG4gICk7XG59LCBFdCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiBuIH0sXG4gIGl0LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgdWkgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LCBXdCwgXCJzZXR1cF9jaGVja291dFwiKSwgbHQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogbiB9LCBpdCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBjbiA9IDFlMywgZGkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zb2xlLmxvZyhuKTtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGNuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgTihyLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgX3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHV0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIEpyLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIGxuID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IE4oXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IG4gfSB9LFxuICAgICAgSHJcbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoICh0KSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgRyh0KSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCBwaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiBuIH0gfSxcbiAgS3Jcbik7XG5mdW5jdGlvbiBxZShlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IHVuID0gKGUsIG4pID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFt0XSkgPT4gIW4uaW5jbHVkZXModCkpKSwgeyBsb2dfXzogZGEsIGVycl9fOiBtaSB9ID0gQShcImNvbW1vblwiKSwgUmUgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCBXID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IGUuZmluZCgocikgPT4gbi5zYWZlUGFyc2Uocikuc3VjY2Vzcyk7XG4gIGlmICghdClcbiAgICB0aHJvdyBtaShcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiBuLnBhcnNlKHQpO1xufSwgeWkgPSAoZSkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgIHppcF9jb2RlOiBlLnppcENvZGUsXG4gICAgY291bnRyeTogZS5jb3VudHJ5XG4gIH0sXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBlLmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogZS5sYXN0TmFtZVxufSksIFllID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogbiB9ID0gQShlLmxvZ1ByZWZpeCksIHQgPSBhd2FpdCBEKGUuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBSZShlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIG4oXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBzaShlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC50b2tlbixcbiAgICAgIHBtX2lkOiByLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIG4oXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBpID0ge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnRva2VuLFxuICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICBwcm92aWRlcl90eXBlOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLlpJUF9DT0RFXSxcbiAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuQ09VTlRSWV0sXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiB0LmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogdC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH07XG4gICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IGx0KGUuYW55Q2RlQ29ubmVjdGlvbiwgaSkgfTtcbiAgfVxufSwgeyBsb2dfXzogZG4sIGVycl9fOiBwbiB9ID0gQShcImNvbW1vbi1jY1wiKSwgb2UgPSAoZSwgbiwgdCkgPT4ge1xuICBpZiAodCkge1xuICAgIGRuKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyh0KSlcbiAgICAgIGVbaV0gfHwgKGVbaV0gPSBzKTtcbiAgfVxuICBjb25zdCByID0gQWUuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSByLmVycm9yLmZvcm1hdCgpLCBzID0gR3QoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICBuKGEsIGMsIGEpO1xuICAgIHRocm93IHBuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBmaSA9IChlLCBuKSA9PiB7XG4gIGZvciAoY29uc3QgdCBvZiBlKVxuICAgIGlmICh0LnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgdC5lcnJvcnMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICBjb25zdCBpID0geHQuc2FmZVBhcnNlKHIuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBwbihgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke3IuZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgcik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgbihzLCByLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBkbihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgQ3QgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogRiwgZXJyX186IF9pIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIGhpID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGdpID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIHdpID0gdWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IHQgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBGKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCByID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhpKTtcbiAgICBGKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRChpKSwgYSA9IHMubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEYoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGdlKGksIHMudG9rZW4sIGEsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgQ3Ioci5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBGKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgZiA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke0N0fWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiB0ICE9IG51bGwgJiYgdC5kb05vdE1vdW50T25Jbml0ID8gRihcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoRihcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgZigpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jICh5KSA9PiB7XG4gICAgICBpZiAoRihcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCB0ICE9IG51bGwgJiYgdC5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHQub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgRihcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgeS5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jICh5KSA9PiB7XG4gICAgICBGKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCB5KTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiB5LmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbS5lcnJvciA/IChfaShcImVycm9yXCIsIG0uZXJyb3IpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IobS5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoRihcInBheW1lbnRNZXRob2RcIiwgbS5wYXltZW50TWV0aG9kKSwgUi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IG0ucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGYsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgRWkoQ3QpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgYmkgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICBGKFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb247XG4gICAgRihcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IHZpKHQsIGkuc3RyaXBlUE0pLCBjID0gb2UoYSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uY1xuICAgIH0pLCBGKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBoZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogaS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBGKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBnaS5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBmID0gYXdhaXQgRChzKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEYoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IHEocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBSZShfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBGKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1twLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IGx0KHMsIF8pIH07XG4gICAgfVxuICB9XG4pLCB2aSA9IChlLCBuKSA9PiB7XG4gIHZhciBsLCB1LCBkLCBmLCBfO1xuICBjb25zdCB0ID0geyAuLi5lIH0sIFtyLCAuLi5pXSA9ICgodSA9IChsID0gbi5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogdS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICB0W3AuRU1BSUxdID0gdFtwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGQgPSBuLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBkLmVtYWlsKSB8fCBuLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8ICgoZiA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBmLnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCAoKF8gPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogXy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGEgPSB0W3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIlwiLCBjID0gdFtwLkxBU1RfTkFNRV0gfHwgcyB8fCBcIlwiO1xuICByZXR1cm4gYSB8fCBjID8gKHRbcC5GSVJTVF9OQU1FXSA9IGEsIHRbcC5MQVNUX05BTUVdID0gYykgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBGKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHQpLCB0O1xufSwgRWkgPSAoZSkgPT4gbmV3IFByb21pc2UoKG4pID0+IHtcbiAgY29uc3QgdCA9ICgpID0+IHtcbiAgICBjb25zdCByID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgciA/IG4ocikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCk7XG4gIH07XG4gIHQoKTtcbn0pLCBDaSA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWUsI2FkeWVuLWNvbnRhaW5lciwjYWR5ZW4tY29udGFpbmVyPip7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIG1uID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgbi5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtDaX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCByID0gdC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgci5hcHBlbmRDaGlsZChuLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gci5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLCB7IGhvc3Q6IHQsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gU2koZSwgbiwgdCkge1xuICBjb25zdCByID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgZGkoZSwgdCk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCBuKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIHIoKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKHIsIGNuKTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBQaSh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IG4sXG4gIHJlc29sdmU6IHRcbn0pIHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKG4pLCBlLmhvc3QucmVtb3ZlKCksIHQoeyBzdGF0dXM6IFQuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHIpO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQmUoZSkge1xuICBjb25zdCB7IHVybDogbiwgYmFzZVVybDogdCB9ID0gZSwgciA9IG1uKG4pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKGwpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKGwpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBTaShyLmlmcmFtZSwgcywgbmV3IFVSTCh0KS5vcmlnaW4pLCBjID0gUGkoe1xuICAgICAgZWxlbWVudHM6IHIsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgeW4gPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgQmUoZSk7XG4gIGlmIChuLnN0YXR1cyA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuLnN0YXR1cyA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gbi5zdGF0dXMgIT09IFQuU1VDQ0VTUyAmJiBxZShuLnN0YXR1cyksIHtcbiAgICBocmVmOiBuLmhyZWZcbiAgfTtcbn0sIGtpID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IHdpbmRvdy5vcGVuKG4sIFwiX2JsYW5rXCIpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiB0O1xufSwgQWkgPSBhc3luYyAoZSwgbiwgdCwgcikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBBKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0ga2koZSwgciksIGwgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1ID0gYXdhaXQgYWkobiwgdCk7XG4gICAgICAgIGlmICh1LnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChsKSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogdS5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgaShHKHUpKSwgY2xlYXJJbnRlcnZhbChsKSwgYShHKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IElpLCBlcnJfXzogZm4gfSA9IEEoXCJwb2NreXQtY2NcIiksIFJpID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgVGkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gUmkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IHQgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBmbihyKSwgbmV3IEVycm9yKHQpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBfbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gSWkoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke259XWApLCBuO1xuICB9IGNhdGNoIChuKSB7XG4gICAgY29uc3QgdCA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IGZuKHQsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7RyhuKX1gKSwgbmV3IEVycm9yKHQpO1xuICB9XG59LCBGaSA9IChlLCBuKSA9PiBuZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQobiksIE1pID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIERpID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IFRpKG4pLCByID0gYXdhaXQgeW4oeyB1cmw6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IF9uKHIuaHJlZiA/PyBcIlwiKSxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiB0W1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogdFtcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBOaSwgZXJyX186IGR0IH0gPSBBKFwiYWlyd2FsbGV4LWNjXCIpLCBMaSA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSksIE9pID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IExpLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCB0ID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCByID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgZHQociksIG5ldyBFcnJvcih0KTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgVWkgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgamkgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIE5pKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke259XWApLCBuO1xuICB9IGNhdGNoIChuKSB7XG4gICAgY29uc3QgdCA9IFwiRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBkdCh0LCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke0cobil9YCksIG5ldyBFcnJvcih0KTtcbiAgfVxufSwgeGkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gT2kobiksIHIgPSBhd2FpdCB5bih7IHVybDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pLCBpID0gamkoci5ocmVmID8/IFwiXCIpLCBzID0gdFtcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKHMgIT09IGkpIHtcbiAgICBjb25zdCBjID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBsID0gYEludGVudCBJRCBmcm9tIGNhbGxiYWNrICgke2l9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7c30pLmA7XG4gICAgdGhyb3cgZHQobCksIG5ldyBFcnJvcihjKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICBpbml0aWFsX2ludGVudF9pZDogaSxcbiAgICAgIGNvbnNlbnRfaWQ6IHRbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbn0sIGhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBnbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgJGkgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSksIEdpID0geiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IGZlLCBlcnJfXzoga2UgfSA9IEEoXCJhZHllbi1jY1wiKSwgemkgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiAkaSxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KSwgd24gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIFZpID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IHppLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpXG4gICAgdGhyb3cga2UoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcih3bik7XG4gIHJldHVybiBuLmRhdGE7XG59LCBxaSA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBTdCA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCBZaSA9IGFzeW5jICgpID0+IHtcbiAgZmUoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFN0KCkgfHwgYXdhaXQgc3QoNTAwKTtcbiAgaWYgKCFTdCgpKVxuICAgIHRocm93IGtlKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcih3bik7XG4gIHJldHVybiBmZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIEJpID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiBuLCBsb2NhbGU6IHQsIGNvdW50cnlDb2RlOiByLCBjb21wb25lbnQ6IGksIGhvc3Q6IHMsIGNhbmNlbEJ1dHRvbjogYSB9ID0gZSwgYyA9IHFpKG5bXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gZmUoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgZmUoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyksIHMucmVtb3ZlKCk7XG4gICAgfSwgZCA9IChtKSA9PiB7XG4gICAgICBrZShcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBtKSwgbCh7IHN0YXR1czogVC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGYgPSAobSkgPT4ge1xuICAgICAga2UoXCJBZHllbiBlcnJvcjpcIiwgbSksIGwoeyBzdGF0dXM6IFQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBfID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogVC5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKTtcbiAgICBjb25zdCB5ID0gKG0sIGcsIEUpID0+IHtcbiAgICAgIHMucmVtb3ZlKCksIGwoeyBzdGF0dXM6IFQuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IG0sIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBZaSgpLnRoZW4oXG4gICAgICAobSkgPT4gbSh7XG4gICAgICAgIGNsaWVudEtleTogbltcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBuW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogdCxcbiAgICAgICAgY291bnRyeUNvZGU6IHIsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IHksXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogZCxcbiAgICAgICAgb25FcnJvcjogZlxuICAgICAgfSlcbiAgICApLnRoZW4oKG0pID0+IHtcbiAgICAgIG0uY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChpKTtcbiAgICB9KTtcbiAgfSk7XG59LCBXaSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgdCA9IGUgPz8gbiwgciA9IEdpLnNhZmVQYXJzZSh0KTtcbiAgcmV0dXJuIHIuc3VjY2VzcyA/IChmZShgUmVzb2x2ZWQgbG9jYWxlOiAke3IuZGF0YX1gKSwgci5kYXRhKSA6IChrZShgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7dH0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBIaSA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgSmkgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gVmkobiksIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBpLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBzLCBpZnJhbWU6IGEsIGNhbmNlbEJ1dHRvbjogYyB9ID0gbW4oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGEucmVwbGFjZVdpdGgoaSk7XG4gIGNvbnN0IGwgPSBhd2FpdCBCaSh7XG4gICAgaGVhZGVyczogcixcbiAgICBsb2NhbGU6IFdpKHQpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogaSxcbiAgICBob3N0OiBzLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IFQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IFQuU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gZmUoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBxZShsLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBTLCBlcnJfXzogUHQgfSA9IEEoXCJjb21tb24tY2NcIiksIHsgbG9nX186IGt0IH0gPSBBKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBLaSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciB1O1xuICAgIFMoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbiB9KTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgRChzKTtcbiAgICBoKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi5uLFxuICAgICAgcHJlZmlsbDogYVxuICAgIH0pLCBTKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG9lKHQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBoKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIFMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgbGkoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoZmkoZCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBTKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgdWkocywgbCk7XG4gICAgICAgIHJldHVybiBTKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFMoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgRXQocywgbCk7XG4gICAgICAgIHJldHVybiBTKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiBhbiAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIFMoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBTKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyksIGgoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLm4sXG4gICAgICAgICAgLi4uZC5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmID0gTWkoZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICBTKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBEaShlLmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChVaShkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgUyhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgeGkoZS5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSGkoZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFMoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBKaShcbiAgICAgICAgICAgIHRbcC5DT1VOVFJZXSxcbiAgICAgICAgICAgIGQucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIGEubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtID0gYXdhaXQgb2kocywgbCk7XG4gICAgICAgIFMoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgbSk7XG4gICAgICAgIGNvbnN0IGcgPSAoKHUgPSBkLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB1W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBmID8gUyhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogZyA/IChTKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgdHMobSkpIDogKFMoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBlcyhtLCBlLmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgRSA9IG0uY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIFMoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7RX1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IHEocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IEVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBTKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IEMgPSBSZSh3KTtcbiAgICAgICAgICByZXR1cm4gUyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0MucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBDIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgUyhg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtnID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBFdChzLCB7XG4gICAgICAgICAgICAuLi5sLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IEUsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIFMoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgUHQoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFB0KGQpLCBkO1xuICAgIH1cbiAgfVxuKSwgWmkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgodCkgPT4gdC50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGJyLnBhcnNlKG4pO1xufSwgUWkgPSBbXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIsIFwiYWR5ZW5cIl0sIFhpID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IFFpLmluY2x1ZGVzKHQudHlwZSkpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBoci5wYXJzZShuKTtcbn0sIGVzID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IFhpKGUpO1xuICBpZiAodC5yZWRpcmVjdF91cmwgPT09IFwiM0RTX0NPTVBMRVRFXCIpIHtcbiAgICBTKFwi4pScIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIiksIGgoXCIzZHNfY29tcGxldGVcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIFMoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHt0LnJlZGlyZWN0X3VybH1dYCksIGgoXCIzZHNfcmVkaXJlY3RcIiwge1xuICAgIC4uLnRcbiAgfSk7XG4gIGNvbnN0IHsgc3RhdHVzOiByIH0gPSBhd2FpdCBCZSh7IHVybDogdC5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IG4gfSk7XG4gIGlmIChTKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtyfV1gKSwgciA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgaChcIjNkc19jYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAociA9PT0gVC5GQUlMVVJFKVxuICAgIHRocm93IGgoXCIzZHNfZmFpbHVyZVwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCB0cyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBaaShlKTtcbiAgaChcIjNkc19zdHJpcGVfcmVkaXJlY3RcIiwge1xuICAgIC4uLm5cbiAgfSksIGt0KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke24uY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBBcihuKSwgaChcIjNkc19zdHJpcGVfY29tcGxldGVcIiksIGt0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgWSA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuWS5FbnVtLnN0cmlwZTtcbmNvbnN0IGJuID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogbixcbiAgY2hlY2tMb2FkZWRGbjogdFxufSkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGksIHMpID0+IHtcbiAgICBsZXQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgYS5zcmMgPSBuLCBhLmlkID0gZSwgYS5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICB0KCkgPyBpKCkgOiBjID8gYSA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLCBhLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgci5hYm9ydCgpLCBpKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApLCBhLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHIuYWJvcnQoKSwgcyhcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIHsgbG9nX186IE8sIGVycl9fOiBucyB9ID0gQShcInN0cmlwZS1wclwiKSwgcnMgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIG9zID0gdWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIE8oXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCB0ID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHJzKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBEKHIpLCBzID0gaS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBhID0gYXdhaXQgZ2UociwgaS50b2tlbiwgcywgdm9pZCAwKSwgYyA9IGF3YWl0IFNyKFxuICAgICAgdC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBhLmFtb3VudEF0b20sXG4gICAgICBhLmN1cnJlbmN5LFxuICAgICAgc1xuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBucyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIGYpID0+IFIuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFNlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBmID09IG51bGwgPyB2b2lkIDAgOiBmLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBZLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgaXMgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgaS5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7aS5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGkgIT0gbnVsbCAmJiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG0gPSBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBtKSwgYXMoYywgbS5hbW91bnQsIG0ucGVuZGluZywgbS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0LCBtLmxhYmVsKTtcbiAgICB9XG4gICAgTyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUHIoYyk7XG4gICAgTyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIE8oXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBzcyh0LCBsKSwgZCA9IG9lKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBoKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgTyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IGYgPSBhd2FpdCBpaShhLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5cbiAgICB9KSwgXyA9IGNzKGYpO1xuICAgIE8oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBrcihfLCBsKTtcbiAgICBjb25zdCB5ID0gYXdhaXQgRChhKTtcbiAgICBpZiAoeS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE8oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBtID0gYXdhaXQgcShhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogUmUobSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBtID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiB5LmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB5LmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgbHQoYSwgbSkgfTtcbiAgICB9XG4gIH1cbiksIHNzID0gKGUsIG4pID0+IHtcbiAgdmFyIGQsIGYsIF8sIHk7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLmldID0gKChmID0gKGQgPSBuLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogZi5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwLCBhID0gKHkgPSAoXyA9IG4ucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogeS5hZGRyZXNzLCBjID0gbi5zaGlwcGluZ0FkZHJlc3M7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4ucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSB0W3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIlwiLCB1ID0gdFtwLkxBU1RfTkFNRV0gfHwgcyB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHRbcC5GSVJTVF9OQU1FXSA9IGwsIHRbcC5MQVNUX05BTUVdID0gdSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHQpLCB0O1xufSwgYXMgPSAoZSwgbiwgdCwgciwgaSkgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogbi5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGkgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogdFxuICAgIH0sXG4gICAgY3VycmVuY3k6IG4uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogclxuICB9KTtcbn0sIGNzID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIHZyLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIHsgbG9nX186IEgsIGVycl9fOiBBdCB9ID0gQShcInBvY2t5dC1wYXlwYWxcIiksIGxzID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCB1cyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciB4LCBkZTtcbiAgICBIKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IEQocyk7XG4gICAgSChcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IGxzLnBhcnNlKG4pO1xuICAgIEgoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzLCB1ID0gb2UoXG4gICAgICB0LFxuICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBsID09IG51bGwgPyB2b2lkIDAgOiBsLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSB5aSh1KTtcbiAgICBIKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHthLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IHY0KCksIF8gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogXyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogXyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoeCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgeC51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZlxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCBtID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBnID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIEUgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBhLnRva2VuLFxuICAgICAgcjogZ1xuICAgIH0pLCB3ID0gYCR7bX0/JHtFLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKGRlID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBkZS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBIKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHcsIGF3YWl0IHN0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgSChcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgSChcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBDID0gYXdhaXQgQWkoXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgcyxcbiAgICAgIGYsXG4gICAgICB3XG4gICAgKTtcbiAgICBIKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEMpO1xuICAgIGNvbnN0IFAgPSBfbihDLmhyZWYpLCB2ID0gRmkoQy5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCF2KVxuICAgICAgdGhyb3cgQXQoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIEMuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBIKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke1B9YCk7XG4gICAgY29uc3QgTCA9IGF3YWl0IHEocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IFAsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBfID8gdiA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChIKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEwpLCBhLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEwucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgQXQoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBMKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIFdlID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4sXG4gIG1lcmNoYW50TmFtZTogdCxcbiAgbWVyY2hhbnRJZDogcixcbiAgaW5pdGlhbFByZXZpZXc6IGksXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gIHByZWZpbGw6IGFcbn0pID0+IHtcbiAgdmFyIGYsIF87XG4gIGNvbnN0IGMgPSAoKGYgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYW1vdW50QXRvbSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgoXyA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5jdXJyZW5jeSkgPz8gKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY3VycmVuY3kpID8/IGkuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiByID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHRcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IHMgIT0gbnVsbCAmJiBzLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gcyAhPSBudWxsICYmIHMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB7IC4uLmQsIC4uLnMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfSA6IGQ7XG59LCB2biA9ICgpID0+IGJuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9nb29nbGVfcGF5X3Nka1wiLFxuICBzcmM6IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiB7XG4gICAgdmFyIGUsIG47XG4gICAgcmV0dXJuICEhKChuID0gKGUgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZS5wYXltZW50cykgIT0gbnVsbCAmJiBuLmFwaSk7XG4gIH1cbn0pO1xubGV0IFFlID0gbnVsbDtcbmNvbnN0IEVuID0gKGUpID0+IGUgPT09IG90IHx8IGUgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBIZSA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBFbihlKTtcbiAgcmV0dXJuIFFlID09PSBudWxsICYmIChRZSA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHQsXG4gICAgbWVyY2hhbnRJbmZvOiBuLm1lcmNoYW50SW5mb1xuICB9KSksIFFlO1xufSwgZHMgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgodCkgPT4gdC50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiBuID8gJHQucGFyc2UobikgOiBudWxsO1xufSwgQ24gPSAoZSwgbikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgdCA9IHsgLi4uZSB9LCByID0gKHMgPSAoaSA9IG4ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAocikge1xuICAgIGNvbnN0IFtsLCAuLi51XSA9ICgoYyA9IChhID0gci5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBkID0gdS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgdFtwLkVNQUlMXSA9IHRbcC5FTUFJTF0gfHwgbi5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCByLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgdFtwLkFERFJFU1NdID0gdFtwLkFERFJFU1NdIHx8IHIuYWRkcmVzczEgfHwgXCJcIiwgdFtwLkNJVFldID0gdFtwLkNJVFldIHx8IHIubG9jYWxpdHkgfHwgXCJcIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgci5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgdFtwLlNUQVRFXSA9IHRbcC5TVEFURV0gfHwgci5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBjb25zdCBmID0gdFtwLkZJUlNUX05BTUVdIHx8IGwgfHwgXCJcIiwgXyA9IHRbcC5MQVNUX05BTUVdIHx8IGQgfHwgXCJcIjtcbiAgICBmIHx8IF8gPyAodFtwLkZJUlNUX05BTUVdID0gZiwgdFtwLkxBU1RfTkFNRV0gPSBfKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHQ7XG59LCB7IGxvZ19fOiBWLCBlcnJfXzogcGUgfSA9IEEoXCJhd3gtZ29vZ2xlLXBheVwiKSwgcHMgPSB1ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGYsIF87XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGduKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBWKFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgaSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFpLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIHBlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgdDtcbiAgICBpZiAoVihcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IHZuKCksICEoKF8gPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBwZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHQ7XG4gICAgaWYgKEVuKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFpLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gcGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCB0O1xuICAgIFYoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHkgPSBXZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBpLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGkucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogaS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IG0gfSA9IGF3YWl0IEhlKGUuYmFzZVVybCwgeSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB5XG4gICAgICApO1xuICAgICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4gVihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB0O1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBwZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHkpLCB0O1xuICAgIH1cbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZ2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIHBlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBtcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciB5LCBtLCBnLCBFLCB3LCBDLCBQO1xuICAgIFYoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IFcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBnbiksIHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGksIGwgPSBzLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IFdlKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogYSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZiA9IGF3YWl0IEQoZCk7XG4gICAgaChcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBzLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdW4oZiwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBIZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICBWKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgdik7XG4gICAgICBjb25zdCBMID0gQ24odCwgdiksIHggPSBvZShcbiAgICAgICAgTCxcbiAgICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgaChcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLnhcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGUgPSAobSA9ICh5ID0gdi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW47XG4gICAgICBpZiAoIWRlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE9uID0gYXdhaXQgaGUoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB4W3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB4W3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogeFtwLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiB4W3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIFRlID0gZHMoT24pO1xuICAgICAgVihcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFRlKTtcbiAgICAgIGxldCBpZSA9IGF3YWl0IHEoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFRlID09IG51bGwgPyB2b2lkIDAgOiBUZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBkZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBWKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgaWUpO1xuICAgICAgbGV0IEplID0gKEUgPSAoZyA9IGllLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGdbMF0pID09IG51bGwgPyB2b2lkIDAgOiBFLmlkO1xuICAgICAgY29uc3Qgc2UgPSAodyA9IGllLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHcuZmluZChcbiAgICAgICAgKHdlKSA9PiB3ZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChzZSAmJiBzZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgVihcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHNlKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IHdlIH0gPSBhd2FpdCBCZSh7XG4gICAgICAgICAgdXJsOiBzZS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoVihg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7d2V9XWApLCB3ZSA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmICh3ZSA9PT0gVC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHNlICYmICFKZSAmJiAoaWUgPSBhd2FpdCBxKGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogc2UudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHNlLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIFYoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSksIEplID0gKFAgPSAoQyA9IGllLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IENbMF0pID09IG51bGwgPyB2b2lkIDAgOiBQLmlkKSwgIUplKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBZZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB4LFxuICAgICAgICBjb25maXJtUmVzdWx0OiBpZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAodikge1xuICAgICAgdGhyb3cgcGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdiksIGgoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogdlxuICAgICAgfSksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBTbiA9ICgpID0+IGJuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgISF3aW5kb3cuQXBwbGVQYXlTREtcbn0pLCBQbiA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBuLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIHIgPSBuLmJpbGxpbmdDb250YWN0LCBpID0gbi5zaGlwcGluZ0NvbnRhY3QsIHMgPSB7IC4uLmUgfTtcbiAgaWYgKHQgfHwgciB8fCBpKSB7XG4gICAgc1twLkVNQUlMXSA9IHNbcC5FTUFJTF0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZW1haWxBZGRyZXNzKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1twLkNPVU5UUlldID0gc1twLkNPVU5UUlldIHx8ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmNvdW50cnlDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1twLlpJUF9DT0RFXSA9IHNbcC5aSVBfQ09ERV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucG9zdGFsQ29kZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IGEgPSBzW3AuRklSU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2l2ZW5OYW1lKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IHNbcC5MQVNUX05BTUVdIHx8ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmZhbWlseU5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgYSB8fCBjID8gKHNbcC5GSVJTVF9OQU1FXSA9IGEsIHNbcC5MQVNUX05BTUVdID0gYykgOiAoc1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBzW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBzO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBrbiA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiBuXG59KSA9PiB7XG4gIHZhciByO1xuICBpZiAobi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke24udG9rZW59YCwgb3QpLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCB0ID0gKHIgPSBuLmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdO1xuICBpZiAodClcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogdCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7bi50b2tlbn1gXG4gICAgfTtcbn0sIEFuID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IG4sXG4gIHByZWZpbGw6IHQsXG4gIGRlZmF1bHRMYWJlbDogciA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgaSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmN1cnJlbmN5KSA/PyBuLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBhID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBpLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IHIgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBhXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogTGUgfSA9IEEoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24geXMoZSwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgdXQobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGkgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghaSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oaSksIGgoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5pXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgdDtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gZnMoZSwgbikge1xuICBpZiAoIWUucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgTGUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBlKTtcbiAgY29uc3QgeyBzdGF0dXM6IHQgfSA9IGF3YWl0IEJlKHtcbiAgICB1cmw6IGUucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IG4uYmFzZVVybFxuICB9KTtcbiAgaWYgKExlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHt0fV1gKSwgdCA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmICh0ID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IHIgPSBhd2FpdCBxKG4uY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IGUudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZS5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gTGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByKSwgcjtcbn1cbmFzeW5jIGZ1bmN0aW9uIF9zKGUsIG4pIHtcbiAgdmFyIHQsIHIsIGksIHMsIGE7XG4gIHRyeSB7XG4gICAgY29uc3QgYyA9IGUucGF5bWVudCwgbCA9IFBuKG4ubm9uQ2RlRm9ybUlucHV0cywgYyksIHUgPSBvZShcbiAgICAgIGwsXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4udVxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSAoYXdhaXQgaGUobi5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogdVtwLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB1W3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB1W3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiB1W3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiB1W3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFfKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgeSA9IGF3YWl0IHEobi5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IF8sXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgTGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB5KTtcbiAgICBsZXQgbSA9IChyID0gKHQgPSB5LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHRbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkO1xuICAgIGNvbnN0IGcgPSAoaSA9IHkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaS5maW5kKFxuICAgICAgKHcpID0+IHcudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChnICE9IG51bGwgJiYgZy5yZWRpcmVjdF91cmwgJiYgZy5jb25zZW50X2lkICYmIGcudGhlaXJfcG1faWQgJiYgKHkgPSBhd2FpdCBmcyhnLCBuKSwgbSA9IChhID0gKHMgPSB5LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHNbMF0pID09IG51bGwgPyB2b2lkIDAgOiBhLmlkKSwgIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBFID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KEUpLCBZZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogeSxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogYmUsIGVycl9fOiBJbiB9ID0gQShcImF3eC1hcHBsZS1wYXlcIiksIGhzID0gdWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IFcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBobik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgaWYgKGJlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBTbigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGJlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgdDtcbiAgICBpZiAoYmUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGJlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCB0O1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEQoYSksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKGEsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIEluKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIGdzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjdXN0b21QYXJhbXM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEU7XG4gICAgY29uc3QgcyA9IFcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBobiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSwgaW5pdGlhbFByZXZpZXc6IGMgfSA9IHIsIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBEKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIHsgY3VycmVuY3lDb2RlOiBmLCB0b3RhbDogXyB9ID0gQW4oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgZGVmYXVsdExhYmVsOiAoRSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBFLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGYsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogXyxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBrbih7XG4gICAgICAgIHRvdGFsOiBfLFxuICAgICAgICBwcmVmaWxsOiB1XG4gICAgICB9KSxcbiAgICAgIC4uLihhID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfSwgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIGcgPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBpLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiByID09IG51bGwgPyB2b2lkIDAgOiByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGgoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdW4odSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYVxuICAgIH0pLCBuZXcgUHJvbWlzZSgodywgQykgPT4ge1xuICAgICAgY29uc3QgUCA9ICgpID0+IHtcbiAgICAgICAgYmUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBDKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIG0ub25jYW5jZWwgPSBQLCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgeXModiwgZyk7XG4gICAgICAgIH0gY2F0Y2ggKEwpIHtcbiAgICAgICAgICBDKEwpO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLl8gfVxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih2KTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIGgoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEwgPSBhd2FpdCBfcyh2LCBnKTtcbiAgICAgICAgICB3KEwpO1xuICAgICAgICB9IGNhdGNoIChMKSB7XG4gICAgICAgICAgQyhMKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKCh3KSA9PiB7XG4gICAgICB0aHJvdyBJbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHcpLCBoKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIHc7XG4gICAgfSk7XG4gIH1cbiksIHdzID0gMSwgYnMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IGosIGVycl9fOiBSbiB9ID0gQShcImxvb3AtY3J5cHRvXCIpLCB2cyA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBJLFxuICBsb29wTGFzdE5hbWU6IEksXG4gIGxvb3BFbWFpbDogSSxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBrXG59KSwgRXMgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gdnMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSByLmVycm9yLmZvcm1hdCgpLCBzID0gR3QoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICBuKGEsIGMsIGEpO1xuICAgIHRocm93IFJuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBDcyA9IHVlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBqKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGJzKTtcbiAgICBqKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksIGooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHQgPSBhd2FpdCBEKGUuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBhd2FpdCB1dChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgfSk7XG4gICAgaWYgKHQubW9kZSAhPT0gXCJzZXR1cFwiICYmICFuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHQuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3QuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7bi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghciB8fCAhci5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IGkgPSByLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBzO1xuICAgIHQubW9kZSA9PT0gXCJzZXR1cFwiID8gcyA9IHdzIDogcyA9IHQuYW1vdW50X3RvdGFsX2F0b20gKiBpLnRva2VuX3ByaWNlO1xuICAgIGNvbnN0IGEgPSBzLCBjID0gaS5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHY0KCksIHUgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50OiBhLFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudDogYyxcbiAgICAgIGN1c3RvbWVyUmVmSWQ6IGxcbiAgICB9LCBkID0ge1xuICAgICAgYXBpS2V5OiBuLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBuLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IG4ubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogbi5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB1LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGRcbiAgICB9O1xuICB9XG4pLCBTcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIGooXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgaihcImNvbnRleHRcIiwgZSksIGooXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgbiksIGooXCJub25DZGVGb3JtSW5wdXRzXCIsIHQpLCBqKFwiZmxvd0NhbGxiYWNrc1wiLCByKSwgaihcImN1c3RvbVBhcmFtc1wiLCBpKTtcbiAgICBjb25zdCBzID0gRXModCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChlLmFueUNkZUNvbm5lY3Rpb24pLCBsID0gYy5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBhd2FpdCBoZShlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogcy5sb29wRW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogcy5sb29wRmlyc3ROYW1lLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogcy5sb29wTGFzdE5hbWUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGwsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgcShhLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogaS5zdWNjZXNzID8gaS5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCA6IHZvaWQgMCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGMubW9kZSAhPT0gXCJzZXR1cFwiID8gdS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGkuc3VjY2VzcyA/IGkuY3VzdG9tZXIgOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfcGF5aW46IGkuc3VjY2VzcyA/IGkucGF5aW4gOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZmFpbHVyZV9kZXRhaWxzOiBpLnN1Y2Nlc3MgPyB2b2lkIDAgOiBpLmZhaWx1cmVEZXRhaWxzLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IGkuc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChqKGBDb25maXJtIHJlc3VsdDogJHtkfWApLCBjLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgaihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIiksIGooXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgZCk7XG4gICAgICBjb25zdCBmID0gUmUoZCk7XG4gICAgICByZXR1cm4gaihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChqKFwiRG9pbmcgY2hlY2tvdXQuLi5cIiksICFkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBSbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKTtcbmFzeW5jIGZ1bmN0aW9uIFBzKGUsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IHV0KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBlLnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGkgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghaSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oaSksIGgoXCJhcHBsZV9wYXlfY29tcGxldGVfbWVyY2hhbnRfdmFsaWRhdGlvblwiLCB7XG4gICAgICAuLi5pXG4gICAgfSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgdDtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24ga3MoZSwgbikge1xuICB2YXIgdCwgcjtcbiAgdHJ5IHtcbiAgICBjb25zdCBpID0gZS5wYXltZW50LCBzID0gUG4obi5ub25DZGVGb3JtSW5wdXRzLCBpKSwgYSA9IG9lKHMsIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uYVxuICAgIH0pLCBhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBhW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGFbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGFbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGFbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGFbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShpLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgcShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChyID0gKHQgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHRbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIFllKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBhLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChzKSwgaTtcbiAgfVxufVxuY29uc3QgVG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBGbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IE9lLCBlcnJfXzogTW4gfSA9IEEoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBBcyA9IHVlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFRuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBpZiAoT2UoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFNuKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gT2UoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB0O1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIE9lKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCB0O1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEQoYSksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKGEsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgUi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIE1uKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGgoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBJcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBFO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEgfSA9IHIsIGMgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pLCB7IGN1cnJlbmN5Q29kZTogbCwgdG90YWw6IHUgfSA9IEFuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIGRlZmF1bHRMYWJlbDogKEUgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogRS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGYgPSBhd2FpdCBEKGQpLCBfID0gZi5tb2RlID09PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBsLFxuICAgICAgdG90YWw6IHUsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGtuKHtcbiAgICAgICAgdG90YWw6IHUsXG4gICAgICAgIHByZWZpbGw6IGZcbiAgICAgIH0pLFxuICAgICAgLi4uKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9O1xuICAgIGgoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZixcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KTtcbiAgICBjb25zdCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgZyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IGYsXG4gICAgICBpc1NldHVwTW9kZTogXyxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgQykgPT4ge1xuICAgICAgbS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgT2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBDKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoUCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFBzKFAsIGcpO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgQyh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgUCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihQKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChQKSA9PiB7XG4gICAgICAgIGgoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHYgPSBhd2FpdCBrcyhQLCBnKTtcbiAgICAgICAgICB3KHYpO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgQyh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKCh3KSA9PiB7XG4gICAgICB0aHJvdyBNbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHcpLCBoKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIHc7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGNlLCBlcnJfXzogdmUgfSA9IEEoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgUnMgPSB1ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIGY7XG4gICAgY2UoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBjZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGkgPSByLm1ldGFkYXRhO1xuICAgIGlmICghaS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB2ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHQ7XG4gICAgaWYgKGNlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgdm4oKSwgISgoZiA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgZi5hcGkpKVxuICAgICAgcmV0dXJuIHZlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgdDtcbiAgICBjZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgXyA9IFdlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGkucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogaS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBpLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgSGUoZS5iYXNlVXJsLCBfKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIF9cbiAgICAgICk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBjZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB0O1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiB2ZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIF8pLCB0O1xuICAgIH1cbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgRChzKSwgYyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgZ2UocywgYS50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChfKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBSLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIHZlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBoKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogeVxuICAgICAgICB9KSwgbi5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIFRzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiBuLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIG0sIGcsIEU7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSB9ID0gaSwgbCA9IFcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBGbikubWV0YWRhdGEsIHUgPSBXZSh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGYgPSBhd2FpdCBEKGQpO1xuICAgIGgoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IGYsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IEhlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHcgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIGNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgdyk7XG4gICAgICBjb25zdCBDID0gQ24obiwgdyksIFAgPSBvZShDLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBoKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uUFxuICAgICAgfSk7XG4gICAgICBjb25zdCB2ID0gKG0gPSAoeSA9IHcucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuO1xuICAgICAgaWYgKCF2KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IEwgPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFBbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBQW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFBbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBQW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFBbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEwpO1xuICAgICAgY29uc3QgeCA9IGF3YWl0IHEoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYSh2KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoRSA9IChnID0geC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBnWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFllKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBQLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB4LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyB2ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB3KSwgaChcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB3XG4gICAgICB9KSwgbmV3IEVycm9yKCh3ID09IG51bGwgPyB2b2lkIDAgOiB3Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIFNlID0gKGUsIG4sIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmlsdGVyKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IHQgPT09IHZvaWQgMCA/ICEwIDogaS5wcm9jZXNzb3JfbmFtZSA9PT0gdCwgYSA9IGkucHJvdmlkZXIgPT09IG47XG4gICAgcmV0dXJuIHMgJiYgYTtcbiAgfSk7XG4gIGlmIChyLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHt0fSdgKTtcbiAgaWYgKHIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHt0fSdgKTtcbiAgcmV0dXJuIHJbMF07XG59LCBSID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEtpXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IG9zLFxuICAgIHJ1bjogaXNcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IHdpLFxuICAgIHJ1bjogYmlcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogdXNcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IHBzLFxuICAgIHJ1bjogbXNcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBocyxcbiAgICBydW46IGdzXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IENzLFxuICAgIHJ1bjogU3NcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBBcyxcbiAgICBydW46IElzXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IFJzLFxuICAgIHJ1bjogVHNcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0sIHsgbG9nX186IEZzLCBlcnJfXzogTXMgfSA9IEEoXCJpbml0LWZsb3dzXCIpLCBhZSA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgQ2UoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IHQsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0LmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IG4ocik7XG4gICAgICAgIEZzKGDinJQgJHtlfSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCB0LnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgTXMoYPCdma0gJHtlfSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgRyhpKSwgXCJEZXRhaWxzOlwiLCBpKSwgdC50aHJvdyhpLCBHKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBEcyA9IGFzeW5jIChlLCBuLCB0KSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZSkubWFwKChyKSA9PiByLmluaXRpYWxpemUoeyBjb250ZXh0OiBuLCBmb3JtQ2FsbGJhY2tzOiB0IH0pKSk7XG59LCBOcyA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBhZShcIlN0cmlwZSBQUlwiLCBSLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBhZShcIlN0cmlwZSBMaW5rXCIsIFIuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IGFlKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBSLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBhZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBSLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IGFlKFwiTG9vcFwiLCBSLmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogYWUoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBSLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogYWUoXCJBdXRobmV0IEFwcGxlUGF5XCIsIFIuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBMcyB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCB6ID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgSXQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogeixcbiAgb25CbHVyOiB6LFxuICBvbkNoYW5nZTogeixcbiAgb25Mb2FkOiB6LFxuICBvbkxvYWRFcnJvcjogeixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IHosXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiB6LFxuICBvbkNoZWNrb3V0U3VjY2VzczogeixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiB6LFxuICBvbkNoZWNrb3V0RXJyb3I6IHosXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiB6XG59KSwgWiA9IGNsYXNzIFoge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChuKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBaLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFt0LCByXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gWW4odCwgciA/PyBaLk5PT1AsIExzKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3RdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IFouY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcblouTk9PUCA9ICgpID0+IHtcbn0sIFouY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEl0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgodCkgPT4ge1xuICAgIG5bdF0gPSBaLk5PT1A7XG4gIH0pLCBuO1xufSwgWi5mcm9tT2JqZWN0ID0gKG4pID0+IHtcbiAgY29uc3QgdCA9IG5ldyBaKCk7XG4gIHJldHVybiB0LnNldENhbGxiYWNrcyhJdC5wYXJzZShuKSksIHQ7XG59O1xubGV0IHJ0ID0gWjtcbmNvbnN0IE9zID0gXCJlcnJvclwiLCBVcyA9IFwiZGVidWdcIiwganMgPSBjb25zb2xlLmVycm9yLCB4cyA9IGNvbnNvbGUuZGVidWc7XG50eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgKHdpbmRvdy5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzID0gW10pO1xuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKC4uLmUpIHtcbiAganMuY2FsbChjb25zb2xlLCAuLi5lKSwgd2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MuZm9yRWFjaCgobikgPT4gbihPcywgLi4uZSkpO1xufTtcbmNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiguLi5lKSB7XG4gIHhzLmNhbGwoY29uc29sZSwgLi4uZSksIHdpbmRvdy5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzLmZvckVhY2goKG4pID0+IG4oVXMsIC4uLmUpKTtcbn07XG5jb25zdCBEbiA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgUGUgPSAzMiwgJHMgPSAxNiwgTm4gPSAxMCwgUnQgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgbGU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShsZSB8fCAobGUgPSB7fSkpO1xuY2xhc3MgRWUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG4sIHQpIHtcbiAgICBzdXBlcihgJHt0fSAoJHtufSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gbjtcbiAgfVxufVxuZnVuY3Rpb24gR3MoZSkge1xuICBsZXQgbiA9IE1hdGguZmxvb3IoZSgpICogUGUpO1xuICByZXR1cm4gbiA9PT0gUGUgJiYgKG4gPSBQZSAtIDEpLCBEbi5jaGFyQXQobik7XG59XG5mdW5jdGlvbiB6cyhlKSB7XG4gIGNvbnN0IG4gPSBWcygpLCB0ID0gbiAmJiAobi5jcnlwdG8gfHwgbi5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHQuZ2V0UmFuZG9tVmFsdWVzKHIpLCByWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gdC5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IEVlKGxlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIFZzKCkge1xuICByZXR1cm4gQnMoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBxcyhlLCBuKSB7XG4gIGxldCB0ID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgdCA9IEdzKG4pICsgdDtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBZcyhlLCBuID0gTm4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBFZShsZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBSdClcbiAgICB0aHJvdyBuZXcgRWUobGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7UnR9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgRWUobGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgRWUobGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHQsIHIgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gbjsgaSA+IDA7IGktLSlcbiAgICB0ID0gZSAlIFBlLCByID0gRG4uY2hhckF0KHQpICsgciwgZSA9IChlIC0gdCkgLyBQZTtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBCcygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIFdzKGUsIG4pIHtcbiAgY29uc3QgdCA9IHpzKCksIHIgPSBEYXRlLm5vdygpO1xuICByZXR1cm4gWXMociwgTm4pICsgcXMoJHMsIHQpO1xufVxuY29uc3QgTG4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgSHMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHQpID0+IHQuaW5jbHVkZXMoTG4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCBuID0gV3MoKTtcbiAgcmV0dXJuIEpzKG4pLCBuO1xufSwgSnMgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke0xufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHtuLnRvVVRDU3RyaW5nKCl9YDtcbn07XG5mdW5jdGlvbiBLcygpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIilcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIHRyeSB7XG4gICAgY29uc3QgZSA9IHdpbmRvdztcbiAgICBpZiAoZS5uZXh0IHx8IGUuX19ORVhUX0RBVEFfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbmV4dFwiKSlcbiAgICAgIHJldHVybiBcIm5leHRqc1wiO1xuICAgIGlmICh3aW5kb3cuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChyKSA9PiByLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoKHIpID0+IHIuX3JlYWN0Um9vdENvbnRhaW5lcikpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IHQgPSB3aW5kb3c7XG4gICAgcmV0dXJuIHQuVnVlIHx8IHQuX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBacyhlKSB7XG4gIHZhciBuLCB0O1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybiBudWxsO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IHIgPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiAoKG4gPSByLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiBuLnZlcnNpb24pIHx8ICgodCA9IHIuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIik7XG4gICAgICAgIHJldHVybiByID8gci5nZXRBdHRyaWJ1dGUoXCJuZy12ZXJzaW9uXCIpIDogbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIFFzKCkge1xuICBjb25zdCBlID0gS3MoKSwgbiA9IFpzKGUpO1xuICByZXR1cm4geyBmcmFtZXdvcms6IGUsIHZlcnNpb246IG4gfTtcbn1cbmNvbnN0IFR0ID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2NkZS5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMVwiXG4gIC8vIFdlIHVzdWFsbHkgdXNlIGxvY2x4IGZvciBkZXZcbn0sIFhzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBlYSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgVVJMKGUpO1xuICByZXR1cm4gT2JqZWN0LmtleXMoVHQpLmZpbmQoKHIpID0+IG4udG9TdHJpbmcoKS5zdGFydHNXaXRoKFR0W3JdKSkgPz8gXCJkZXZcIjtcbn0sIHRhID0gKGUpID0+IFhzW2VdO1xuY2xhc3MgbmEge1xuICBjb25zdHJ1Y3RvcihuLCB0LCByLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoRnQocy5vcmlnaW4pICE9PSBGdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEuc291cmNlICYmIHMuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBScihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gYSwgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IG4sIHRoaXMuYmFzZVVybCA9IHQsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHIsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCBGdCA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIHJhKGUsIG4pIHtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiBuXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBUcihyKTtcbiAgaWYgKCFGcihyLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiByO1xufVxuY2xhc3Mgb2Ege1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKG4sIHQpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChuLCB0KTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgaWEgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiByIH0gPSBlO1xuICByLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGEgJiYgTXQoXCJhcHBsZV9wYXlcIiwgcywgbiwgdCwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIE10KFwiZ29vZ2xlX3BheVwiLCBzLCBuLCB0LCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0LmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgTXQgPSAoZSwgbiwgdCwgciwgaSkgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiB0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFNlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IFEodC5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogcixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogblxufSksIER0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogSiwgZXJyX186IFggfSA9IEEoXCJvcC1mb3JtXCIpLCBlZSA9IGNsYXNzIGVlIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IENlKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBDZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgQ2UoKSwgdGhpcy5pbml0Rmxvd3MgPSBOcygpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5jcmVhdGVFbGVtZW50KEsuQ0RFX0JSSURHRSk7XG4gICAgICAgIGkubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGkubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oaS5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgIH0pLCBpLm1vdW50KFwiYm9keVwiKSwgSihcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBKKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIEooXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IER0XG4gICAgICAgIH0pO1xuICAgICAgICBKKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBKKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRHRcbiAgICAgICAgfSk7XG4gICAgICAgIEooXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IHBpKGEsIHRoaXMuZGV2aWNlVG9rZW4pLCBKKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBjID0gZWUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBzLFxuICAgICAgICAgIGEsXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChjKSwgaWEodGhpcy5pbml0Rmxvd3MsIGMsIHRoaXMuZm9ybUNhbGxiYWNrcyksIEooXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IERzKHRoaXMuaW5pdEZsb3dzLCBjLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChzLnRvdGFsQW1vdW50QXRvbXMsIHMuY3VycmVuY3kpLCBKKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIGgoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgY29uc3QgcyA9IEcoaSk7XG4gICAgICAgIFgoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIHMpLCBoKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogc1xuICAgICAgICB9KSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihzKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICFzIHx8IHMudHlwZSA9PT0gSy5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gaSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoaSksIGgoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoaSksIGkpLCBoKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChpLCBzID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBhID0gQm4ucGFyc2UoaSksIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBsID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgYy5uYW1lID0gYCR7YX0tZWxlbWVudGA7XG4gICAgICBjb25zdCB1ID0gbmV3IFVSTChgL2FwcC92MS8ke2MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gdS5zZWFyY2ggPSBsLnRvU3RyaW5nKCksIGMuc3JjID0gdS5ocmVmLCBjLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBjLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYSwgYyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChpLCBzKSA9PiB7XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICB0eXBlOiBpLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGMpID0+IHtcbiAgICAgICAgICB2YXIgbDtcbiAgICAgICAgICAobCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYykpID09IG51bGwgfHwgbC5hcHBlbmRDaGlsZChzKSwgaChcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBhLnR5cGUsIG5vZGU6IGEubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbSy5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbSy5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW0suQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtLLkNBUkRfQ1ZDXTogdm9pZCAwLFxuICAgICAgICBbSy5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbaV0gPSBhLCBhO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChpKSA9PiB7XG4gICAgICBjb25zdCBzID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIHMuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgcy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBpLnN0eWxlcyAmJiBzLmFwcGVuZChcInN0eWxlc1wiLCBJcihpLnN0eWxlcykpLCBzLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBzO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChpKSA9PiB7XG4gICAgICByYShpLm5vZGUpLnRoZW4oKHMpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGkudHlwZSwgcyksICF0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgJiYgaS50eXBlID09PSBLLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChzKTtcbiAgICAgIH0pLmNhdGNoKChzKSA9PiBYKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGgoXCJzdWJtaXRfY2FyZFwiKTtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWkpIHtcbiAgICAgICAgWChcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFIuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTZShpLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoaS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgWChcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiAkLmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6ICQuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogJC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiAkLmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9LCBhID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2MsIGxdKSA9PiAoe1xuICAgICAgICBuYW1lOiBzW2NdID8/IGMsXG4gICAgICAgIC4uLmwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gaChcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsIHtcbiAgICAgICAgYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kczogYVxuICAgICAgfSksIGE7XG4gICAgfSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gKGksIHMpID0+IHtcbiAgICAgIGgoXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHtcbiAgICAgICAgbWV0aG9kOiBpLFxuICAgICAgICBzZXR0aW5nczogc1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFhKSB7XG4gICAgICAgIFgoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgY2FzZSAkLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gUi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFNlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGEuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlICQuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFjKSB7XG4gICAgICAgICAgICBYKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3cocyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIFgoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIFgoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3cocyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIFgoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQubG9vcENyeXB0bzpcbiAgICAgICAgICByZXR1cm4gUi5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBhLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTZShhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3J5cHRvXCIsIFwibG9vcFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoYS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHFlKGkpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBKKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGkgJiYgaS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCBlaSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBoKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhpKTtcbiAgICB9LCBlZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMjRcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gbi5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLm4sIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBydC5mcm9tT2JqZWN0KG4pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IG4uZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgb2EoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IEhzKCksIFhvKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHQsIHZlcnNpb246IHIgfSA9IFFzKCk7XG4gICAgbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgbnQuc2V0KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgIG1ldHJpY3NCYXNlVXJsOiB0YShlYSh0aGlzLmJhc2VVcmwpKSxcbiAgICAgIGZyYW1ld29yazogdCxcbiAgICAgIGZyYW1ld29ya1ZlcnNpb246IHIsXG4gICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgfSksIGgoXCJmb3JtX2luaXRcIiksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IG5hKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuZWUub2pzRmxvd3MgPSBSLCBlZS5hc3NpZ25Bc1NpbmdsZXRvbiA9IChuKSA9PiB7XG4gIGlmIChlZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gbjtcbn0sIGVlLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBlZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKG4sIHQsIHIsIGkpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IG4uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChuLmJhc2VVcmwgPz8gb3QpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHQuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IHIsXG4gIGN1c3RvbUluaXRQYXJhbXM6IG4uY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgTnQgPSBlZTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7RmUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtGZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke0ZlLnJlZC5ib2xkKFwib2pzL1wiKX0ke0ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAobmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb250ZXh0Lm1ldHJpY3NCYXNlVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBtZXRyaWNzUXVldWUgPSBuZXcgTWV0cmljc1F1ZXVlKCk7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCAoKSA9PiB7XG4gICAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICByZXR1cm4gUGF5SW5TdGF0ZTI7XG59KShQYXlJblN0YXRlIHx8IHt9KTtcblxuY29uc3QgTE9PUF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgY29uZmlnOiBudWxsLFxuICB3aWRnZXQ6IG51bGxcbn07XG56JDEub2JqZWN0KHtcbiAgW1wibG9vcEZpcnN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BMYXN0TmFtZVwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxvb3BFbWFpbFwiXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdOiBPcHRpb25hbFN0cmluZ1xufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgQ0FURUdPUllfRVJST1IgPSBcImVycm9yXCI7XG5jb25zdCBDQVRFR09SWV9ERUJVRyA9IFwiZGVidWdcIjtcbmNvbnN0IF9lcnJvciA9IGNvbnNvbGUuZXJyb3I7XG5jb25zdCBfZGVidWcgPSBjb25zb2xlLmRlYnVnO1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgd2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MgPSBbXTtcbn1cbmNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gIF9lcnJvci5jYWxsKGNvbnNvbGUsIC4uLmFyZ3MpO1xuICB3aW5kb3cuX29qc19jb25zb2xlX2NhbGxiYWNrcy5mb3JFYWNoKChjYikgPT4gY2IoQ0FURUdPUllfRVJST1IsIC4uLmFyZ3MpKTtcbn07XG5jb25zb2xlLmRlYnVnID0gZnVuY3Rpb24oLi4uYXJncykge1xuICBfZGVidWcuY2FsbChjb25zb2xlLCAuLi5hcmdzKTtcbiAgd2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MuZm9yRWFjaCgoY2IpID0+IGNiKENBVEVHT1JZX0RFQlVHLCAuLi5hcmdzKSk7XG59O1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKE50LmdldEluc3RhbmNlKCkpIHtcbiAgICBOdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gTnQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgTnQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIFBheUluU3RhdGUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxHQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBQ0EsU0FBUztBQUNYLENBQUMsR0FFS2MsS0FBcUIsTUFBTTtBQUMvQixRQUFNQyxJQUFVZCxHQUFXWSxFQUFlO0FBQzFDLE1BQUksQ0FBQ0U7QUFDSCxVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFFckYsU0FBT0E7QUFDVCxHQUVNQyxLQUFLLDhCQUE4QkMsS0FBS1IsRUFBSSxPQUFPO0FBQUEsRUFDdkQsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDLEdBQUdTLEtBQUtULEVBQUksTUFBTVEsRUFBRSxHQUFHRSxLQUFLVixFQUFJLE9B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LEVBQVUsV0FBVyxDQUFDRixLQUMzQkosRUFBZU4sR0FBYVksRUFBVSxPQUFPO0FBQUEsRUFDL0MsR0FBRyxDQUFDRixDQUFTLENBQUMsR0FDVixDQUFDTDtBQUNILG1CQUFRLE1BQU0sa0RBQWtELEdBQ3pDLGdCQUFBVixFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBRXRDLFFBQU15QixJQUFNLElBQUksSUFBSSxXQUFXWCxDQUFPLGFBQWFGLENBQU87QUFDMUQsU0FBQWEsRUFBSSxTQUFTRixHQUNVLGdCQUFBdkI7QUFBQSxJQUNyQjtBQUFBLElBQ0E7QUFBQSxNQUNFLElBQUksT0FBT2MsQ0FBTztBQUFBLE1BQ2xCLE1BQU0sR0FBR0EsQ0FBTztBQUFBLE1BQ2hCLFdBQVc7QUFBQSxNQUNYLEtBQUtXLEVBQUksU0FBUztBQUFBLE1BQ2xCLE9BQU9IO0FBQUEsTUFDUCxLQUFLTDtBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQ0YsR0FFTVMsS0FBaUIsQ0FBQyxFQUFFLFFBQUFwQixFQUFPLE1BQ1IsZ0JBQUFOLEVBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixTQUFTLENBQUMsR0FHdEZDLEtBQWMsQ0FBQyxFQUFFLFFBQUF0QixFQUFPLE1BQ0wsZ0JBQUFOLEVBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixLQUFLLENBQUMsR0FHbEZFLEtBQW9CLENBQUMsRUFBRSxRQUFBdkIsRUFBTyxNQUNYLGdCQUFBTixFQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGRyxLQUFvQixDQUFDLEVBQUUsUUFBQXhCLEVBQU8sTUFDWCxnQkFBQU4sRUFBSUksSUFBYyxFQUFFLFFBQUFFLEdBQVEsYUFBYXFCLEdBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgIkZlIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJvdCIsICJVbiIsICJqbiIsICJ4biIsICIkbiIsICJHbiIsICJYZSIsICJuIiwgInpuIiwgIlZuIiwgInFuIiwgIkciLCAiWW4iLCAidCIsICJyIiwgIkkiLCAiayIsICJVIiwgInAiLCAiT3QiLCAiVXQiLCAianQiLCAieHQiLCAiSyIsICJCbiIsICJHZSIsICJXbiIsICJCIiwgIkhuIiwgIkpuIiwgIktuIiwgIlpuIiwgIlFuIiwgIlhuIiwgImVyIiwgInRyIiwgIm5yIiwgInJyIiwgIm9yIiwgImlyIiwgIkFlIiwgInNyIiwgImFyIiwgImNyIiwgImxyIiwgInVyIiwgImRyIiwgInByIiwgIml0IiwgIm1yIiwgInlyIiwgImZyIiwgIlQiLCAiX3IiLCAiaHIiLCAiJHQiLCAiZ3IiLCAid3IiLCAiR3QiLCAiYnIiLCAidnIiLCAiRXIiLCAiemUiLCAicHQiLCAic3QiLCAiQ3IiLCAiU3IiLCAicyIsICJhIiwgIlByIiwgImtyIiwgIkFyIiwgImkiLCAiYyIsICJJciIsICJRIiwgIlJyIiwgIlRyIiwgIkZyIiwgIk1yIiwgInp0IiwgIlZ0IiwgIkRyIiwgIk5yIiwgIl9lIiwgIkxyIiwgIk9yIiwgInF0IiwgIlVyIiwgImpyIiwgInhyIiwgIm10IiwgIll0IiwgInl0IiwgIkJ0IiwgIiRyIiwgIkdyIiwgIld0IiwgInpyIiwgIlZyIiwgInFyIiwgIllyIiwgIkJyIiwgIkh0IiwgIldyIiwgIkhyIiwgIkpyIiwgIktyIiwgIlpyIiwgIlFyIiwgIlhyIiwgImVvIiwgInRvIiwgIm5lIiwgImgiLCAibG4iLCAidWUiLCAiQSIsICJldCIsICJyZSIsICJubyIsICJmIiwgIkp0IiwgInllIiwgIlVlIiwgImplIiwgIm1lIiwgInJvIiwgInkiLCAibSIsICJnIiwgIkUiLCAidyIsICJfIiwgIm9vIiwgIlZlIiwgIktlIiwgInhlIiwgIkllIiwgImZ0IiwgIkt0IiwgIlp0IiwgIlF0IiwgIlh0IiwgImVuIiwgIl90IiwgIk5lIiwgImF0IiwgImNvIiwgInR0IiwgImlvIiwgIlplIiwgInNvIiwgIk1lIiwgImFvIiwgImN0IiwgImxvIiwgInVvIiwgInRlIiwgIm1vIiwgImh0IiwgInBvIiwgInlvIiwgImZvIiwgIl9vIiwgImhvIiwgImdvIiwgInRuIiwgImd0IiwgIndvIiwgImJvIiwgInd0IiwgInZvIiwgImJ0IiwgIkVvIiwgIkNvIiwgIlNvIiwgIlBvIiwgImtvIiwgIkFvIiwgIklvIiwgIlJvIiwgIlRvIiwgIkZvIiwgIk1vIiwgIkRvIiwgIk5vIiwgIkxvIiwgIk9vIiwgIlVvIiwgIm5uIiwgImpvIiwgInhvIiwgIiRvIiwgIkdvIiwgInpvIiwgIlZvIiwgInFvIiwgIllvIiwgIkJvIiwgIldvIiwgIkhvIiwgIkMiLCAiUCIsICJDZSIsICJxZSIsICJudCIsICJ2dCIsICJKbyIsICJLbyIsICJabyIsICJEZSIsICJRbyIsICJybiIsICJvbiIsICJzbiIsICJYbyIsICJlaSIsICJhbiIsICJOIiwgIm5pIiwgInRpIiwgInJpIiwgIkQiLCAiaGUiLCAib2kiLCAiaWkiLCAicSIsICJzaSIsICJhaSIsICJjaSIsICJnZSIsICJsaSIsICJFdCIsICJ1aSIsICJsdCIsICJjbiIsICJkaSIsICJ1dCIsICJwaSIsICJ1biIsICJkYSIsICJtaSIsICJSZSIsICJXIiwgInlpIiwgIlllIiwgImRuIiwgInBuIiwgIm9lIiwgImZpIiwgIkN0IiwgIkYiLCAiX2kiLCAiaGkiLCAiZ2kiLCAid2kiLCAiUiIsICJFaSIsICJiaSIsICJ2aSIsICJkIiwgImwiLCAidSIsICJDaSIsICJtbiIsICJTaSIsICJQaSIsICJCZSIsICJ5biIsICJraSIsICJBaSIsICJJaSIsICJmbiIsICJSaSIsICJUaSIsICJfbiIsICJGaSIsICJNaSIsICJEaSIsICJOaSIsICJkdCIsICJMaSIsICJPaSIsICJVaSIsICJqaSIsICJ4aSIsICJobiIsICJnbiIsICIkaSIsICJHaSIsICJmZSIsICJrZSIsICJ6aSIsICJ3biIsICJWaSIsICJxaSIsICJTdCIsICJZaSIsICJCaSIsICJXaSIsICJIaSIsICJKaSIsICJTIiwgIlB0IiwgImt0IiwgIktpIiwgInRzIiwgImVzIiwgIlppIiwgIlFpIiwgIlhpIiwgIlkiLCAiYm4iLCAiTyIsICJucyIsICJycyIsICJvcyIsICJTZSIsICJpcyIsICJhcyIsICJzcyIsICJjcyIsICJIIiwgIkF0IiwgImxzIiwgInVzIiwgIngiLCAiZGUiLCAidiIsICJMIiwgIldlIiwgIlFlIiwgIkVuIiwgIkhlIiwgImRzIiwgIkNuIiwgIlYiLCAicGUiLCAicHMiLCAibXMiLCAiT24iLCAiVGUiLCAiaWUiLCAiSmUiLCAic2UiLCAid2UiLCAiU24iLCAiUG4iLCAia24iLCAiQW4iLCAiTGUiLCAieXMiLCAiZnMiLCAiX3MiLCAiYmUiLCAiSW4iLCAiaHMiLCAiZ3MiLCAid3MiLCAiYnMiLCAiaiIsICJSbiIsICJ2cyIsICJFcyIsICJDcyIsICJTcyIsICJQcyIsICJrcyIsICJUbiIsICJGbiIsICJPZSIsICJNbiIsICJBcyIsICJJcyIsICJjZSIsICJ2ZSIsICJScyIsICJUcyIsICJGcyIsICJNcyIsICJhZSIsICJEcyIsICJOcyIsICJMcyIsICJ6IiwgIkl0IiwgIloiLCAicnQiLCAiT3MiLCAiVXMiLCAianMiLCAieHMiLCAiRG4iLCAiUGUiLCAiJHMiLCAiTm4iLCAiUnQiLCAibGUiLCAiRWUiLCAiR3MiLCAienMiLCAiVnMiLCAiQnMiLCAicXMiLCAiWXMiLCAiV3MiLCAiTG4iLCAiSHMiLCAiSnMiLCAiS3MiLCAiWnMiLCAiUXMiLCAiVHQiLCAiWHMiLCAiZWEiLCAidGEiLCAibmEiLCAiRnQiLCAicmEiLCAib2EiLCAiaWEiLCAiTXQiLCAiRHQiLCAiSiIsICJYIiwgImVlIiwgIk50IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJiIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgInZlcmIiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJmcm9tIiwgInBhY2siLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAieiQxIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJSZXF1aXJlZFN0cmluZyIsICJGaWVsZE5hbWUiLCAiT3B0aW9uYWxTdHJpbmciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIkNBVEVHT1JZX0VSUk9SIiwgIkNBVEVHT1JZX0RFQlVHIiwgIl9lcnJvciIsICJfZGVidWciLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgInByb3BzIiwgImZvcm1DYWxsYmFja3MiLCAiTnQiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJ1c2VTdGF0ZSIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJ1c2VDYWxsYmFjayIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJ1c2VFZmZlY3QiLCAiZm9ybSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAianN4IiwgIkZyYWdtZW50IiwgImNoaWxkcmVuUHJvcHMiLCAiRWxlbWVudHNDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJzdHlsZXMiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1cmwiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=
6495
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBGZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBvdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgVW4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBqbiA9IHokMS5hcnJheShVbiksIHhuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksICRuID0geiQxLmFycmF5KHhuKSwgR24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFhlID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBHbltuXSA/PyBlO1xufSwgVm4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIHpuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gWGUoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7WGUodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgcW4gPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChWbihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGpuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gem4obikgOiAkbi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IHFuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFhlKGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIFluID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyICQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlKSkoJCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSgkKTsgY29uc3QgSSA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgayA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5BRERSRVNTID0gXCJhZGRyZXNzXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgT3QgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBVdCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoVXQgfHwge30pO1xuY29uc3QganQgPSB6JDEubmF0aXZlRW51bShVdCksIHh0ID0geiQxLnVuaW9uKFtPdCwganRdKTtcbnZhciBLID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRCA9IFwiY2FyZFwiLCBlLkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCBlLkNERV9CUklER0UgPSBcImNkZS1icmlkZ2VcIiwgZSkpKEsgfHwge30pO1xuY29uc3QgQm4gPSB6JDEubmF0aXZlRW51bShLKSwgR2UgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFUoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgV24gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogayxcbiAgZXhwaXJ5OiBrLFxuICBjdmM6IGtcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogayxcbiAgY29sb3I6IGssXG4gIGZvbnRGYW1pbHk6IGssXG4gIGZvbnRTaXplOiBrLFxuICBmb250V2VpZ2h0OiBrLFxuICBtYXJnaW46IGssXG4gIHBhZGRpbmc6IGssXG4gIGxldHRlclNwYWNpbmc6IGssXG4gIGxpbmVIZWlnaHQ6IGssXG4gIGhpZGVJY29uOiBrXG59KTtcbmNvbnN0IEIgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgSG4gPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBKbiA9IHokMS5vYmplY3QoeyB0eXBlOiBIbiB9KSwgS24gPSBCLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgWm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogS24sXG4gIGVsZW1lbnRUeXBlOiBqdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgUW4gPSBCLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBYbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBRbixcbiAgbWVzc2FnZTogSSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGVyID0gQi5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCB0ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBlcixcbiAgZWxlbWVudFR5cGU6IHh0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgbnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogSVxufSksIHJyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEIuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IEksXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IGssXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShHZSlcbn0pLCBvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgaXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIEFlID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogSSxcbiAgbGFzdE5hbWU6IEksXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBrXG59KSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBrLFxuICBsYXN0TmFtZTogayxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IGssXG4gIGFkZHJlc3M6IGssXG4gIGNpdHk6IGssXG4gIHN0YXRlOiBrXG59KSwgYXIgPSBCLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIGNyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGFyLFxuICBzZXNzaW9uSWQ6IEksXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogR2UsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDoga1xufSkuZXh0ZW5kKEFlLnNoYXBlKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoQi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCB1ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChCLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgZHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEpuLFxuICBabixcbiAgWG4sXG4gIHRyLFxuICBucixcbiAgcnIsXG4gIGNyLFxuICBscixcbiAgdXIsXG4gIG9yLFxuICBpclxuXSksIHByID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IGRyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogSVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IFUoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGl0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IFUoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHlyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShtcilcbn0pLCBmciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgeXJcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEdlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShUIHx8IHt9KTtcbmNvbnN0IF9yID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgaHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCAkdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogVSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBnciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgd3IgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoV24pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogVShpdCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogVSh6JDEuYXJyYXkoJHQpKVxufSksIEd0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBPdC5wYXJzZSh0KTtcbiAgICAgIEFycmF5LmlzQXJyYXkocikgPyBuW2ldID0gciA6IEFycmF5LmlzQXJyYXkoci5fZXJyb3JzKSAmJiAobltpXSA9IHIuX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgbjtcbn0sIGJyID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgdnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgRXIgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBWZSA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHQgPSAwOyB0IDwgMTA7IHQrKylcbiAgICBwdCgpIHx8IGF3YWl0IHN0KDUwMCk7XG4gIGlmICghcHQoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBDciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBWZShlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogdC5lbGVtZW50cyhuKSxcbiAgICBzdHJpcGU6IHRcbiAgfTtcbn0sIFNyID0gYXN5bmMgKGUsIG4sIHQsIHIsIGkpID0+IHtcbiAgY29uc3QgcyA9IGF3YWl0IFZlKGUpLCBhID0gRXJbdC50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBzLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogbixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgc3QgPSAoZSkgPT4gbmV3IFByb21pc2UoKG4pID0+IHtcbiAgc2V0VGltZW91dChuLCBlKTtcbn0pLCBwdCA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBQciA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgobiwgdCkgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIHIpLCBuKHIpO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIHIpO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHQobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHQocik7XG4gIH1cbn0pLCBrciA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IFZlKGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogbi5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAoci5lcnJvcilcbiAgICB0aHJvdyBuLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtyLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiBuLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgcjtcbn0sIEFyID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IHQgPSBhd2FpdCAoYXdhaXQgVmUoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgciA9IChpID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAociA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgdC5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgciA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IHQuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gdC5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgSXIgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIFEgPSAoZSwgbikgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgUnIgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwci5wYXJzZShlKTtcbiAgfSBjYXRjaCAobikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIG4pLCBuO1xuICB9XG59LCBUciA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IHsgdHlwZTogXCJwaW5nXCIgfSwgdCA9IGF3YWl0IGUuc2VuZChuKTtcbiAgICBpZiAodCAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIG4pLCAhMTtcbiAgfVxufSwgRnIgPSAoZSwgbikgPT4gISFlICYmIG4sIGIgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBNciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBWdCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogYih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogYih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogYih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGIoeiQxLm51bWJlcigpKVxufSksIHp0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBiKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogYih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgRHIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgTnIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogYihEcilcbn0pLCBfZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogYih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBMciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGIoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBiKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KExyKSxcbiAgdHJpYWxfc3RhcnQ6IGIoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBiKHokMS5zdHJpbmcoKSlcbn0pLCBxdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgVXIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShxdCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBqciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IFZ0XG59KSwgeHIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoanIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShVciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkocXQpXG59KSwgbXQgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KE9yKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheSh4ciksXG4gIHByb2Nlc3NvcnNfdXNlZDogYih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBZdCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBtdCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBiKG10KSxcbiAgY291cG9uczogeiQxLmFycmF5KFZ0KVxufSksIHl0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IGIoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHp0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IE5yLFxuICBzdWJzX3ByZXZpZXc6IGIoWXQpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShfZSlcbn0pLCBCdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHl0LnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoeXQuc2hhcGUpXG5dKSwgJHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtCdCwgJHIsIEdyXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoenQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBiKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgV3QgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFZyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShWcik7XG5jb25zdCB6ciA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIHFyID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBZciA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkocXIpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgQnIgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBiKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBZci5vcHRpb25hbCgpXG59KS5leHRlbmQoenIuc2hhcGUpLmV4dGVuZChCci5zaGFwZSk7XG5jb25zdCBIdCA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBzcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBfZVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBBZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IF9lLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFdyID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogYih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IGIoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IGIoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogYih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogYih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBiKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBiKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGIoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBiKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IGIoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IGIoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBiKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogYih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBiKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IGIoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSHIgPSB6JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogX2UsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgSnIgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IGIoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgS3IgPSB6JDEub2JqZWN0KHt9KSwgWnIgPSAoZSkgPT4gZS5yZWR1Y2UoKG4sIHQpID0+IG4gKyB0LCAwKTtcbmZ1bmN0aW9uIFFyKGUsIG4pIHtcbiAgdmFyIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHQgPyB0KGUsIG4pIDogZS5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gWHIoZSwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHQgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgdCAmJiB0KGUsIG4pO1xufVxudmFyIGVvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGkuX19wcm90b19fID0gcztcbiAgICB9IHx8IGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIGZvciAodmFyIGEgaW4gcylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGEpICYmIChpW2FdID0gc1thXSk7XG4gICAgfSwgZSh0LCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKG4sIHQpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgdG8gPSBmdW5jdGlvbihlKSB7XG4gIGVvKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgaSA9IHRoaXMuY29uc3RydWN0b3IsIHMgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogaS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIFFyKHMsIGkucHJvdG90eXBlKSwgWHIocyksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNvbnN0IG5lID0gKGUpID0+IGFzeW5jIChuKSA9PiB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIChyID0gKHQgPSBuLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCByLmNhbGwodCksIGgoXCJjaGVja291dF9zdGFydGVkXCIpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBlKG4pO1xuICAgIGlmIChoKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAuLi5pXG4gICAgfSksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgIGVsc2UgaWYgKGkubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICBpLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICBpLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgaS5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGNvbnN0IHMgPSBHKGkpLCBhID0gYXdhaXQgbG4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGEpLCBoKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYSB9KTtcbiAgfVxufSwgdWUgPSAoZSkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZShuKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHsgZXJyX186IHIgfSA9IEEoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGkgPSBHKHQpLCBzID0gYXdhaXQgbG4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIHJldHVybiByKHMsIGksIHQpLCBoKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBpLCBlcnJvckNvZGU6IHMgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGksIGVycm9yQ29kZTogcywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBBID0gKGUpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7RmUuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5yKTtcbiAgfSwgdCA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtGZS5yZWQuYm9sZChcIm9qcy9cIil9JHtGZS5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IHQsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IHRcbiAgfTtcbn07XG52YXIgZXQgPSBmdW5jdGlvbihlLCBuKSB7XG4gIHJldHVybiBldCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB0Ll9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGkgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGkpICYmICh0W2ldID0gcltpXSk7XG4gIH0sIGV0KGUsIG4pO1xufTtcbmZ1bmN0aW9uIHJlKGUsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXQoZSwgbik7XG4gIGZ1bmN0aW9uIHQoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6ICh0LnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgdCgpKTtcbn1cbmZ1bmN0aW9uIG5vKGUsIG4sIHQsIHIpIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiB0ID8gcyA6IG5ldyB0KGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAodCB8fCAodCA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgYShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBzKGQudmFsdWUpIDogaShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSnQoZSwgbikge1xuICB2YXIgdCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgdVswXSAmJiAodCA9IDApKSwgdDsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBpICYmIChzID0gdVswXSAmIDIgPyBpLnJldHVybiA6IHVbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgdVsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAodSA9IFt1WzBdICYgMiwgcy52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHQubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHQubGFiZWwrKywgaSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IHQudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHQgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghcyB8fCB1WzFdID4gc1swXSAmJiB1WzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHQubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICB0LmxhYmVsID0gc1sxXSwgcyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgdC5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSBzWzJdLCB0Lm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgdC5vcHMucG9wKCksIHQudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwoZSwgdCk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24geWUoZSkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgdCA9IG4gJiYgZVtuXSwgciA9IDA7XG4gIGlmICh0KSByZXR1cm4gdC5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIHIgPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbcisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIFVlKGUsIG4pIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghdCkgcmV0dXJuIGU7XG4gIHZhciByID0gdC5jYWxsKGUpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShpID0gci5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmICh0ID0gci5yZXR1cm4pICYmIHQuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gamUoZSwgbiwgdCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGkgPSBuLmxlbmd0aCwgczsgciA8IGk7IHIrKylcbiAgICAocyB8fCAhKHIgaW4gbikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBzW3JdID0gbltyXSk7XG4gIHJldHVybiBlLmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIG1lKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBtZShlKTtcbn1cbmZ1bmN0aW9uIHJvKGUsIG4sIHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0LmFwcGx5KGUsIG4gfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYSh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobSkudGhlbih5LCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgbSkge1xuICAgIHJbeV0gJiYgKGlbeV0gPSBmdW5jdGlvbihnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oRSwgdykge1xuICAgICAgICBzLnB1c2goW3ksIGcsIEUsIHddKSA+IDEgfHwgbCh5LCBnKTtcbiAgICAgIH0pO1xuICAgIH0sIG0gJiYgKGlbeV0gPSBtKGlbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShtKSk7XG4gICAgfSBjYXRjaCAoZykge1xuICAgICAgXyhzWzBdWzNdLCBnKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIG1lID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBmKSA6IF8oc1swXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZih5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIF8oeSwgbSkge1xuICAgIHkobSksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgbChzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gb28oZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCB0O1xuICByZXR1cm4gbiA/IG4uY2FsbChlKSA6IChlID0gdHlwZW9mIHllID09IFwiZnVuY3Rpb25cIiA/IHllKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHQgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdCk7XG4gIGZ1bmN0aW9uIHIocykge1xuICAgIHRbc10gPSBlW3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGEgPSBlW3NdKGEpLCBpKGMsIGwsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIHMoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gTShlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiB6ZShlKSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgdCA9IGUobik7XG4gIHJldHVybiB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCB0O1xufVxudmFyIEtlID0gemUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHQgPyB0Lmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyB0Lm1hcChmdW5jdGlvbihyLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24geGUoZSwgbikge1xuICBpZiAoZSkge1xuICAgIHZhciB0ID0gZS5pbmRleE9mKG4pO1xuICAgIDAgPD0gdCAmJiBlLnNwbGljZSh0LCAxKTtcbiAgfVxufVxudmFyIEllID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIHQsIHIsIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0geWUoYSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IGcgfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmICh0ID0gYy5yZXR1cm4pICYmIHQuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChNKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoZykge1xuICAgICAgICAgIHMgPSBnIGluc3RhbmNlb2YgS2UgPyBnLmVycm9ycyA6IFtnXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IHllKGYpLCB5ID0gXy5uZXh0KCk7ICF5LmRvbmU7IHkgPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIG0gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnQobSk7XG4gICAgICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCBnIGluc3RhbmNlb2YgS2UgPyBzID0gamUoamUoW10sIFVlKHMpKSwgVWUoZy5lcnJvcnMpKSA6IHMucHVzaChnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgICByID0geyBlcnJvcjogZyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGkgPSBfLnJldHVybikgJiYgaS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgS2Uocyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQ7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgZnQobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAodCA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gdCA9PT0gbiB8fCBBcnJheS5pc0FycmF5KHQpICYmIHQuaW5jbHVkZXMobik7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheSh0KSA/ICh0LnB1c2gobiksIHQpIDogdCA/IFt0LCBuXSA6IG47XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdCA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHQpICYmIHhlKHQsIG4pO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHQgJiYgeGUodCwgbiksIG4gaW5zdGFuY2VvZiBlICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IGUoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCBlO1xufSgpLCBLdCA9IEllLkVNUFRZO1xuZnVuY3Rpb24gWnQoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIEllIHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIE0oZS5yZW1vdmUpICYmIE0oZS5hZGQpICYmIE0oZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBmdChlKSB7XG4gIE0oZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgUXQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgWHQgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBqZShbZSwgbl0sIFVlKHQpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGVuKGUpIHtcbiAgWHQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF90KCkge1xufVxuZnVuY3Rpb24gTmUoZSkge1xuICBlKCk7XG59XG52YXIgYXQgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCB0ID8gKHIuZGVzdGluYXRpb24gPSB0LCBadCh0KSAmJiB0LmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gY28sIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgciwgaSkge1xuICAgIHJldHVybiBuZXcgdHQodCwgciwgaSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dCh0KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHQpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KEllKSwgaW8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIFplKGUsIG4pIHtcbiAgcmV0dXJuIGlvLmNhbGwoZSwgbik7XG59XG52YXIgc28gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHQubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgTWUocik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICB0LmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBNZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBNZShuKTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICBNZSh0KTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgdHQgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIsIGkpIHtcbiAgICB2YXIgcyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChNKHQpIHx8ICF0KVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogdCA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIFF0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZSh0KSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogdC5uZXh0ICYmIFplKHQubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiB0LmVycm9yICYmIFplKHQuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogdC5jb21wbGV0ZSAmJiBaZSh0LmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgc28oYSksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KGF0KTtcbmZ1bmN0aW9uIE1lKGUpIHtcbiAgZW4oZSk7XG59XG5mdW5jdGlvbiBhbyhlKSB7XG4gIHRocm93IGU7XG59XG52YXIgY28gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IF90LFxuICBlcnJvcjogYW8sXG4gIGNvbXBsZXRlOiBfdFxufSwgY3QgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBsbyhlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gdW8oZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBsbyA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24ociwgaSkge1xuICAgICAgcmV0dXJuIGkocik7XG4gICAgfSwgdCk7XG4gIH07XG59XG52YXIgdGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgbiAmJiAodGhpcy5fc3Vic2NyaWJlID0gbik7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQub3BlcmF0b3IgPSBuLCB0O1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gbW8obikgPyBuIDogbmV3IHR0KG4sIHQsIHIpO1xuICAgIHJldHVybiBOZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIGwgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShuKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICBuLmVycm9yKHQpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKG4sIHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBodCh0KSwgbmV3IHQoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgdHQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG4oYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIHIuc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0O1xuICAgIHJldHVybiAodCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnN1YnNjcmliZShuKTtcbiAgfSwgZS5wcm90b3R5cGVbY3RdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIHQgPSAwOyB0IDwgYXJndW1lbnRzLmxlbmd0aDsgdCsrKVxuICAgICAgblt0XSA9IGFyZ3VtZW50c1t0XTtcbiAgICByZXR1cm4gdW8obikodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgcmV0dXJuIG4gPSBodChuKSwgbmV3IG4oZnVuY3Rpb24ociwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICB0LnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHIocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIG5ldyBlKG4pO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gaHQoZSkge1xuICB2YXIgbjtcbiAgcmV0dXJuIChuID0gZSA/PyBRdC5Qcm9taXNlKSAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgPyBuIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIHBvKGUpIHtcbiAgcmV0dXJuIGUgJiYgTShlLm5leHQpICYmIE0oZS5lcnJvcikgJiYgTShlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIG1vKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIGF0IHx8IHBvKGUpICYmIFp0KGUpO1xufVxuZnVuY3Rpb24geW8oZSkge1xuICByZXR1cm4gTShlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gZm8oZSkge1xuICByZXR1cm4gZnVuY3Rpb24obikge1xuICAgIGlmICh5byhuKSlcbiAgICAgIHJldHVybiBuLmxpZnQoZnVuY3Rpb24odCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHQsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gX28oZSwgbiwgdCwgciwgaSkge1xuICByZXR1cm4gbmV3IGhvKGUsIG4sIHQsIHIsIGkpO1xufVxudmFyIGhvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgdCkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gYSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSByID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgdC5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHQuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHQuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdDtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgciA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIXIgJiYgKCh0ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgfHwgdC5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIG47XG59KGF0KSwgZ28gPSB6ZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHRuID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbigpIHtcbiAgICB2YXIgdCA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICExLCB0LmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB0Lm9ic2VydmVycyA9IFtdLCB0LmlzU3RvcHBlZCA9ICExLCB0Lmhhc0Vycm9yID0gITEsIHQudGhyb3duRXJyb3IgPSBudWxsLCB0O1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gbmV3IGd0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiByLm9wZXJhdG9yID0gdCwgcjtcbiAgfSwgbi5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgZ28oKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgTmUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmN1cnJlbnRPYnNlcnZlcnMgfHwgKHIuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oci5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0geWUoci5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIE5lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuaGFzRXJyb3IgPSByLmlzU3RvcHBlZCA9ICEwLCByLnRocm93bkVycm9yID0gdDtcbiAgICAgICAgZm9yICh2YXIgaSA9IHIub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcih0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXM7XG4gICAgTmUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodC5fdGhyb3dJZkNsb3NlZCgpLCAhdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgdC5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgciA9IHQub2JzZXJ2ZXJzOyByLmxlbmd0aDsgKVxuICAgICAgICAgIHIuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAoKHQgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG4ucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXModCksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHQpO1xuICB9LCBuLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBLdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2godCksIG5ldyBJZShmdW5jdGlvbigpIHtcbiAgICAgIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHhlKGMsIHQpO1xuICAgIH0pKTtcbiAgfSwgbi5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLCBpID0gci5oYXNFcnJvciwgcyA9IHIudGhyb3duRXJyb3IsIGEgPSByLmlzU3RvcHBlZDtcbiAgICBpID8gdC5lcnJvcihzKSA6IGEgJiYgdC5jb21wbGV0ZSgpO1xuICB9LCBuLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IG5ldyB0ZSgpO1xuICAgIHJldHVybiB0LnNvdXJjZSA9IHRoaXMsIHQ7XG4gIH0sIG4uY3JlYXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiBuZXcgZ3QodCwgcik7XG4gIH0sIG47XG59KHRlKSwgZ3QgPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gdCwgaS5zb3VyY2UgPSByLCBpO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwociwgdCk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIChpID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKHIsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByO1xuICAgIChyID0gKHQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHQpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBpO1xuICAgIHJldHVybiAoaSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogS3Q7XG4gIH0sIG47XG59KHRuKSwgd28gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIGJvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oSWUpLCB3dCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgamUoW2UsIG5dLCBVZSh0KSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHZvID0gZnVuY3Rpb24oZSkge1xuICByZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSB0LCBpLndvcmsgPSByLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSB0O1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbih0LCByLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCB3dC5zZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCwgdGhpcyksIGkpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHQsIHIsIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgd3QuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUodCwgcik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHQpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciA9IHQuaWQsIGkgPSB0LnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCB4ZShzLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oYm8pLCBidCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4sIHQpIHtcbiAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gdDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCB0LCByKSB7XG4gICAgcmV0dXJuIHQgPT09IHZvaWQgMCAmJiAodCA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIHQpO1xuICB9LCBlLm5vdyA9IHdvLm5vdywgZTtcbn0oKSwgRW8gPSBmdW5jdGlvbihlKSB7XG4gIHJlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBidC5ub3cpO1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMsIHQsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSB0LmV4ZWN1dGUodC5zdGF0ZSwgdC5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlICh0ID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyB0ID0gci5zaGlmdCgpOyApXG4gICAgICAgIHQudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCBuO1xufShidCksIENvID0gbmV3IEVvKHZvKSwgU28gPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBQbyhlKSB7XG4gIHJldHVybiBNKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBrbyhlKSB7XG4gIHJldHVybiBNKGVbY3RdKTtcbn1cbmZ1bmN0aW9uIEFvKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSW8oZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIFJvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFRvID0gUm8oKTtcbmZ1bmN0aW9uIEZvKGUpIHtcbiAgcmV0dXJuIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZVtUb10pO1xufVxuZnVuY3Rpb24gTW8oZSkge1xuICByZXR1cm4gcm8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgaSwgcztcbiAgICByZXR1cm4gSnQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB0ID0gZS5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgbWUodC5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gYS5zZW50KCksIGkgPSByLnZhbHVlLCBzID0gci5kb25lLCBzID8gWzQsIG1lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIG1lKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiB0LnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIERvKGUpIHtcbiAgcmV0dXJuIE0oZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gTm8oZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIHRlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKGtvKGUpKVxuICAgICAgcmV0dXJuIExvKGUpO1xuICAgIGlmIChTbyhlKSlcbiAgICAgIHJldHVybiBPbyhlKTtcbiAgICBpZiAoUG8oZSkpXG4gICAgICByZXR1cm4gVW8oZSk7XG4gICAgaWYgKEFvKGUpKVxuICAgICAgcmV0dXJuIG5uKGUpO1xuICAgIGlmIChGbyhlKSlcbiAgICAgIHJldHVybiBqbyhlKTtcbiAgICBpZiAoRG8oZSkpXG4gICAgICByZXR1cm4geG8oZSk7XG4gIH1cbiAgdGhyb3cgSW8oZSk7XG59XG5mdW5jdGlvbiBMbyhlKSB7XG4gIHJldHVybiBuZXcgdGUoZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gZVtjdF0oKTtcbiAgICBpZiAoTSh0LnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gdC5zdWJzY3JpYmUobik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9vKGUpIHtcbiAgcmV0dXJuIG5ldyB0ZShmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCBlLmxlbmd0aCAmJiAhbi5jbG9zZWQ7IHQrKylcbiAgICAgIG4ubmV4dChlW3RdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gVW8oZSkge1xuICByZXR1cm4gbmV3IHRlKGZ1bmN0aW9uKG4pIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24odCkge1xuICAgICAgbi5jbG9zZWQgfHwgKG4ubmV4dCh0KSwgbi5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gbi5lcnJvcih0KTtcbiAgICB9KS50aGVuKG51bGwsIGVuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBqbyhlKSB7XG4gIHJldHVybiBuZXcgdGUoZnVuY3Rpb24obikge1xuICAgIHZhciB0LCByO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0geWUoZSksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKG4ubmV4dChhKSwgbi5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHQgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAociA9IGkucmV0dXJuKSAmJiByLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5uKGUpIHtcbiAgcmV0dXJuIG5ldyB0ZShmdW5jdGlvbihuKSB7XG4gICAgJG8oZSwgbikuY2F0Y2goZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IodCk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geG8oZSkge1xuICByZXR1cm4gbm4oTW8oZSkpO1xufVxuZnVuY3Rpb24gJG8oZSwgbikge1xuICB2YXIgdCwgciwgaSwgcztcbiAgcmV0dXJuIG5vKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gSnQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgdCA9IG9vKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgdC5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSByLnZhbHVlLCBuLm5leHQoYSksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChzID0gdC5yZXR1cm4pID8gWzQsIHMuY2FsbCh0KV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR28oZSwgbiwgdCwgciwgaSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgdCgpLCBpID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAoZS5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gVm8oZSwgbikge1xuICB2YXIgdCA9IE0oZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIHIgPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IodCgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyB0ZShyKTtcbn1cbnZhciB6byA9IHplKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHFvKGUsIG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogcixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IHQocykgOiByKG5ldyB6bygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBZbyhlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgQm8gPSB6ZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdCA9PT0gdm9pZCAwICYmICh0ID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gdDtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gV28oZSwgbikge1xuICB2YXIgdCA9IFlvKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgciA9IHQuZmlyc3QsIGkgPSB0LmVhY2gsIHMgPSB0LndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBIbyA6IHMsIGMgPSB0LnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IENvIDogYywgdSA9IHQubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAociA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBmbyhmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIHksIG0sIGcgPSBudWxsLCBFID0gMCwgdyA9IGZ1bmN0aW9uKEMpIHtcbiAgICAgIG0gPSBHbyhfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB5LnVuc3Vic2NyaWJlKCksIE5vKGEoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogZyxcbiAgICAgICAgICAgIHNlZW46IEVcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChQKSB7XG4gICAgICAgICAgXy5lcnJvcihQKTtcbiAgICAgICAgfVxuICAgICAgfSwgQyk7XG4gICAgfTtcbiAgICB5ID0gZi5zdWJzY3JpYmUoX28oXywgZnVuY3Rpb24oQykge1xuICAgICAgbSA9PSBudWxsIHx8IG0udW5zdWJzY3JpYmUoKSwgRSsrLCBfLm5leHQoZyA9IEMpLCBpID4gMCAmJiB3KGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIG0gIT0gbnVsbCAmJiBtLmNsb3NlZCB8fCBtID09IG51bGwgfHwgbS51bnN1YnNjcmliZSgpLCBnID0gbnVsbDtcbiAgICB9KSksICFFICYmIHcociAhPSBudWxsID8gdHlwZW9mIHIgPT0gXCJudW1iZXJcIiA/IHIgOiArciAtIGwubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBIbyhlKSB7XG4gIHRocm93IG5ldyBCbyhlKTtcbn1cbmNsYXNzIENlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogbiB9LCB0aGlzLl9zdWJqZWN0Lm5leHQobiksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKG4sIHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiBuLCBlcnJNc2c6IHQgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihuKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKG4pID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiBuLCB0aGlzLnN1YnNjcmliZSA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpLCB0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIHFlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdCA9IHtcbiAgICAgICAgZmlyc3Q6IG4udGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gVm8oKCkgPT4gbmV3IEVycm9yKG4udGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHFvKHRoaXMuX3N1YmplY3QucGlwZShXbyh0KSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB0bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCBudCA9IG5ldyBDZSgpLCB2dCA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBKbyA9IDMsIEtvID0gMywgWm8gPSAxZTMsIHsgbG9nX186IERlIH0gPSBBKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIFFvIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBEZShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgRGUoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sICEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSAmJiAodGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSk7XG4gIH1cbiAgYWRkRXZlbnQobiwgdCwgcikge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBldmVudE5hbWU6IG4sXG4gICAgICBwcm9wZXJ0aWVzOiB0IHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBpLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGkpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odnQpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHZ0LCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgWm8pKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBuID0gbnQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIW4pIHtcbiAgICAgIERlKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEtvKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZXZlbnRzOiB0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IG4uZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi5uLFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBuLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgaSA9IGVhKG4uZW52aXJvbm1lbnQpLCBzID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGkpO1xuICAgICAgKGF3YWl0IGZldGNoKHMudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaCh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBEZShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgciksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2godCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKG4pIHtcbiAgICBuLmZvckVhY2goKHIpID0+IHtcbiAgICAgIHIuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgdCA9IG4uZmlsdGVyKChyKSA9PiByLmF0dGVtcHRDb3VudCA8IEpvKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShuLmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4udCwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3Qgcm4gPSBuZXcgUW8oKSwgaCA9IChlLCBuLCB0KSA9PiB7XG4gIHJuLmFkZEV2ZW50KGUsIG4sIHQpO1xufSwgb24gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gRyhlLnJlYXNvbik7XG4gIGgoXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBuLFxuICAgIGVycm9yX25hbWU6IGUucmVhc29uXG4gIH0pO1xufSwgc24gPSAoZSkgPT4ge1xuICB2YXIgdCwgcjtcbiAgY29uc3QgbiA9IEcoZS5lcnJvcik7XG4gIGgoXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogbixcbiAgICBlcnJvcl9uYW1lOiAodCA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiB0Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIuc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufSwgWG8gPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgc24pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBvbik7XG59LCBlaSA9ICgpID0+IHtcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBzbiksIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG9uKTtcbn07XG50eXBlb2Ygd2luZG93IDwgXCJ1XCIgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBybi5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY2xhc3MgYW4gZXh0ZW5kcyB0byB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICBjb25zdCB0ID0gYCR7bi5tZXNzYWdlfWA7XG4gICAgc3VwZXIodCksIHRoaXMucmVzcG9uc2UgPSBuO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBOID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgciAmJiBoKHIsIHtcbiAgICAuLi5uXG4gIH0pO1xuICBjb25zdCBpID0gYXdhaXQgZS5zZW5kKG4pO1xuICBpZiAobmkoaSkpXG4gICAgdGhyb3cgbmV3IGFuKGkpO1xuICBpZiAoIXRpKGksIHQpKSB7XG4gICAgY29uc3QgcyA9IHQuc2FmZVBhcnNlKGkpO1xuICAgIHRocm93IHMuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgdCwgXCJBY3R1YWw6XCIsIGkpLCBzLmVycm9yKTtcbiAgfVxuICByZXR1cm4gciAmJiBoKHIsIHtcbiAgICAuLi5pXG4gIH0pLCBpO1xufSwgdGkgPSAoZSwgbikgPT4gbi5zYWZlUGFyc2UoZSkuc3VjY2VzcywgbmkgPSAoZSkgPT4gTXIuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIHJpID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgWXQpLCBEID0gYXN5bmMgKGUpID0+IGF3YWl0IE4oZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIEJ0KSwgaGUgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIEh0LFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBvaSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiBuIH0sXG4gIFdyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgaWkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBoKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgdCA9IGF3YWl0IE4oZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogbiB9LCBIdCk7XG4gIHJldHVybiBoKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnRcbiAgfSksIHQ7XG59LCBxID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIHdyLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIHNpID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFd0LFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIGFpID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogbiB9LFxuICBncixcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgY2kgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgcmkoZSwge1xuICAgIHNlY3VyZV90b2tlbjogbixcbiAgICBwcm9tb3Rpb25fY29kZTogdFxuICB9KSwgaSA9IG5ldyBTZXQoci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoaS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2kuc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGkudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGEgPSBacihyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGFcbiAgfTtcbn0sIGdlID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIHIgPSByIHx8IHZvaWQgMDtcbiAgICBjb25zdCBpID0gYXdhaXQgY2koZSwgbiwgcik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogaS5hbW91bnRBdG9tLCBjdXJyZW5jeTogaS5jdXJyZW5jeSB9O1xuICB9XG59LCBsaSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAocikgPT4gTihyLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiBuIH0sIGZyKVxuICAgIClcbiAgKTtcbn0sIEV0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSxcbiAgaXQsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCB1aSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIFd0LCBcInNldHVwX2NoZWNrb3V0XCIpLCBsdCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBOKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiBuIH0sIGl0LCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIGNuID0gMWUzLCBkaSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnNvbGUubG9nKG4pO1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogY24sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBOKHIsIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBfcik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGkpLCBpO1xufSwgdXQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgTihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSxcbiAgSnIsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgbG4gPSBhc3luYyAoZSwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgTihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogbiB9IH0sXG4gICAgICBIclxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBHKHQpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIHBpID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IE4oXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IG4gfSB9LFxuICBLclxuKTtcbmZ1bmN0aW9uIHFlKGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgdW4gPSAoZSwgbikgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3RdKSA9PiAhbi5pbmNsdWRlcyh0KSkpLCB7IGxvZ19fOiBkYSwgZXJyX186IG1pIH0gPSBBKFwiY29tbW9uXCIpLCBSZSA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIFcgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBuLnNhZmVQYXJzZShyKS5zdWNjZXNzKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG1pKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIG4ucGFyc2UodCk7XG59LCB5aSA9IChlKSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IGUuemlwQ29kZSxcbiAgICBjb3VudHJ5OiBlLmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGUuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lXG59KSwgWWUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBuIH0gPSBBKGUubG9nUHJlZml4KSwgdCA9IGF3YWl0IEQoZS5hbnlDZGVDb25uZWN0aW9uKSwgciA9IFJlKGUuY29uZmlybVJlc3VsdCk7XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gbihcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IHNpKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiB0LnRva2VuLFxuICAgICAgcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgbihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHQubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiB0LmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiByLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfTtcbiAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgbHQoZS5hbnlDZGVDb25uZWN0aW9uLCBpKSB9O1xuICB9XG59LCB7IGxvZ19fOiBkbiwgZXJyX186IHBuIH0gPSBBKFwiY29tbW9uLWNjXCIpLCBvZSA9IChlLCBuLCB0KSA9PiB7XG4gIGlmICh0KSB7XG4gICAgZG4oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICAgIGZvciAoY29uc3QgW2ksIHNdIG9mIE9iamVjdC5lbnRyaWVzKHQpKVxuICAgICAgZVtpXSB8fCAoZVtpXSA9IHMpO1xuICB9XG4gIGNvbnN0IHIgPSBBZS5zYWZlUGFyc2UoZSk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgaSA9IHIuZXJyb3IuZm9ybWF0KCksIHMgPSBHdChpKTtcbiAgICBmb3IgKGNvbnN0IFthLCBjXSBvZiBPYmplY3QuZW50cmllcyhzKSlcbiAgICAgIG4oYSwgYywgYSk7XG4gICAgdGhyb3cgcG4oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIGZpID0gKGUsIG4pID0+IHtcbiAgZm9yIChjb25zdCB0IG9mIGUpXG4gICAgaWYgKHQuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyB0LmVycm9ycy5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSB4dC5zYWZlUGFyc2Uoci5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghaS5zdWNjZXNzKVxuICAgICAgICAgIHBuKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7ci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCByKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgcyA9IGkuZGF0YTtcbiAgICAgICAgICBuKHMsIHIuZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIGRuKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCBDdCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBGLCBlcnJfXzogX2kgfSA9IEEoXCJzdHJpcGUtbGlua1wiKSwgaGkgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgZ2kgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgd2kgPSB1ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEYoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaGkpO1xuICAgIEYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBEKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgZ2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBDcihyLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBmID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7Q3R9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHQgIT0gbnVsbCAmJiB0LmRvTm90TW91bnRPbkluaXQgPyBGKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChGKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBmKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIGlmIChGKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHQgIT0gbnVsbCAmJiB0Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgdC5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBGKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB5LnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKHkpID0+IHtcbiAgICAgIEYoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIHkpO1xuICAgICAgY29uc3QgbSA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IHkuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBtLmVycm9yID8gKF9pKFwiZXJyb3JcIiwgbS5lcnJvciksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcihtLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChGKFwicGF5bWVudE1ldGhvZFwiLCBtLnBheW1lbnRNZXRob2QpLCBSLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogbS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBFaShDdClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBiaSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIEYoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBGKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gdmkodCwgaS5zdHJpcGVQTSksIGMgPSBvZShhLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgaChcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEYoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGhlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBpLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIEYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IGdpLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIGYgPSBhd2FpdCBEKHMpO1xuICAgIGlmIChmLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgcShzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFJlKF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEYoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgbHQocywgXykgfTtcbiAgICB9XG4gIH1cbiksIHZpID0gKGUsIG4pID0+IHtcbiAgdmFyIGwsIHUsIGQsIGYsIF87XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLmldID0gKCh1ID0gKGwgPSBuLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IG4ubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IG4uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKChmID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGYucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8ICgoXyA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgYSA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIGMgPSB0W3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiXCI7XG4gIHJldHVybiBhIHx8IGMgPyAodFtwLkZJUlNUX05BTUVdID0gYSwgdFtwLkxBU1RfTkFNRV0gPSBjKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIEYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBFaSA9IChlKSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCB0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTtcbiAgfTtcbiAgdCgpO1xufSksIENpID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgbW4gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0NpfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSB0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgaSA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIHsgaG9zdDogdCwgaWZyYW1lOiBpLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBTaShlLCBuLCB0KSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCBkaShlLCB0KTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoaSksIG4ocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBpID0gc2V0SW50ZXJ2YWwociwgY24pO1xuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIFBpKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogdFxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIGUuaG9zdC5yZW1vdmUoKSwgdCh7IHN0YXR1czogVC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBCZShlKSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiB0IH0gPSBlLCByID0gbW4obik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSkgPT4ge1xuICAgIGNvbnN0IHMgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGkobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgYSA9IFNpKHIuaWZyYW1lLCBzLCBuZXcgVVJMKHQpLm9yaWdpbiksIGMgPSBQaSh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogYSxcbiAgICAgIHJlc29sdmU6IGlcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB5biA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBCZShlKTtcbiAgaWYgKG4uc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gVC5TVUNDRVNTICYmIHFlKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwga2kgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHQ7XG59LCBBaSA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGkgfSA9IEEoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocywgYSkgPT4ge1xuICAgIGNvbnN0IGMgPSBraShlLCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBhaShuLCB0KTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIHMoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBpKEcodSkpLCBjbGVhckludGVydmFsKGwpLCBhKEcodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogSWksIGVycl9fOiBmbiB9ID0gQShcInBvY2t5dC1jY1wiKSwgUmkgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBUaSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBSaS5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IGZuKHIpLCBuZXcgRXJyb3IodCk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIF9uID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBJaShgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCB0ID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgZm4odCwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtHKG4pfWApLCBuZXcgRXJyb3IodCk7XG4gIH1cbn0sIEZpID0gKGUsIG4pID0+IG5ldyBVUkwoZSkuc2VhcmNoUGFyYW1zLmdldChuKSwgTWkgPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgRGkgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gVGkobiksIHIgPSBhd2FpdCB5bih7IHVybDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiBlIH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogX24oci5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IHRbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiB0W1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IE5pLCBlcnJfXzogZHQgfSA9IEEoXCJhaXJ3YWxsZXgtY2NcIiksIExpID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgT2kgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gTGkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IHQgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBkdChyKSwgbmV3IEVycm9yKHQpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBVaSA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBqaSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTmkoYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCB0ID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IGR0KHQsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7RyhuKX1gKSwgbmV3IEVycm9yKHQpO1xuICB9XG59LCB4aSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBPaShuKSwgciA9IGF3YWl0IHluKHsgdXJsOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGkgPSBqaShyLmhyZWYgPz8gXCJcIiksIHMgPSB0W1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAocyAhPT0gaSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtzfSkuYDtcbiAgICB0aHJvdyBkdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpLFxuICAgICAgY29uc2VudF9pZDogdFtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgaG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGduID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCAkaSA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgR2kgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogZmUsIGVycl9fOiBrZSB9ID0gQShcImFkeWVuLWNjXCIpLCBWaSA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6ICRpLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCB3biA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgemkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gVmkuc2FmZVBhcnNlKGUpO1xuICBpZiAoIW4uc3VjY2VzcylcbiAgICB0aHJvdyBrZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKHduKTtcbiAgcmV0dXJuIG4uZGF0YTtcbn0sIHFpID0gKGUpID0+IEpTT04ucGFyc2UoZSksIFN0ID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIFlpID0gYXN5bmMgKCkgPT4ge1xuICBmZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgU3QoKSB8fCBhd2FpdCBzdCg1MDApO1xuICBpZiAoIVN0KCkpXG4gICAgdGhyb3cga2UoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKHduKTtcbiAgcmV0dXJuIGZlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgQmkgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IG4sIGxvY2FsZTogdCwgY291bnRyeUNvZGU6IHIsIGNvbXBvbmVudDogaSwgaG9zdDogcywgY2FuY2VsQnV0dG9uOiBhIH0gPSBlLCBjID0gcWkobltcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBmZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBmZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKSwgcy5yZW1vdmUoKTtcbiAgICB9LCBkID0gKG0pID0+IHtcbiAgICAgIGtlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIG0pLCBsKHsgc3RhdHVzOiBULkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9IChtKSA9PiB7XG4gICAgICBrZShcIkFkeWVuIGVycm9yOlwiLCBtKSwgbCh7IHN0YXR1czogVC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBULkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pO1xuICAgIGNvbnN0IHkgPSAobSwgZywgRSkgPT4ge1xuICAgICAgcy5yZW1vdmUoKSwgbCh7IHN0YXR1czogVC5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogbSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIFlpKCkudGhlbihcbiAgICAgIChtKSA9PiBtKHtcbiAgICAgICAgY2xpZW50S2V5OiBuW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG5bXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiB0LFxuICAgICAgICBjb3VudHJ5Q29kZTogcixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigobSkgPT4ge1xuICAgICAgbS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGkpO1xuICAgIH0pO1xuICB9KTtcbn0sIFdpID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCB0ID0gZSA/PyBuLCByID0gR2kuc2FmZVBhcnNlKHQpO1xuICByZXR1cm4gci5zdWNjZXNzID8gKGZlKGBSZXNvbHZlZCBsb2NhbGU6ICR7ci5kYXRhfWApLCByLmRhdGEpIDogKGtlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHt0fS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIEhpID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBKaSA9IGFzeW5jIChlLCBuLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB6aShuKSwgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGkuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IHMsIGlmcmFtZTogYSwgY2FuY2VsQnV0dG9uOiBjIH0gPSBtbihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgYS5yZXBsYWNlV2l0aChpKTtcbiAgY29uc3QgbCA9IGF3YWl0IEJpKHtcbiAgICBoZWFkZXJzOiByLFxuICAgIGxvY2FsZTogV2kodCksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBpLFxuICAgIGhvc3Q6IHMsXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gVC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gVC5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBmZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIHFlKGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IFMsIGVycl9fOiBQdCB9ID0gQShcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzoga3QgfSA9IEEoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEtpID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgUyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuIH0pO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKHMpO1xuICAgIGgoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLm4sXG4gICAgICBwcmVmaWxsOiBhXG4gICAgfSksIFMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7YS5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gb2UodCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uY1xuICAgIH0pO1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgUyhg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGQgPSBhd2FpdCBsaShpLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChmaShkLCByLmdldC5vblZhbGlkYXRpb25FcnJvciksIGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIFMoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7YS50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IGYgPSBhd2FpdCB1aShzLCBsKTtcbiAgICAgICAgcmV0dXJuIFMoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUyhg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IGYgPSBhd2FpdCBFdChzLCBsKTtcbiAgICAgICAgcmV0dXJuIFMoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICBpZiAoZCBpbnN0YW5jZW9mIGFuICYmIGQub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgUyhcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIFMoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgZC5yZXNwb25zZS5oZWFkZXJzKSwgaChcIjNkc19yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgLi4ubixcbiAgICAgICAgICAuLi5kLnJlc3BvbnNlLmhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGYgPSBNaShkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoZikge1xuICAgICAgICAgIFMoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IERpKGUuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVpKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBTKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCB4aShlLmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChIaShkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgUyhcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEppKFxuICAgICAgICAgICAgdFtwLkNPVU5UUlldLFxuICAgICAgICAgICAgZC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgYS5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSB3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCBvaShzLCBsKTtcbiAgICAgICAgUyhcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBtKTtcbiAgICAgICAgY29uc3QgZyA9ICgodSA9IGQucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IHVbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIGYgPyBTKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBnID8gKFMoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCB0cyhtKSkgOiAoUyhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IGVzKG0sIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBFID0gbS5jY19wbV9pZDtcbiAgICAgICAgaWYgKGEubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgUyhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtFfV1gKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgcShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogRVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFMoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgdyk7XG4gICAgICAgICAgY29uc3QgQyA9IFJlKHcpO1xuICAgICAgICAgIHJldHVybiBTKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Qy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IEMgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2cgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEV0KHMsIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogRSxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBQdChcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgUHQoZCksIGQ7XG4gICAgfVxuICB9XG4pLCBaaSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiB0LnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gYnIucGFyc2Uobik7XG59LCBRaSA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgWGkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgodCkgPT4gUWkuaW5jbHVkZXModC50eXBlKSk7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGhyLnBhcnNlKG4pO1xufSwgZXMgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gWGkoZSk7XG4gIGlmICh0LnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIFMoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgaChcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgUyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3QucmVkaXJlY3RfdXJsfV1gKSwgaChcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IEJlKHsgdXJsOiB0LnJlZGlyZWN0X3VybCwgYmFzZVVybDogbiB9KTtcbiAgaWYgKFMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBoKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgaChcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIHRzID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgbiA9IFppKGUpO1xuICBoKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4ublxuICB9KSwga3QoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7bi5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IEFyKG4pLCBoKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwga3QoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCBZID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG5ZLkVudW0uc3RyaXBlO1xuY29uc3QgYm4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiBuLFxuICBjaGVja0xvYWRlZEZuOiB0XG59KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBhLnNyYyA9IG4sIGEuaWQgPSBlLCBhLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHQoKSA/IGkoKSA6IGMgPyBhID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICByLmFib3J0KCksIGkoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogci5zaWduYWwgfVxuICAgICksIGEuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgci5hYm9ydCgpLCBzKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogci5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgeyBsb2dfXzogTywgZXJyX186IG5zIH0gPSBBKFwic3RyaXBlLXByXCIpLCBycyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgb3MgPSB1ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgTyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcnMpO1xuICAgIE8oXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IEQociksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBPKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBnZShyLCBpLnRva2VuLCBzLCB2b2lkIDApLCBjID0gYXdhaXQgU3IoXG4gICAgICB0Lm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGEuYW1vdW50QXRvbSxcbiAgICAgIGEuY3VycmVuY3ksXG4gICAgICBzXG4gICAgKTtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgYy5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChsID09PSBudWxsKVxuICAgICAgcmV0dXJuIG5zKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICBPKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGwpO1xuICAgIGNvbnN0IHUgPSAoZCwgZikgPT4gUi5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogU2UoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICBwcm9jZXNzb3I6IFkuRW51bS5zdHJpcGUsXG4gICAgICAgIHByOiBjLFxuICAgICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogbC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheSB9LFxuICAgICAgICBzdGFydEZsb3c6IHVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGMsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGwuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogbC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBpcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgaW5pdFJlc3VsdDogc1xuICB9KSA9PiB7XG4gICAgaWYgKE8oXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBpLnByb3ZpZGVyICE9PSBuLnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtpLnByb3ZpZGVyfSwgZ290ICR7bi5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gcy5wcjtcbiAgICBpZiAoaSAhPSBudWxsICYmIGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgbSA9IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIE8oXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIG0pLCBhcyhjLCBtLmFtb3VudCwgbS5wZW5kaW5nLCBtLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QsIG0ubGFiZWwpO1xuICAgIH1cbiAgICBPKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBQcihjKTtcbiAgICBPKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgTyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IHNzKHQsIGwpLCBkID0gb2UodSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZFxuICAgIH0pLCBPKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IGlpKGEsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogblxuICAgIH0pLCBfID0gY3MoZik7XG4gICAgTyhcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGtyKF8sIGwpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBEKGEpO1xuICAgIGlmICh5Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgTyhcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBxKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBSZShtKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBPKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBsdChhLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgc3MgPSAoZSwgbikgPT4ge1xuICB2YXIgZCwgZiwgXywgeTtcbiAgY29uc3QgdCA9IHsgLi4uZSB9LCBbciwgLi4uaV0gPSAoKGYgPSAoZCA9IG4ucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogZC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBmLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIGEgPSAoeSA9IChfID0gbi5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogXy5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiB5LmFkZHJlc3MsIGMgPSBuLnNoaXBwaW5nQWRkcmVzcztcbiAgdFtwLkVNQUlMXSA9IHRbcC5FTUFJTF0gfHwgbi5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgbCA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIHUgPSB0W3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiXCI7XG4gIHJldHVybiBsIHx8IHUgPyAodFtwLkZJUlNUX05BTUVdID0gbCwgdFtwLkxBU1RfTkFNRV0gPSB1KSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIE8oXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBhcyA9IChlLCBuLCB0LCByLCBpKSA9PiB7XG4gIGUudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiBuLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogaSA/PyBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiB0XG4gICAgfSxcbiAgICBjdXJyZW5jeTogbi5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiByXG4gIH0pO1xufSwgY3MgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHtlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gdnIucGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogSCwgZXJyX186IEF0IH0gPSBBKFwicG9ja3l0LXBheXBhbFwiKSwgbHMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHVzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHgsIGRlO1xuICAgIEgoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgRChzKTtcbiAgICBIKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gbHMucGFyc2Uobik7XG4gICAgSChcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MsIHUgPSBvZShcbiAgICAgIHQsXG4gICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IHlpKHUpO1xuICAgIEgoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke2EubW9kZX1gKTtcbiAgICBjb25zdCBmID0gdjQoKSwgXyA9IGEubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBfLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBfID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBhLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYS5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKCh4ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiB4LnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIG0gPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGcgPSBidG9hKEpTT04uc3RyaW5naWZ5KHkpKSwgRSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IGEudG9rZW4sXG4gICAgICByOiBnXG4gICAgfSksIHcgPSBgJHttfT8ke0UudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoZGUgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzKSAhPSBudWxsICYmIGRlLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IEgoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgc3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBIKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBIKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IEMgPSBhd2FpdCBBaShcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBzLFxuICAgICAgZixcbiAgICAgIHdcbiAgICApO1xuICAgIEgoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgQyk7XG4gICAgY29uc3QgUCA9IF9uKEMuaHJlZiksIHYgPSBGaShDLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIXYpXG4gICAgICB0aHJvdyBBdChcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgQy5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIEgoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7UH1gKTtcbiAgICBjb25zdCBMID0gYXdhaXQgcShzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogUCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IF8gPyB2IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKEgoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTCksIGEubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIUwucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBBdChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEwpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBMLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgV2UgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogbixcbiAgbWVyY2hhbnROYW1lOiB0LFxuICBtZXJjaGFudElkOiByLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgcHJlZmlsbDogYVxufSkgPT4ge1xuICB2YXIgZiwgXztcbiAgY29uc3QgYyA9ICgoZiA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jdXJyZW5jeSkgPz8gaS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IHIgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogdFxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogcyAhPSBudWxsICYmIHMucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBzICE9IG51bGwgJiYgcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4uZCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIHZuID0gKCkgPT4gYm4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgbjtcbiAgICByZXR1cm4gISEoKG4gPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIG4uYXBpKTtcbiAgfVxufSk7XG5sZXQgUWUgPSBudWxsO1xuY29uc3QgRW4gPSAoZSkgPT4gZSA9PT0gb3QgfHwgZSA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIEhlID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IEVuKGUpO1xuICByZXR1cm4gUWUgPT09IG51bGwgJiYgKFFlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogdCxcbiAgICBtZXJjaGFudEluZm86IG4ubWVyY2hhbnRJbmZvXG4gIH0pKSwgUWU7XG59LCBkcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiB0LnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIG4gPyAkdC5wYXJzZShuKSA6IG51bGw7XG59LCBDbiA9IChlLCBuKSA9PiB7XG4gIHZhciBpLCBzLCBhLCBjO1xuICBjb25zdCB0ID0geyAuLi5lIH0sIHIgPSAocyA9IChpID0gbi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChyKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKGEgPSByLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICB0W3AuRU1BSUxdID0gdFtwLkVNQUlMXSB8fCBuLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8IHIuY291bnRyeUNvZGUgfHwgXCJVU1wiLCB0W3AuQUREUkVTU10gPSB0W3AuQUREUkVTU10gfHwgci5hZGRyZXNzMSB8fCBcIlwiLCB0W3AuQ0lUWV0gPSB0W3AuQ0lUWV0gfHwgci5sb2NhbGl0eSB8fCBcIlwiLCB0W3AuWklQX0NPREVdID0gdFtwLlpJUF9DT0RFXSB8fCByLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCB0W3AuU1RBVEVdID0gdFtwLlNUQVRFXSB8fCByLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiO1xuICAgIGNvbnN0IGYgPSB0W3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIlwiLCBfID0gdFtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIlwiO1xuICAgIGYgfHwgXyA/ICh0W3AuRklSU1RfTkFNRV0gPSBmLCB0W3AuTEFTVF9OQU1FXSA9IF8pIDogKHRbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgdFtwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gdDtcbn0sIHsgbG9nX186IHosIGVycl9fOiBwZSB9ID0gQShcImF3eC1nb29nbGUtcGF5XCIpLCBwcyA9IHVlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICB2YXIgZiwgXztcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZ24pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIHooXCJHb29nbGUgUGF5IENQTVwiLCByKTtcbiAgICBjb25zdCBpID0gci5tZXRhZGF0YTtcbiAgICBpZiAoIWkucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gcGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB0O1xuICAgIGlmICh6KFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgdm4oKSwgISgoXyA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIHBlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgdDtcbiAgICBpZiAoRW4oZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWkuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBwZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHQ7XG4gICAgeihcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IFdlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGkucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogaS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBpLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogbSB9ID0gYXdhaXQgSGUoZS5iYXNlVXJsLCB5KS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIHlcbiAgICAgICk7XG4gICAgICBpZiAoIW0pXG4gICAgICAgIHJldHVybiB6KFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHQ7XG4gICAgfSBjYXRjaCAoeSkge1xuICAgICAgcmV0dXJuIHBlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgeSksIHQ7XG4gICAgfVxuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGEpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBnZShhLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ueSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgcGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBZLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIG1zID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIG0sIGcsIEUsIHcsIEMsIFA7XG4gICAgeihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGduKSwgeyBpbml0aWFsUHJldmlldzogYSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gaSwgbCA9IHMubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gV2Uoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCBmID0gYXdhaXQgRChkKTtcbiAgICBoKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHMucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1bihmLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IEhlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHYgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCB2KTtcbiAgICAgIGNvbnN0IEwgPSBDbih0LCB2KSwgeCA9IG9lKFxuICAgICAgICBMLFxuICAgICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgaSA9PSBudWxsID8gdm9pZCAwIDogaS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBoKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4ueFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkZSA9IChtID0gKHkgPSB2LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbjtcbiAgICAgIGlmICghZGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgT24gPSBhd2FpdCBoZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHhbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB4W3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHhbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiB4W3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IHhbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgVGUgPSBkcyhPbik7XG4gICAgICB6KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgVGUpO1xuICAgICAgbGV0IGllID0gYXdhaXQgcShkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogVGUgPT0gbnVsbCA/IHZvaWQgMCA6IFRlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSk7XG4gICAgICBsZXQgSmUgPSAoRSA9IChnID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICBjb25zdCBzZSA9ICh3ID0gaWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdy5maW5kKFxuICAgICAgICAod2UpID0+IHdlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKHNlICYmIHNlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICB6KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgc2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogd2UgfSA9IGF3YWl0IEJlKHtcbiAgICAgICAgICB1cmw6IHNlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh6KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHt3ZX1dYCksIHdlID09PSBULkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKHdlID09PSBULkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoc2UgJiYgIUplICYmIChpZSA9IGF3YWl0IHEoZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBzZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogc2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgeihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGllKSwgSmUgPSAoUCA9IChDID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFAuaWQpLCAhSmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFllKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHgsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGllLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyBwZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB2KSwgaChcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB2XG4gICAgICB9KSwgbmV3IEVycm9yKCh2ID09IG51bGwgPyB2b2lkIDAgOiB2Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIFNuID0gKCkgPT4gYm4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIFBuID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG4udG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgciA9IG4uYmlsbGluZ0NvbnRhY3QsIGkgPSBuLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4uZSB9O1xuICBpZiAodCB8fCByIHx8IGkpIHtcbiAgICBzW3AuRU1BSUxdID0gc1twLkVNQUlMXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5lbWFpbEFkZHJlc3MpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBzW3AuQ09VTlRSWV0gPSBzW3AuQ09VTlRSWV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY291bnRyeUNvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBzW3AuWklQX0NPREVdID0gc1twLlpJUF9DT0RFXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5wb3N0YWxDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgYSA9IHNbcC5GSVJTVF9OQU1FXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5naXZlbk5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gc1twLkxBU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZmFtaWx5TmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBhIHx8IGMgPyAoc1twLkZJUlNUX05BTUVdID0gYSwgc1twLkxBU1RfTkFNRV0gPSBjKSA6IChzW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHNbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHM7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IGtuID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IG5cbn0pID0+IHtcbiAgdmFyIHI7XG4gIGlmIChuLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7bi50b2tlbn1gLCBvdCkudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHQgPSAociA9IG4ubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF07XG4gIGlmICh0KVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtuLnRva2VufWBcbiAgICB9O1xufSwgQW4gPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogdCxcbiAgZGVmYXVsdExhYmVsOiByID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBpID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY3VycmVuY3kpID8/IG4uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGEgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAobiA9PSBudWxsID8gdm9pZCAwIDogbi5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gciA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IGFcbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBMZSB9ID0gQShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiB5cyhlLCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCB1dChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgaSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgaChcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmlcbiAgICB9KTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCB0O1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBmcyhlLCBuKSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBMZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogdCB9ID0gYXdhaXQgQmUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogbi5iYXNlVXJsXG4gIH0pO1xuICBpZiAoTGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3R9XWApLCB0ID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgciA9IGF3YWl0IHEobi5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBMZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHIpLCByO1xufVxuYXN5bmMgZnVuY3Rpb24gX3MoZSwgbikge1xuICB2YXIgdCwgciwgaSwgcywgYTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gUG4obi5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IG9lKFxuICAgICAgbCxcbiAgICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgaChcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi51XG4gICAgfSk7XG4gICAgY29uc3QgXyA9IChhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB1W3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHVbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHVbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHVbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHVbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCB5ID0gYXdhaXQgcShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBMZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHkpO1xuICAgIGxldCBtID0gKHIgPSAodCA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQ7XG4gICAgY29uc3QgZyA9IChpID0geS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBpLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGcgIT0gbnVsbCAmJiBnLnJlZGlyZWN0X3VybCAmJiBnLmNvbnNlbnRfaWQgJiYgZy50aGVpcl9wbV9pZCAmJiAoeSA9IGF3YWl0IGZzKGcsIG4pLCBtID0gKGEgPSAocyA9IHkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogc1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaWQpLCAhbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IEUgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoRSksIFllKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBiZSwgZXJyX186IEluIH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKSwgaHMgPSB1ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICBpZiAoYmUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IFNuKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gYmUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB0O1xuICAgIGlmIChiZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gYmUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHQ7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZ2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgSW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgbi5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgZ3MgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGN1c3RvbVBhcmFtczogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgRTtcbiAgICBjb25zdCBzID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGhuKSwgeyBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhLCBpbml0aWFsUHJldmlldzogYyB9ID0gciwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IEQobCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgeyBjdXJyZW5jeUNvZGU6IGYsIHRvdGFsOiBfIH0gPSBBbih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBkZWZhdWx0TGFiZWw6IChFID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCB5ID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogZixcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsOiBfLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IGtuKHtcbiAgICAgICAgdG90YWw6IF8sXG4gICAgICAgIHByZWZpbGw6IHVcbiAgICAgIH0pLFxuICAgICAgLi4uKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9LCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgZyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gaChcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG4ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1bih1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhXG4gICAgfSksIG5ldyBQcm9taXNlKCh3LCBDKSA9PiB7XG4gICAgICBjb25zdCBQID0gKCkgPT4ge1xuICAgICAgICBiZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIEMobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgbS5vbmNhbmNlbCA9IFAsIG0ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB5cyh2LCBnKTtcbiAgICAgICAgfSBjYXRjaCAoTCkge1xuICAgICAgICAgIEMoTCk7XG4gICAgICAgIH1cbiAgICAgIH0sIG0ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uXyB9XG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHYpO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgaChcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IF9zKHYsIGcpO1xuICAgICAgICAgIHcoTCk7XG4gICAgICAgIH0gY2F0Y2ggKEwpIHtcbiAgICAgICAgICBDKEwpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEluKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIGgoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB3XG4gICAgICB9KSwgdztcbiAgICB9KTtcbiAgfVxuKSwgd3MgPSAxLCBicyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogaiwgZXJyX186IFJuIH0gPSBBKFwibG9vcC1jcnlwdG9cIiksIHZzID0geiQxLm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IEksXG4gIGxvb3BMYXN0TmFtZTogSSxcbiAgbG9vcEVtYWlsOiBJLFxuICBbcC5QUk9NT1RJT05fQ09ERV06IGtcbn0pLCBFcyA9IChlLCBuLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB2cy5zYWZlUGFyc2UoZSk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgaSA9IHIuZXJyb3IuZm9ybWF0KCksIHMgPSBHdChpKTtcbiAgICBmb3IgKGNvbnN0IFthLCBjXSBvZiBPYmplY3QuZW50cmllcyhzKSlcbiAgICAgIG4oYSwgYywgYSk7XG4gICAgdGhyb3cgUm4oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIENzID0gdWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIGooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IG4gPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgYnMpO1xuICAgIGooYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeShuKX1gKSwgaihcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgdCA9IGF3YWl0IEQoZS5hbnlDZGVDb25uZWN0aW9uKSwgciA9IGF3YWl0IHV0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICB9KTtcbiAgICBpZiAodC5tb2RlICE9PSBcInNldHVwXCIgJiYgIW4ubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXMuaW5jbHVkZXModC5jdXJyZW5jeSkpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEN1cnJlbmN5ICR7dC5jdXJyZW5jeX0gbm90IGVuYWJsZWQgZm9yIExvb3AuIEVuYWJsZWQgY3VycmVuY2llczogJHtuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzfWBcbiAgICAgICk7XG4gICAgaWYgKCFyIHx8ICFyLm5leHRfYWN0aW9uX21ldGFkYXRhKVxuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggbmVjZXNzYXJ5IHNldHVwIGRhdGEgZm9yIExvb3BcIik7XG4gICAgY29uc3QgaSA9IHIubmV4dF9hY3Rpb25fbWV0YWRhdGE7XG4gICAgbGV0IHM7XG4gICAgdC5tb2RlID09PSBcInNldHVwXCIgPyBzID0gd3MgOiBzID0gdC5hbW91bnRfdG90YWxfYXRvbSAqIGkudG9rZW5fcHJpY2U7XG4gICAgY29uc3QgYSA9IHMsIGMgPSBpLmF1dGhvcml6YXRpb25fYW1vdW50LCBsID0gdjQoKSwgdSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGEsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogbFxuICAgIH0sIGQgPSB7XG4gICAgICBhcGlLZXk6IG4ubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IG4ubWV0YWRhdGEuZW50aXR5X2lkLFxuICAgICAgbWVyY2hhbnRJZDogbi5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiBuLm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgd2lkZ2V0UHJvcHM6IHUsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wczogZFxuICAgIH07XG4gIH1cbiksIFNzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgaihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBqKFwiY29udGV4dFwiLCBlKSwgaihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCBuKSwgaihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgdCksIGooXCJmbG93Q2FsbGJhY2tzXCIsIHIpLCBqKFwiY3VzdG9tUGFyYW1zXCIsIGkpO1xuICAgIGNvbnN0IHMgPSBFcyh0LCByLmdldC5vblZhbGlkYXRpb25FcnJvciksIGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGUuYW55Q2RlQ29ubmVjdGlvbiksIGwgPSBjLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGhlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzLmxvb3BFbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBzLmxvb3BGaXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBzLmxvb3BMYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCBxKGEsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBpLnN1Y2Nlc3MgPyBpLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5tb2RlICE9PSBcInNldHVwXCIgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogaS5zdWNjZXNzID8gaS5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogaS5zdWNjZXNzID8gaS5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IGkuc3VjY2VzcyA/IHZvaWQgMCA6IGkuZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogaS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGooYENvbmZpcm0gcmVzdWx0OiAke2R9YCksIGMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBqKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgaihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBkKTtcbiAgICAgIGNvbnN0IGYgPSBSZShkKTtcbiAgICAgIHJldHVybiBqKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IFJuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pO1xuYXN5bmMgZnVuY3Rpb24gUHMoZSwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgdXQobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgaSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgaChcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmlcbiAgICB9KTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCB0O1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBrcyhlLCBuKSB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIGNvbnN0IGkgPSBlLnBheW1lbnQsIHMgPSBQbihuLm5vbkNkZUZvcm1JbnB1dHMsIGkpLCBhID0gb2Uocywgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgaChcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIGF3YWl0IGhlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGFbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogYVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogYVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogYVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogYVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KGkudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH0sIGwgPSBhd2FpdCBxKG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBjXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEoKHIgPSAodCA9IGwucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChkKSwgWWUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGEsXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChpKSB7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KHMpLCBpO1xuICB9XG59XG5jb25zdCBUbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEZuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzogT2UsIGVycl9fOiBNbiB9ID0gQShcImF1dGhuZXQtYXBwbGVwYXlcIiksIEFzID0gdWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVG4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGlmIChPZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgU24oKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBPZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHQ7XG4gICAgaWYgKCFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gT2UoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHQ7XG4gICAgaWYgKCFyLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChhKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgZ2UoYSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBSLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgTW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgaChcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogX1xuICAgICAgICB9KSwgbi5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIElzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjdXN0b21QYXJhbXM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEU7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSB9ID0gciwgYyA9IFcoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBUbiksIHsgY3VycmVuY3lDb2RlOiBsLCB0b3RhbDogdSB9ID0gQW4oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgZGVmYXVsdExhYmVsOiAoRSA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBFLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZiA9IGF3YWl0IEQoZCksIF8gPSBmLm1vZGUgPT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGwsXG4gICAgICB0b3RhbDogdSxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDoga24oe1xuICAgICAgICB0b3RhbDogdSxcbiAgICAgICAgcHJlZmlsbDogZlxuICAgICAgfSksXG4gICAgICAuLi4oYSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH07XG4gICAgaChcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG4ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBmLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYVxuICAgIH0pO1xuICAgIGNvbnN0IG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBnID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBuLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogZixcbiAgICAgIGlzU2V0dXBNb2RlOiBfLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogaVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCh3LCBDKSA9PiB7XG4gICAgICBtLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBPZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIEMobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChQKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgUHMoUCwgZyk7XG4gICAgICAgIH0gY2F0Y2ggKHYpIHtcbiAgICAgICAgICBDKHYpO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBQID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB5LnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIG0uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKFApO1xuICAgICAgfSwgbS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKFApID0+IHtcbiAgICAgICAgaChcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdiA9IGF3YWl0IGtzKFAsIGcpO1xuICAgICAgICAgIHcodik7XG4gICAgICAgIH0gY2F0Y2ggKHYpIHtcbiAgICAgICAgICBDKHYpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IE1uKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIGgoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB3XG4gICAgICB9KSwgdztcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogY2UsIGVycl9fOiB2ZSB9ID0gQShcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBScyA9IHVlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICB2YXIgZCwgZjtcbiAgICBjZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IFkuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBXKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRm4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGNlKFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgaSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFpLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIHZlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgdDtcbiAgICBpZiAoY2UoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCB2bigpLCAhKChmID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBmLmFwaSkpXG4gICAgICByZXR1cm4gdmUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB0O1xuICAgIGNlKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBfID0gV2Uoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogaS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBpLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGkuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBIZShlLmJhc2VVcmwsIF8pLmlzUmVhZHlUb1BheShcbiAgICAgICAgX1xuICAgICAgKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIGNlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHQ7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHZlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHQ7XG4gICAgfVxuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKHMpLCBjID0gYS5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBnZShzLCBhLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgdmUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIGgoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiB5XG4gICAgICAgIH0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogWS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgVHMgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgeSwgbSwgZywgRTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhIH0gPSBpLCBsID0gVyhlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZuKS5tZXRhZGF0YSwgdSA9IFdlKHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KSwgZCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZiA9IGF3YWl0IEQoZCk7XG4gICAgaChcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZixcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGFcbiAgICB9KTtcbiAgICBjb25zdCBfID0gSGUoZS5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdyA9IGF3YWl0IF8ubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgY2UoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCB3KTtcbiAgICAgIGNvbnN0IEMgPSBDbihuLCB3KSwgUCA9IG9lKEMsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGgoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5QXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHYgPSAobSA9ICh5ID0gdy5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW47XG4gICAgICBpZiAoIXYpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgTCA9IGF3YWl0IGhlKGQsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogUFtwLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IFBbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogUFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgemlwX2NvZGU6IFBbcC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeTogUFtwLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY2UoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgTCk7XG4gICAgICBjb25zdCB4ID0gYXdhaXQgcShkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkdPT0dMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICAgICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKHYpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICghKChFID0gKGcgPSB4LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGdbMF0pID09IG51bGwgPyB2b2lkIDAgOiBFLmlkKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gWWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IFAsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHgsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKHcpIHtcbiAgICAgIHRocm93IHZlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHcpLCBoKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IHdcbiAgICAgIH0pLCBuZXcgRXJyb3IoKHcgPT0gbnVsbCA/IHZvaWQgMCA6IHcubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgU2UgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maWx0ZXIoKGkpID0+IHtcbiAgICBjb25zdCBzID0gdCA9PT0gdm9pZCAwID8gITAgOiBpLnByb2Nlc3Nvcl9uYW1lID09PSB0LCBhID0gaS5wcm92aWRlciA9PT0gbjtcbiAgICByZXR1cm4gcyAmJiBhO1xuICB9KTtcbiAgaWYgKHIubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke3R9J2ApO1xuICBpZiAoci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke259JyBhbmQgcHJvY2Vzc29yICcke3R9J2ApO1xuICByZXR1cm4gclswXTtcbn0sIFIgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogS2lcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogb3MsXG4gICAgcnVuOiBpc1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogd2ksXG4gICAgcnVuOiBiaVxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiB1c1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogcHMsXG4gICAgcnVuOiBtc1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGhzLFxuICAgIHJ1bjogZ3NcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogQ3MsXG4gICAgcnVuOiBTc1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IEFzLFxuICAgIHJ1bjogSXNcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogUnMsXG4gICAgcnVuOiBUc1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogRnMsIGVycl9fOiBNcyB9ID0gQShcImluaXQtZmxvd3NcIiksIGFlID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG5ldyBDZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogdCxcbiAgICBpbml0aWFsaXplOiBhc3luYyAocikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHQuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgbihyKTtcbiAgICAgICAgRnMoYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaSksIHQuc2V0KGkpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBNcyhg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBHKGkpLCBcIkRldGFpbHM6XCIsIGkpLCB0LnRocm93KGksIEcoaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIERzID0gYXN5bmMgKGUsIG4sIHQpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlKS5tYXAoKHIpID0+IHIuaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IG4sIGZvcm1DYWxsYmFja3M6IHQgfSkpKTtcbn0sIE5zID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IGFlKFwiU3RyaXBlIFBSXCIsIFIuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IGFlKFwiU3RyaXBlIExpbmtcIiwgUi5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogYWUoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFIuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IGFlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFIuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogYWUoXCJMb29wXCIsIFIubG9vcENyeXB0by5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBhZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFIuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBhZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgUi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IExzIH0gPSBBKFwiZm9ybS1jYWxsYmFja3NcIiksIFYgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBJdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBWLFxuICBvbkJsdXI6IFYsXG4gIG9uQ2hhbmdlOiBWLFxuICBvbkxvYWQ6IFYsXG4gIG9uTG9hZEVycm9yOiBWLFxuICBvblZhbGlkYXRpb25FcnJvcjogVixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IFYsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBWLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IFYsXG4gIG9uQ2hlY2tvdXRFcnJvcjogVixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IFZcbn0pLCBaID0gY2xhc3MgWiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKG4pID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFouY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBZbih0LCByID8/IFouTk9PUCwgTHMpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbdF0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gWi5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuWi5OT09QID0gKCkgPT4ge1xufSwgWi5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgbiA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoSXQua2V5b2YoKS5lbnVtKS5mb3JFYWNoKCh0KSA9PiB7XG4gICAgblt0XSA9IFouTk9PUDtcbiAgfSksIG47XG59LCBaLmZyb21PYmplY3QgPSAobikgPT4ge1xuICBjb25zdCB0ID0gbmV3IFooKTtcbiAgcmV0dXJuIHQuc2V0Q2FsbGJhY2tzKEl0LnBhcnNlKG4pKSwgdDtcbn07XG5sZXQgcnQgPSBaO1xuY29uc3QgT3MgPSBcImVycm9yXCIsIFVzID0gXCJkZWJ1Z1wiLCBqcyA9IGNvbnNvbGUuZXJyb3IsIHhzID0gY29uc29sZS5kZWJ1ZztcbnR5cGVvZiB3aW5kb3cgPCBcInVcIiAmJiAod2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MgPSBbXSk7XG5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oLi4uZSkge1xuICBqcy5jYWxsKGNvbnNvbGUsIC4uLmUpLCB3aW5kb3cuX29qc19jb25zb2xlX2NhbGxiYWNrcy5mb3JFYWNoKChuKSA9PiBuKE9zLCAuLi5lKSk7XG59O1xuY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uKC4uLmUpIHtcbiAgeHMuY2FsbChjb25zb2xlLCAuLi5lKSwgd2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MuZm9yRWFjaCgobikgPT4gbihVcywgLi4uZSkpO1xufTtcbmNvbnN0IERuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBQZSA9IDMyLCAkcyA9IDE2LCBObiA9IDEwLCBSdCA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBsZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKGxlIHx8IChsZSA9IHt9KSk7XG5jbGFzcyBFZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobiwgdCkge1xuICAgIHN1cGVyKGAke3R9ICgke259KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSBuO1xuICB9XG59XG5mdW5jdGlvbiBHcyhlKSB7XG4gIGxldCBuID0gTWF0aC5mbG9vcihlKCkgKiBQZSk7XG4gIHJldHVybiBuID09PSBQZSAmJiAobiA9IFBlIC0gMSksIERuLmNoYXJBdChuKTtcbn1cbmZ1bmN0aW9uIFZzKGUpIHtcbiAgY29uc3QgbiA9IHpzKCksIHQgPSBuICYmIChuLmNyeXB0byB8fCBuLm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCByID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gdC5nZXRSYW5kb21WYWx1ZXMociksIHJbMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB0LnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgRWUobGUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24genMoKSB7XG4gIHJldHVybiBCcygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIHFzKGUsIG4pIHtcbiAgbGV0IHQgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICB0ID0gR3MobikgKyB0O1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIFlzKGUsIG4gPSBObikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IEVlKGxlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IFJ0KVxuICAgIHRocm93IG5ldyBFZShsZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtSdH06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBFZShsZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBFZShsZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgdCwgciA9IFwiXCI7XG4gIGZvciAobGV0IGkgPSBuOyBpID4gMDsgaS0tKVxuICAgIHQgPSBlICUgUGUsIHIgPSBEbi5jaGFyQXQodCkgKyByLCBlID0gKGUgLSB0KSAvIFBlO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIEJzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gV3MoZSwgbikge1xuICBjb25zdCB0ID0gVnMoKSwgciA9IERhdGUubm93KCk7XG4gIHJldHVybiBZcyhyLCBObikgKyBxcygkcywgdCk7XG59XG5jb25zdCBMbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBIcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgodCkgPT4gdC5pbmNsdWRlcyhMbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IG4gPSBXcygpO1xuICByZXR1cm4gSnMobiksIG47XG59LCBKcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgbi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7TG59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke24udG9VVENTdHJpbmcoKX1gO1xufTtcbmZ1bmN0aW9uIEtzKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybiBcInVua25vd25cIjtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gd2luZG93O1xuICAgIGlmIChlLm5leHQgfHwgZS5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgaWYgKHdpbmRvdy5fX05VWFRfXyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI19fbnV4dFwiKSlcbiAgICAgIHJldHVybiBcIm51eHRcIjtcbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jdW1lbnQpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoXCJyZWFjdFwiKSkgfHwgQXJyYXkuZnJvbShkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoXCJib2R5ID4gKlwiKSkuZmluZCgocikgPT4gci5fcmVhY3RSb290Q29udGFpbmVyKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgdCA9IHdpbmRvdztcbiAgICByZXR1cm4gdC5WdWUgfHwgdC5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIFpzKGUpIHtcbiAgdmFyIG4sIHQ7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgciA9IHdpbmRvdztcbiAgICAgICAgcmV0dXJuICgobiA9IHIubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IG4udmVyc2lvbikgfHwgKCh0ID0gci5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogdC5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCByID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIHIgPyByLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gUXMoKSB7XG4gIGNvbnN0IGUgPSBLcygpLCBuID0gWnMoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogbiB9O1xufVxuY29uc3QgVHQgPSB6JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgWHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIGVhID0gKGUpID0+IFhzW2VdLCB0YSA9IGFzeW5jIChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKCh0KSA9PiB0Lmpzb24oKSk7XG4gICAgcmV0dXJuIFR0LnBhcnNlKG4uZW52aXJvbm1lbnQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gVHQuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5jbGFzcyBuYSB7XG4gIGNvbnN0cnVjdG9yKG4sIHQsIHIsIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChGdChzLm9yaWdpbikgIT09IEZ0KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5zb3VyY2UgJiYgcy5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IFJyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gbiwgdGhpcy5iYXNlVXJsID0gdCwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gciwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IEZ0ID0gKGUpID0+IG5ldyBVUkwoZSkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gcmEoZSwgbikge1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IG5cbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IFRyKHIpO1xuICBpZiAoIUZyKHIsIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIHI7XG59XG5jbGFzcyBvYSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24obiwgdCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KG4sIHQpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgbiA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiBuO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBpYSA9IChlLCBuLCB0KSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IHIgfSA9IGU7XG4gIHIucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYSAmJiBNdChcImFwcGxlX3BheVwiLCBzLCBuLCB0LCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgTXQoXCJnb29nbGVfcGF5XCIsIHMsIG4sIHQsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHQuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBNdCA9IChlLCBuLCB0LCByLCBpKSA9PiBSLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IHQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogU2UodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBlKSxcbiAgbm9uQ2RlRm9ybUlucHV0czogUSh0LmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiByLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiBuXG59KSwgRHQgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBKLCBlcnJfXzogWCB9ID0gQShcIm9wLWZvcm1cIiksIGVlID0gY2xhc3MgZWUge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgQ2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IENlKCksIHRoaXMuY29udGV4dCA9IG5ldyBDZSgpLCB0aGlzLmluaXRGbG93cyA9IE5zKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoSy5DREVfQlJJREdFKTtcbiAgICAgICAgaS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgaS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihpLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgfSksIGkubW91bnQoXCJib2R5XCIpLCBKKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIEooXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgSihcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRHRcbiAgICAgICAgfSk7XG4gICAgICAgIEooXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIEooXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBEdFxuICAgICAgICB9KTtcbiAgICAgICAgSihcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgcGkoYSwgdGhpcy5kZXZpY2VUb2tlbiksIEooXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGMgPSBlZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIHMsXG4gICAgICAgICAgYSxcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGMpLCBpYSh0aGlzLmluaXRGbG93cywgYywgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgSihcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgRHModGhpcy5pbml0Rmxvd3MsIGMsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKHMudG90YWxBbW91bnRBdG9tcywgcy5jdXJyZW5jeSksIEooXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgaChcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBjb25zdCBzID0gRyhpKTtcbiAgICAgICAgWChcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgcyksIGgoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBzXG4gICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKHMpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChpKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBLLkNERV9CUklER0UgfHwgKHMubm9kZS5zdHlsZS5oZWlnaHQgPSBpKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChpKSwgaChcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihpKSwgaSksIGgoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGksIHMgPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGEgPSBCbi5wYXJzZShpKSwgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGwgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcocyk7XG4gICAgICBjLm5hbWUgPSBgJHthfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHUgPSBuZXcgVVJMKGAvYXBwL3YxLyR7Yy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiB1LnNlYXJjaCA9IGwudG9TdHJpbmcoKSwgYy5zcmMgPSB1LmhyZWYsIGMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShhLCBjKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGksIHMpID0+IHtcbiAgICAgIGNvbnN0IGEgPSB7XG4gICAgICAgIHR5cGU6IGksXG4gICAgICAgIG5vZGU6IHMsXG4gICAgICAgIG1vdW50OiAoYykgPT4ge1xuICAgICAgICAgIHZhciBsO1xuICAgICAgICAgIChsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKSkgPT0gbnVsbCB8fCBsLmFwcGVuZENoaWxkKHMpLCBoKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogaVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGEudHlwZSwgbm9kZTogYS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtLLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtLLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbSy5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW0suQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFtLLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tpXSA9IGEsIGE7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGkpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGkuc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIElyKGkuc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGkpID0+IHtcbiAgICAgIHJhKGkubm9kZSkudGhlbigocykgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oaS50eXBlLCBzKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBpLnR5cGUgPT09IEsuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfSkuY2F0Y2goKHMpID0+IFgoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIHMpKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgaChcInN1Ym1pdF9jYXJkXCIpO1xuICAgICAgY29uc3QgaSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICBYKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgUi5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBpLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFNlKGkuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShpLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBYKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBzID0ge1xuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6ICQuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogJC5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiAkLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6ICQuYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH0sIGEgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbYywgbF0pID0+ICh7XG4gICAgICAgIG5hbWU6IHNbY10gPz8gYyxcbiAgICAgICAgLi4ubC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBoKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBhXG4gICAgICB9KSwgYTtcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoaSwgcykgPT4ge1xuICAgICAgaChcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwge1xuICAgICAgICBtZXRob2Q6IGksXG4gICAgICAgIHNldHRpbmdzOiBzXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGEgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWEpIHtcbiAgICAgICAgWChcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlICQucG9ja3l0UGF5cGFsOlxuICAgICAgICAgIHJldHVybiBSLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogU2UoYS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoYS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgJC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIFgoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgWChcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYy5zdGFydEZsb3cocyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgWChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjLnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgWChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGMuc3RhcnRGbG93KHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5sb29wQ3J5cHRvOlxuICAgICAgICAgIHJldHVybiBSLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IFNlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogUShhLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcWUoaSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIEooXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgaSAmJiBpLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIGVpKCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanMsIGgoXCJmb3JtX2Rlc3Ryb3llZFwiKTtcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChpKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGkpO1xuICAgIH0sIGVlLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi4yNlwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSBuLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4ubiwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHJ0LmZyb21PYmplY3QobiksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gbi5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBvYSgpLCB0aGlzLmRldmljZVRva2VuID0gSHMoKSwgWG8oKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogdCwgdmVyc2lvbjogciB9ID0gUXMoKTtcbiAgICB0YSh0aGlzLmJhc2VVcmwpLnRoZW4oKGkpID0+IHtcbiAgICAgIG50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IG50LnNldCh7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBlbnZpcm9ubWVudDogaSxcbiAgICAgICAgZnJhbWV3b3JrOiB0LFxuICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiByLFxuICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICB9KTtcbiAgICB9KSwgaChcImZvcm1faW5pdFwiKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgbmEodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5lZS5vanNGbG93cyA9IFIsIGVlLmFzc2lnbkFzU2luZ2xldG9uID0gKG4pID0+IHtcbiAgaWYgKGVlLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSBuO1xufSwgZWUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIGVlLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAobiwgdCwgciwgaSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKG4uYmFzZVVybCA/PyBvdCkub3JpZ2luLFxuICBmb3JtRGl2OiBpLFxuICBlbGVtZW50c1Nlc3Npb25JZDogdC5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogcixcbiAgY3VzdG9tSW5pdFBhcmFtczogbi5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBOdCA9IGVlO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe30pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyQxID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtGZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7RmUucmVkLmJvbGQoXCJvanMvXCIpfSR7RmUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XG4gIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xuICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGcubmV4dCA9IHZlcmIoMCksIGdbXCJ0aHJvd1wiXSA9IHZlcmIoMSksIGdbXCJyZXR1cm5cIl0gPSB2ZXJiKDIpLCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gX192YWx1ZXMobykge1xuICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcbiAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5cbmZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG5mdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gYXdhaXRSZXR1cm4oZikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGYsIHJlamVjdCk7IH07IH1cbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XG4gIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cbiAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XG4gIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcbiAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDbGFzcyhjcmVhdGVJbXBsKSB7XG4gICAgdmFyIF9zdXBlciA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICBFcnJvci5jYWxsKGluc3RhbmNlKTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICB9O1xuICAgIHZhciBjdG9yRnVuYyA9IGNyZWF0ZUltcGwoX3N1cGVyKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvckZ1bmM7XG4gICAgcmV0dXJuIGN0b3JGdW5jO1xufVxuXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBVbnN1YnNjcmlwdGlvbkVycm9ySW1wbChlcnJvcnMpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnNcbiAgICAgICAgICAgID8gZXJyb3JzLmxlbmd0aCArIFwiIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XFxuXCIgKyBlcnJvcnMubWFwKGZ1bmN0aW9uIChlcnIsIGkpIHsgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgZXJyLnRvU3RyaW5nKCk7IH0pLmpvaW4oJ1xcbiAgJylcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdVbnN1YnNjcmlwdGlvbkVycm9yJztcbiAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfTtcbn0pO1xuXG5mdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihpbml0aWFsVGVhcmRvd24pIHtcbiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247XG4gICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICAgICAgdmFyIGVycm9ycztcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgICAgICBpZiAoX3BhcmVudGFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9wYXJlbnRhZ2VfMSA9IF9fdmFsdWVzKF9wYXJlbnRhZ2UpLCBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCk7ICFfcGFyZW50YWdlXzFfMS5kb25lOyBfcGFyZW50YWdlXzFfMSA9IF9wYXJlbnRhZ2VfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfMS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcGFyZW50YWdlXzFfMSAmJiAhX3BhcmVudGFnZV8xXzEuZG9uZSAmJiAoX2EgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2EuY2FsbChfcGFyZW50YWdlXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfcGFyZW50YWdlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yID8gZS5lcnJvcnMgOiBbZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgICAgIGlmIChfZmluYWxpemVycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9maW5hbGl6ZXJzXzEgPSBfX3ZhbHVlcyhfZmluYWxpemVycyksIF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpOyAhX2ZpbmFsaXplcnNfMV8xLmRvbmU7IF9maW5hbGl6ZXJzXzFfMSA9IF9maW5hbGl6ZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluYWxpemVyID0gX2ZpbmFsaXplcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzXzFfMSAmJiAhX2ZpbmFsaXplcnNfMV8xLmRvbmUgJiYgKF9iID0gX2ZpbmFsaXplcnNfMS5yZXR1cm4pKSBfYi5jYWxsKF9maW5hbGl6ZXJzXzEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGVhcmRvd24gJiYgdGVhcmRvd24gIT09IHRoaXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIodGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93bi5jbG9zZWQgfHwgdGVhcmRvd24uX2hhc1BhcmVudCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKF9hID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10pLnB1c2godGVhcmRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICByZXR1cm4gX3BhcmVudGFnZSA9PT0gcGFyZW50IHx8IChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KSk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpID8gKF9wYXJlbnRhZ2UucHVzaChwYXJlbnQpLCBfcGFyZW50YWdlKSA6IF9wYXJlbnRhZ2UgPyBbX3BhcmVudGFnZSwgcGFyZW50XSA6IHBhcmVudDtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIGlmIChfcGFyZW50YWdlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgYXJyUmVtb3ZlKF9wYXJlbnRhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pO1xuICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5FTVBUWSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlbXB0eSA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgZW1wdHkuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcbn0oKSk7XG52YXIgRU1QVFlfU1VCU0NSSVBUSU9OID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG5cbnZhciBjb25maWcgPSB7XG4gICAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gICAgUHJvbWlzZTogdW5kZWZpbmVkLFxuICAgIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6IGZhbHNlLFxuICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UsXG59O1xuXG52YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbmZ1bmN0aW9uIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycikge1xuICAgIHRpbWVvdXRQcm92aWRlci5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IH1cblxuZnVuY3Rpb24gZXJyb3JDb250ZXh0KGNiKSB7XG4gICAge1xuICAgICAgICBjYigpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChpc1N1YnNjcmlwdGlvbihkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBFTVBUWV9PQlNFUlZFUjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFNhZmVTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaWJlcjtcbn0oU3Vic2NyaXB0aW9uKSk7XG52YXIgX2JpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7XG59XG52YXIgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgfVxuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmVycm9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXI7XG59KCkpO1xudmFyIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7XG4gICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgbmV4dDogKG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUgIT09IG51bGwgJiYgY29tcGxldGUgIT09IHZvaWQgMCA/IGNvbXBsZXRlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzE7XG4gICAgICAgICAgICBpZiAoX3RoaXMgJiYgY29uZmlnLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBvYnNlcnZlck9yTmV4dC5uZXh0ICYmIGJpbmQob2JzZXJ2ZXJPck5leHQubmV4dCwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG9ic2VydmVyT3JOZXh0LmVycm9yICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuZXJyb3IsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IG5ldyBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcik7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxudmFyIEVNUFRZX09CU0VSVkVSID0ge1xuICAgIGNsb3NlZDogdHJ1ZSxcbiAgICBuZXh0OiBub29wLFxuICAgIGVycm9yOiBkZWZhdWx0RXJyb3JIYW5kbGVyLFxuICAgIGNvbXBsZXRlOiBub29wLFxufTtcblxudmFyIG9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLm9ic2VydmFibGUpIHx8ICdAQG9ic2VydmFibGUnOyB9KSgpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gICAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIHBpcGVGcm9tQXJyYXkoZm5zKSB7XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aXR5O1xuICAgIH1cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcGlwZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGZucy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGZuKSB7IHJldHVybiBmbihwcmV2KTsgfSwgaW5wdXQpO1xuICAgIH07XG59XG5cbnZhciBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZSkge1xuICAgICAgICBpZiAoc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSBzdWJzY3JpYmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgb2JzZXJ2YWJsZS5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIChvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gaXNTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0KSA/IG9ic2VydmVyT3JOZXh0IDogbmV3IFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMsIG9wZXJhdG9yID0gX2Eub3BlcmF0b3IsIHNvdXJjZSA9IF9hLnNvdXJjZTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvci5jYWxsKHN1YnNjcmliZXIsIHNvdXJjZSlcbiAgICAgICAgICAgICAgICA6IHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3Vic2NyaWJlKHN1YnNjcmliZXIpXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHNpbmspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUoc2luayk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKG5leHQsIHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGVbb2JzZXJ2YWJsZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24gKHgpIHsgcmV0dXJuICh2YWx1ZSA9IHgpOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiByZWplY3QoZXJyKTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVzb2x2ZSh2YWx1ZSk7IH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUuY3JlYXRlID0gZnVuY3Rpb24gKHN1YnNjcmliZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlO1xufSgpKTtcbmZ1bmN0aW9uIGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2ZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5uZXh0KSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGlzU3Vic2NyaWJlcih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB8fCAoaXNPYnNlcnZlcih2YWx1ZSkgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gaGFzTGlmdChzb3VyY2UpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2UubGlmdCk7XG59XG5mdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKTtcbn1cbnZhciBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vbkZpbmFsaXplID0gb25GaW5hbGl6ZTtcbiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTtcbiAgICAgICAgX3RoaXMuX25leHQgPSBvbk5leHRcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25OZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gb25FcnJvclxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjtcbiAgICAgICAgX3RoaXMuX2NvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPcGVyYXRvclN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgICAgICAgIHZhciBjbG9zZWRfMSA9IHRoaXMuY2xvc2VkO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgIWNsb3NlZF8xICYmICgoX2EgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsKCkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdPYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdvYmplY3QgdW5zdWJzY3JpYmVkJztcbiAgICB9O1xufSk7XG5cbnZhciBTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0KCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YmplY3QucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQW5vbnltb3VzU3ViamVjdCh0aGlzLCB0aGlzKTtcbiAgICAgICAgc3ViamVjdC5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShfdGhpcy5vYnNlcnZlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2MgJiYgIV9jLmRvbmUgJiYgKF9hID0gX2IucmV0dXJuKSkgX2EuY2FsbChfYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmhhc0Vycm9yID0gX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzO1xuICAgICAgICAgICAgICAgIHdoaWxlIChvYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKChfYSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5uZXJTdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIG9ic2VydmVycyA9IF9hLm9ic2VydmVycztcbiAgICAgICAgaWYgKGhhc0Vycm9yIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBvYnNlcnZlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XG4gICAgICAgIG9ic2VydmFibGUuc291cmNlID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBTdWJqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0O1xufShPYnNlcnZhYmxlKSk7XG52YXIgQW5vbnltb3VzU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFub255bW91c1N1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdChkZXN0aW5hdGlvbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgdmFsdWUpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5lcnJvcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGVycik7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3Vic2NyaWJlKHN1YnNjcmliZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgfTtcbiAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuXG52YXIgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICByZXR1cm4gQWN0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcblxudmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgcmV0dXJuIChjbGVhckludGVydmFsKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG5cbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5cbnZhciBTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjaGVkdWxlcihzY2hlZHVsZXJBY3Rpb25DdG9yLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGRhdGVUaW1lc3RhbXBQcm92aWRlci5ub3c7XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5cbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcblxudmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcblxudmFyIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ICYmIHR5cGVvZiB4Lmxlbmd0aCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHggIT09ICdmdW5jdGlvbic7IH0pO1xuXG5mdW5jdGlvbiBpc1Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmFsdWUudGhlbik7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtvYnNlcnZhYmxlXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZShvYmopIHtcbiAgICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChpbnB1dCAhPT0gbnVsbCAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnID8gJ2FuIGludmFsaWQgb2JqZWN0JyA6IFwiJ1wiICsgaW5wdXQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgIVN5bWJvbC5pdGVyYXRvcikge1xuICAgICAgICByZXR1cm4gJ0BAaXRlcmF0b3InO1xuICAgIH1cbiAgICByZXR1cm4gU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcblxuZnVuY3Rpb24gaXNJdGVyYWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFtpdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yXzEoKSB7XG4gICAgICAgIHZhciByZWFkZXIsIF9hLCB2YWx1ZSwgZG9uZTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDI7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgX2EgPSBfYi5zZW50KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2b2lkIDApXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIFs0LCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDJdO1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpO1xufVxuXG5mdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUludGVyb3BPYnNlcnZhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUl0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpO1xufVxuZnVuY3Rpb24gZnJvbUludGVyb3BPYnNlcnZhYmxlKG9iaikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb2JzID0gb2JqW29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZShhcnJheSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pXG4gICAgICAgICAgICAudGhlbihudWxsLCByZXBvcnRVbmhhbmRsZWRFcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pKTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikge1xuICAgIHZhciBhc3luY0l0ZXJhYmxlXzEsIGFzeW5jSXRlcmFibGVfMV8xO1xuICAgIHZhciBlXzIsIF9hO1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlLCBlXzJfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYikge1xuICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pO1xuICAgICAgICAgICAgICAgICAgICBhc3luY0l0ZXJhYmxlXzEgPSBfX2FzeW5jVmFsdWVzKGFzeW5jSXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gWzQsIGFzeW5jSXRlcmFibGVfMS5uZXh0KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgPSBfYi5zZW50KCksICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhc3luY0l0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMywgMV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGVfMl8xID0gX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBhc3luY0l0ZXJhYmxlXzEucmV0dXJuKSkpIHJldHVybiBbMywgOF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX2EuY2FsbChhc3luY0l0ZXJhYmxlXzEpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSA4O1xuICAgICAgICAgICAgICAgIGNhc2UgODogcmV0dXJuIFszLCAxMF07XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXJyb3IoZXJyb3JPckVycm9yRmFjdG9yeSwgc2NoZWR1bGVyKSB7XG4gICAgdmFyIGVycm9yRmFjdG9yeSA9IGlzRnVuY3Rpb24oZXJyb3JPckVycm9yRmFjdG9yeSkgPyBlcnJvck9yRXJyb3JGYWN0b3J5IDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3JPckVycm9yRmFjdG9yeTsgfTtcbiAgICB2YXIgaW5pdCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycm9yRmFjdG9yeSgpKTsgfTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoaW5pdCk7XG59XG5cbnZhciBFbXB0eUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7IHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICBfc3VwZXIodGhpcyk7XG4gICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9ICdubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSc7XG59OyB9KTtcblxuZnVuY3Rpb24gbGFzdFZhbHVlRnJvbShzb3VyY2UsIGNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBfaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIF92YWx1ZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBfaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChfaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cblxudmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnLCBzY2hlZHVsZXJBcmcpIHtcbiAgICB2YXIgX2EgPSAoaXNWYWxpZERhdGUoY29uZmlnKSA/IHsgZmlyc3Q6IGNvbmZpZyB9IDogdHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicgPyB7IGVhY2g6IGNvbmZpZyB9IDogY29uZmlnKSwgZmlyc3QgPSBfYS5maXJzdCwgZWFjaCA9IF9hLmVhY2gsIF9iID0gX2Eud2l0aCwgX3dpdGggPSBfYiA9PT0gdm9pZCAwID8gdGltZW91dEVycm9yRmFjdG9yeSA6IF9iLCBfYyA9IF9hLnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2EubWV0YSwgbWV0YSA9IF9kID09PSB2b2lkIDAgPyBudWxsIDogX2Q7XG4gICAgaWYgKGZpcnN0ID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHRpbWVvdXQgcHJvdmlkZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgdGltZXJTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgIHZhciBzdGFydFRpbWVyID0gZnVuY3Rpb24gKGRlbGF5KSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9IGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbm5lckZyb20oX3dpdGgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YTogbWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbGFzdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbjogc2VlbixcbiAgICAgICAgICAgICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICB9O1xuICAgICAgICBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzZWVuKys7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKGxhc3RWYWx1ZSA9IHZhbHVlKSk7XG4gICAgICAgICAgICBlYWNoID4gMCAmJiBzdGFydFRpbWVyKGVhY2gpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCEodGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkpIHtcbiAgICAgICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgICAgIXNlZW4gJiYgc3RhcnRUaW1lcihmaXJzdCAhPSBudWxsID8gKHR5cGVvZiBmaXJzdCA9PT0gJ251bWJlcicgPyBmaXJzdCA6ICtmaXJzdCAtIHNjaGVkdWxlci5ub3coKSkgOiBlYWNoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHRpbWVvdXRFcnJvckZhY3RvcnkoaW5mbykge1xuICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoaW5mbyk7XG59XG5cbmNsYXNzIExvYWRlZE9uY2VQdWJsaXNoZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogdHJ1ZSwgbG9hZGVkVmFsdWU6IHZhbHVlIH07XG4gICAgICB0aGlzLl9zdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgdGhpcy50aHJvdyA9IChlcnJvciwgZXJyTXNnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogZmFsc2UsIGVycm9yLCBlcnJNc2cgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9ICh2YWx1ZUlmTm90TG9hZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZUlmTm90TG9hZGVkO1xuICAgIH07XG4gICAgdGhpcy5zdWJzY3JpYmUgPSAoZm4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLndhaXRGb3JMb2FkID0gKHRpbWVvdXRDb25maWcpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIikgYXNzZXJ0TmV2ZXIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0aW1lb3V0UGFyYW1zID0ge1xuICAgICAgICBmaXJzdDogdGltZW91dENvbmZpZy50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcih0aW1lb3V0Q29uZmlnLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuX3N1YmplY3QucGlwZSh0aW1lb3V0KHRpbWVvdXRQYXJhbXMpKSk7XG4gICAgfTtcbiAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6IGZhbHNlIH07XG4gICAgdGhpcy5fc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18oXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmF0Y2ggPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIEJBVENIX1NJWkUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXRjaFBheWxvYWQgPSB7XG4gICAgICAgIGV2ZW50czogYmF0Y2gubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudF9uYW1lOiBldmVudC5ldmVudE5hbWUsXG4gICAgICAgICAgICBkZXZpY2VfdG9rZW46IGNvbnRleHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgICAgICAgLi4uZXZlbnQuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG5vbmNlOiBldmVudC5ub25jZSxcbiAgICAgICAgICAgICAgZGF0ZXRpbWU6IGV2ZW50LmRhdGV0aW1lLFxuICAgICAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGV2ZW50LnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogY29udGV4dC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgICAuLi5ldmVudC5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgICBjb25zdCBjb25udG9VcmwgPSBnZXRDb25udG9VcmwoY29udGV4dC5lbnZpcm9ubWVudCk7XG4gICAgICBjb25zdCBtZXRyaWNzUm91dGVyID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGNvbm50b1VybCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1ldHJpY3NSb3V0ZXIudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmF0Y2hQYXlsb2FkKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyhcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKSB7XG4gICAgYmF0Y2guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGV2ZW50c1RvS2VlcCA9IGJhdGNoLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmF0dGVtcHRDb3VudCA8IE1BWF9SRVRSWV9BVFRFTVBUUyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICB0aGlzLnF1ZXVlID0gWy4uLmV2ZW50c1RvS2VlcCwgLi4udGhpcy5xdWV1ZV07XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICAgIG1ldHJpY3NRdWV1ZS5wcm9jZXNzUXVldWUoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgUGF5SW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheUluU3RhdGUyKSA9PiB7XG4gIFBheUluU3RhdGUyW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQkFMQU5DRVwiXSA9IFwiY29uZmlybWluZ0JhbGFuY2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcImNvbmZpcm1pbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiVVBEQVRJTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwidXBkYXRpbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiU0lHTklOR19NRVNTQUdFXCJdID0gXCJzaWduaW5nTWVzc2FnZVwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX0NVU1RPTUVSXCJdID0gXCJjcmVhdGluZ0N1c3RvbWVyXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IENBVEVHT1JZX0VSUk9SID0gXCJlcnJvclwiO1xuY29uc3QgQ0FURUdPUllfREVCVUcgPSBcImRlYnVnXCI7XG5jb25zdCBfZXJyb3IgPSBjb25zb2xlLmVycm9yO1xuY29uc3QgX2RlYnVnID0gY29uc29sZS5kZWJ1ZztcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIHdpbmRvdy5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzID0gW107XG59XG5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oLi4uYXJncykge1xuICBfZXJyb3IuY2FsbChjb25zb2xlLCAuLi5hcmdzKTtcbiAgd2luZG93Ll9vanNfY29uc29sZV9jYWxsYmFja3MuZm9yRWFjaCgoY2IpID0+IGNiKENBVEVHT1JZX0VSUk9SLCAuLi5hcmdzKSk7XG59O1xuY29uc29sZS5kZWJ1ZyA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgX2RlYnVnLmNhbGwoY29uc29sZSwgLi4uYXJncyk7XG4gIHdpbmRvdy5fb2pzX2NvbnNvbGVfY2FsbGJhY2tzLmZvckVhY2goKGNiKSA9PiBjYihDQVRFR09SWV9ERUJVRywgLi4uYXJncykpO1xufTtcblxueiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSk7XG5jb25zdCBjb25udG9CYXNlVXJscyA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufTtcbmNvbnN0IGdldENvbm50b1VybCA9IChlbnYpID0+IHtcbiAgcmV0dXJuIGNvbm50b0Jhc2VVcmxzW2Vudl07XG59O1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKE50LmdldEluc3RhbmNlKCkpIHtcbiAgICBOdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gTnQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgTnQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAvYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC9gLCBiYXNlVXJsKTtcbiAgdXJsLnNlYXJjaCA9IHF1ZXJ5U3RyaW5nO1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IHVybC50b1N0cmluZygpLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCBQYXlJblN0YXRlLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFB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RU1TLEtBQWlCLENBQUMsRUFBRSxRQUFBcEIsRUFBTyxNQUNSLGdCQUFBTixFQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsU0FBUyxDQUFDLEdBR3RGQyxLQUFjLENBQUMsRUFBRSxRQUFBdEIsRUFBTyxNQUNMLGdCQUFBTixFQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsS0FBSyxDQUFDLEdBR2xGRSxLQUFvQixDQUFDLEVBQUUsUUFBQXZCLEVBQU8sTUFDWCxnQkFBQU4sRUFBSUksSUFBYyxFQUFFLFFBQUFFLEdBQVEsYUFBYXFCLEdBQWdCLFlBQVksQ0FBQyxHQUd6RkcsS0FBb0IsQ0FBQyxFQUFFLFFBQUF4QixFQUFPLE1BQ1gsZ0JBQUFOLEVBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJGZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAib3QiLCAiVW4iLCAiam4iLCAieG4iLCAiJG4iLCAiR24iLCAiWGUiLCAibiIsICJWbiIsICJ6biIsICJxbiIsICJHIiwgIlluIiwgInQiLCAiciIsICJJIiwgImsiLCAiVSIsICJwIiwgIk90IiwgIlV0IiwgImp0IiwgInh0IiwgIksiLCAiQm4iLCAiR2UiLCAiV24iLCAiQiIsICJIbiIsICJKbiIsICJLbiIsICJabiIsICJRbiIsICJYbiIsICJlciIsICJ0ciIsICJuciIsICJyciIsICJvciIsICJpciIsICJBZSIsICJzciIsICJhciIsICJjciIsICJsciIsICJ1ciIsICJkciIsICJwciIsICJpdCIsICJtciIsICJ5ciIsICJmciIsICJUIiwgIl9yIiwgImhyIiwgIiR0IiwgImdyIiwgIndyIiwgIkd0IiwgImJyIiwgInZyIiwgIkVyIiwgIlZlIiwgInB0IiwgInN0IiwgIkNyIiwgIlNyIiwgInMiLCAiYSIsICJQciIsICJrciIsICJBciIsICJpIiwgImMiLCAiSXIiLCAiUSIsICJSciIsICJUciIsICJGciIsICJNciIsICJWdCIsICJ6dCIsICJEciIsICJOciIsICJfZSIsICJMciIsICJPciIsICJxdCIsICJVciIsICJqciIsICJ4ciIsICJtdCIsICJZdCIsICJ5dCIsICJCdCIsICIkciIsICJHciIsICJXdCIsICJWciIsICJ6ciIsICJxciIsICJZciIsICJCciIsICJIdCIsICJXciIsICJIciIsICJKciIsICJLciIsICJaciIsICJRciIsICJYciIsICJlbyIsICJ0byIsICJuZSIsICJoIiwgImxuIiwgInVlIiwgIkEiLCAiZXQiLCAicmUiLCAibm8iLCAiZiIsICJKdCIsICJ5ZSIsICJVZSIsICJqZSIsICJtZSIsICJybyIsICJ5IiwgIm0iLCAiZyIsICJFIiwgInciLCAiXyIsICJvbyIsICJ6ZSIsICJLZSIsICJ4ZSIsICJJZSIsICJmdCIsICJLdCIsICJadCIsICJRdCIsICJYdCIsICJlbiIsICJfdCIsICJOZSIsICJhdCIsICJjbyIsICJ0dCIsICJpbyIsICJaZSIsICJzbyIsICJNZSIsICJhbyIsICJjdCIsICJsbyIsICJ1byIsICJ0ZSIsICJtbyIsICJodCIsICJwbyIsICJ5byIsICJmbyIsICJfbyIsICJobyIsICJnbyIsICJ0biIsICJndCIsICJ3byIsICJibyIsICJ3dCIsICJ2byIsICJidCIsICJFbyIsICJDbyIsICJTbyIsICJQbyIsICJrbyIsICJBbyIsICJJbyIsICJSbyIsICJUbyIsICJGbyIsICJNbyIsICJEbyIsICJObyIsICJMbyIsICJPbyIsICJVbyIsICJubiIsICJqbyIsICJ4byIsICIkbyIsICJHbyIsICJWbyIsICJ6byIsICJxbyIsICJZbyIsICJCbyIsICJXbyIsICJIbyIsICJDIiwgIlAiLCAiQ2UiLCAicWUiLCAibnQiLCAidnQiLCAiSm8iLCAiS28iLCAiWm8iLCAiRGUiLCAiUW8iLCAiZWEiLCAicm4iLCAib24iLCAic24iLCAiWG8iLCAiZWkiLCAiYW4iLCAiTiIsICJuaSIsICJ0aSIsICJyaSIsICJEIiwgImhlIiwgIm9pIiwgImlpIiwgInEiLCAic2kiLCAiYWkiLCAiY2kiLCAiZ2UiLCAibGkiLCAiRXQiLCAidWkiLCAibHQiLCAiY24iLCAiZGkiLCAidXQiLCAicGkiLCAidW4iLCAiZGEiLCAibWkiLCAiUmUiLCAiVyIsICJ5aSIsICJZZSIsICJkbiIsICJwbiIsICJvZSIsICJmaSIsICJDdCIsICJGIiwgIl9pIiwgImhpIiwgImdpIiwgIndpIiwgIlIiLCAiRWkiLCAiYmkiLCAidmkiLCAiZCIsICJsIiwgInUiLCAiQ2kiLCAibW4iLCAiU2kiLCAiUGkiLCAiQmUiLCAieW4iLCAia2kiLCAiQWkiLCAiSWkiLCAiZm4iLCAiUmkiLCAiVGkiLCAiX24iLCAiRmkiLCAiTWkiLCAiRGkiLCAiTmkiLCAiZHQiLCAiTGkiLCAiT2kiLCAiVWkiLCAiamkiLCAieGkiLCAiaG4iLCAiZ24iLCAiJGkiLCAiR2kiLCAiZmUiLCAia2UiLCAiVmkiLCAid24iLCAiemkiLCAicWkiLCAiU3QiLCAiWWkiLCAiQmkiLCAiV2kiLCAiSGkiLCAiSmkiLCAiUyIsICJQdCIsICJrdCIsICJLaSIsICJ0cyIsICJlcyIsICJaaSIsICJRaSIsICJYaSIsICJZIiwgImJuIiwgIk8iLCAibnMiLCAicnMiLCAib3MiLCAiU2UiLCAiaXMiLCAiYXMiLCAic3MiLCAiY3MiLCAiSCIsICJBdCIsICJscyIsICJ1cyIsICJ4IiwgImRlIiwgInYiLCAiTCIsICJXZSIsICJRZSIsICJFbiIsICJIZSIsICJkcyIsICJDbiIsICJ6IiwgInBlIiwgInBzIiwgIm1zIiwgIk9uIiwgIlRlIiwgImllIiwgIkplIiwgInNlIiwgIndlIiwgIlNuIiwgIlBuIiwgImtuIiwgIkFuIiwgIkxlIiwgInlzIiwgImZzIiwgIl9zIiwgImJlIiwgIkluIiwgImhzIiwgImdzIiwgIndzIiwgImJzIiwgImoiLCAiUm4iLCAidnMiLCAiRXMiLCAiQ3MiLCAiU3MiLCAiUHMiLCAia3MiLCAiVG4iLCAiRm4iLCAiT2UiLCAiTW4iLCAiQXMiLCAiSXMiLCAiY2UiLCAidmUiLCAiUnMiLCAiVHMiLCAiRnMiLCAiTXMiLCAiYWUiLCAiRHMiLCAiTnMiLCAiTHMiLCAiViIsICJJdCIsICJaIiwgInJ0IiwgIk9zIiwgIlVzIiwgImpzIiwgInhzIiwgIkRuIiwgIlBlIiwgIiRzIiwgIk5uIiwgIlJ0IiwgImxlIiwgIkVlIiwgIkdzIiwgIlZzIiwgInpzIiwgIkJzIiwgInFzIiwgIllzIiwgIldzIiwgIkxuIiwgIkhzIiwgIkpzIiwgIktzIiwgIlpzIiwgIlFzIiwgIlR0IiwgIlhzIiwgInRhIiwgIm5hIiwgIkZ0IiwgInJhIiwgIm9hIiwgImlhIiwgIk10IiwgIkR0IiwgIkoiLCAiWCIsICJlZSIsICJOdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiYiIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJ2ZXJiIiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAiX19yZWFkIiwgIl9fc3ByZWFkQXJyYXkiLCAiZnJvbSIsICJwYWNrIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJhd2FpdFJldHVybiIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgImdldENvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAieiQxIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJSZXF1aXJlZFN0cmluZyIsICJGaWVsZE5hbWUiLCAiT3B0aW9uYWxTdHJpbmciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIkNBVEVHT1JZX0VSUk9SIiwgIkNBVEVHT1JZX0RFQlVHIiwgIl9lcnJvciIsICJfZGVidWciLCAiY29ubnRvQmFzZVVybHMiLCAiZW52IiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJwcm9wcyIsICJmb3JtQ2FsbGJhY2tzIiwgIk50IiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAidXNlU3RhdGUiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAidXNlQ2FsbGJhY2siLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAidXNlRWZmZWN0IiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgImpzeCIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAic3R5bGVzIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXJsIiwgIkNhcmRDdmNFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K