@getopenpay/openpay-js-react 0.5.6-alpha.40d8198 → 0.5.7-alpha.589ead1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-CSQqe-gs-B3DJuxpM.js → Resource-DOus_ZgM-Mab_hntA.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-BFEgu9Fm-DSaWl4RH.js → SimpleSpanProcessor-CM69ZY86-DfbXEky-.js} +7 -7
  4. package/dist/{detect-resources-0VRkt0_S-B7pDvtCW.js → detect-resources-CKlREnE1-jVoaU0al.js} +7 -7
  5. package/dist/{diag-api-CWXmsWxW-D2UyiXF8.js → diag-api-9UkoA0fD-D442rk12.js} +2 -2
  6. package/dist/{index-CyXdDI9u-CEtf-okB.js → index-Ba9JWY7G-Dmq7S0Rm.js} +5 -5
  7. package/dist/{index-B_Y-hENn-7_5uzInG.js → index-BhTN40GQ-94sNKVuv.js} +2 -2
  8. package/dist/{index-WQ5HKY_i-DLrN4pu5.js → index-Bj58kmG4-bSOjh_Ld.js} +2 -2
  9. package/dist/{index-pIKBW0A4-uvpTTI2Z.js → index-BwO6HhG6-BURuL51l.js} +5 -5
  10. package/dist/{index-m0U7ifot-CmFuSPjH.js → index-ByMgJUYa-bYhku7I6.js} +2 -2
  11. package/dist/{index-DMBksXm9-CaggeDIk.js → index-C7YiUawV-ARl9Q63K.js} +6 -6
  12. package/dist/{index-BEeh_G60-BSDi6lYb.js → index-Ce2ePZ8k-C7wO9Z39.js} +5 -5
  13. package/dist/{index-FpG6S5F7.js → index-ChpWq8Ro.js} +4 -5
  14. package/dist/{index-Cx5uJFBz-C9QZFMv9.js → index-Dn6JjW_Y-Bw7CS2TB.js} +6 -6
  15. package/dist/{index-CaYojsWg-CJjYyQeX.js → index-sgQY6VIG-BsiX-wtS.js} +2 -2
  16. package/dist/index.js +1 -1
  17. package/dist/{metrics-api-D4Lr6IRo-gcjb_3dh.js → metrics-api-CCkH7Jb4-DRIk3haB.js} +2 -2
  18. package/dist/{sdk-info-B7jPqYX--CgHM53NH.js → sdk-info-D5xSsGJp-C6MV519b.js} +2 -2
  19. package/dist/{url-DpVwN2IR-Ded9HNg-.js → url-B20HovTx-w3MIBkQV.js} +2 -2
  20. package/dist/{utils-BGFnJtOj-BqqTSa8M.js → utils-HiO3paSf-CRdTqgJB.js} +2 -2
  21. package/dist/{utils-CJqtGWHp-DFuVFPG2.js → utils-SQrRAD5o-B-ZvCp4P.js} +4 -4
  22. package/package.json +1 -1
@@ -7618,12 +7618,11 @@ const Ip = Q(
7618
7618
  ...s.checkout_settings
7619
7619
  }), f = Yr(d, s.checkout_settings);
7620
7620
  Ue(`Starting payment flow... Mode: ${s.mode}`);
7621
- const h = ze(), m = s.mode !== "setup", _ = {
7621
+ const h = ze(), m = !1, _ = {
7622
7622
  payment_provider: u.provider,
7623
7623
  checkout_payment_method: u,
7624
7624
  use_pay_first_flow: m,
7625
7625
  pay_first_flow_cart_info: m ? {
7626
- // TODO add coupon and cart adjusted line items later
7627
7626
  line_items: s.line_items,
7628
7627
  displayed_total_amount_atom: s.amount_total_atom
7629
7628
  } : void 0,
@@ -8341,7 +8340,7 @@ let Gn;
8341
8340
  const _m = async (e, t) => {
8342
8341
  if (typeof window > "u")
8343
8342
  return;
8344
- const r = await import("./index-pIKBW0A4-uvpTTI2Z.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-Cx5uJFBz-C9QZFMv9.js"), { FetchInstrumentation: c } = s, l = await import("./index-CaYojsWg-CJjYyQeX.js"), { ZoneContextManager: u } = l, d = await import("./index-DMBksXm9-CaggeDIk.js"), { registerInstrumentations: f } = d, h = await import("./index-CyXdDI9u-CEtf-okB.js"), { Resource: m } = h, _ = await import("./detect-resources-0VRkt0_S-B7pDvtCW.js").then((ue) => ue.d), { detectResourcesSync: y } = _, g = await import("./index-WQ5HKY_i-DLrN4pu5.js"), { OTLPTraceExporter: w } = g, b = await import("./index-B_Y-hENn-7_5uzInG.js"), { B3Propagator: E, B3InjectEncoding: M } = b, C = await import("./index-m0U7ifot-CmFuSPjH.js"), { BatchSpanProcessor: x } = C;
8343
+ const r = await import("./index-BwO6HhG6-BURuL51l.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-Dn6JjW_Y-Bw7CS2TB.js"), { FetchInstrumentation: c } = s, l = await import("./index-sgQY6VIG-BsiX-wtS.js"), { ZoneContextManager: u } = l, d = await import("./index-C7YiUawV-ARl9Q63K.js"), { registerInstrumentations: f } = d, h = await import("./index-Ba9JWY7G-Dmq7S0Rm.js"), { Resource: m } = h, _ = await import("./detect-resources-CKlREnE1-jVoaU0al.js").then((ue) => ue.d), { detectResourcesSync: y } = _, g = await import("./index-Bj58kmG4-bSOjh_Ld.js"), { OTLPTraceExporter: w } = g, b = await import("./index-BhTN40GQ-94sNKVuv.js"), { B3Propagator: E, B3InjectEncoding: M } = b, C = await import("./index-ByMgJUYa-bYhku7I6.js"), { BatchSpanProcessor: x } = C;
8345
8344
  br(`Initializing tracer with version ${e} and baseUrl ${t}`);
8346
8345
  const W = hm(t);
8347
8346
  br(`Using collector URL ${W}`);
@@ -8910,7 +8909,7 @@ const vm = (e, t, r) => {
8910
8909
  (a = H()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), tu(), this.registeredElements = null, delete window.ojs, v("form_destroyed");
8911
8910
  }, this.updateCallbacks = (a) => {
8912
8911
  this.formCallbacks.setCallbacks(a);
8913
- }, qt.assignAsSingleton(this), this.ojsVersion = "0.5.6", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = im.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${ze()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new gm(), this.deviceToken = Ko(), eu();
8912
+ }, qt.assignAsSingleton(this), this.ojsVersion = "0.5.7", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = im.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${ze()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new gm(), this.deviceToken = Ko(), eu();
8914
8913
  const { framework: o, version: i } = cm();
8915
8914
  Ro(this.baseUrl).then((a) => {
8916
8915
  if (!xr.current.isSuccess) {
@@ -9107,4 +9106,4 @@ export {
9107
9106
  jo as y,
9108
9107
  Nr as z
9109
9108
  };
9110
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcbnokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJDEoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIGlvKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gc28oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGNvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGEuX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGZvciAodmFyIHMgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHMpICYmIChhW3NdID0gb1tzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgbG8gPSBmdW5jdGlvbihlKSB7XG4gIGNvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGlvKG8sIGEucHJvdG90eXBlKSwgc28obyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IGsgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiUGxlYXNlIGZpbGwgaW4gdGhpcyBmaWVsZFwiIH0pLCBTID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCB4ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuTElORTEgPSBcImxpbmUxXCIsIGUuTElORTIgPSBcImxpbmUyXCIsIGUuTElORTMgPSBcImxpbmUzXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLlNISVBQSU5HX0xJTkUxID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiLCBlLlNISVBQSU5HX0xJTkUyID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiLCBlLlNISVBQSU5HX0xJTkUzID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiLCBlLlNISVBQSU5HX0NJVFkgPSBcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiwgZS5TSElQUElOR19TVEFURSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiwgZS5TSElQUElOR19DT1VOVFJZID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIsIGUuU0hJUFBJTkdfWklQX0NPREUgPSBcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiwgZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgcXIgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciB6ciA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoenIgfHwge30pO1xuY29uc3QgSHIgPSB6JDEubmF0aXZlRW51bSh6ciksIEJyID0geiQxLnVuaW9uKFtxciwgSHJdKTtcbnZhciBfZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkQgPSBcImNhcmRcIiwgZS5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgZS5DREVfQlJJREdFID0gXCJjZGUtYnJpZGdlXCIsIGUpKShfZSB8fCB7fSk7XG5jb25zdCB1byA9IHokMS5uYXRpdmVFbnVtKF9lKSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHgoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUyxcbiAgZXhwaXJ5OiBTLFxuICBjdmM6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUyxcbiAgY29sb3I6IFMsXG4gIGZvbnRGYW1pbHk6IFMsXG4gIGZvbnRTaXplOiBTLFxuICBmb250V2VpZ2h0OiBTLFxuICBtYXJnaW46IFMsXG4gIHBhZGRpbmc6IFMsXG4gIGxldHRlclNwYWNpbmc6IFMsXG4gIGxpbmVIZWlnaHQ6IFMsXG4gIGhpZGVJY29uOiBTXG59KTtcbmNvbnN0IHNlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIF9vID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIG1vID0geiQxLm9iamVjdCh7IHR5cGU6IF9vIH0pLCBmbyA9IHNlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgeW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZm8sXG4gIGVsZW1lbnRUeXBlOiBIcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgaG8gPSBzZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaG8sXG4gIG1lc3NhZ2U6IGssXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCB3byA9IHNlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIHZvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBlbGVtZW50VHlwZTogQnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBibyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDoga1xufSksIEVvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHNlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBrLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoU3QpXG59KSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBTbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIE9lID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBrLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogayxcbiAgbGFzdE5hbWU6IGssXG4gIHByb21vdGlvbkNvZGU6IFMsXG4gIGxpbmUxOiBTLFxuICBsaW5lMjogUyxcbiAgbGluZTM6IFMsXG4gIGNpdHk6IFMsXG4gIHN0YXRlOiBTLFxuICBjb3VudHJ5OiBrLFxuICB6aXBDb2RlOiBTLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogUyxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBTLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBTXG59KSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IGsuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgbGluZTE6IFMsXG4gIGxpbmUyOiBTLFxuICBsaW5lMzogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFMsXG4gIGNvdW50cnk6IGssXG4gIHppcENvZGU6IFMsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogUyxcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogUyxcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGxpbmUxOiBrLFxuICBjaXR5OiBrLFxuICBzdGF0ZTogayxcbiAgY291bnRyeToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogayxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGssXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IGssXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBrLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBrLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBrXG59KTtcbmNvbnN0IGtvID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZToga28sXG4gIHNlc3Npb25JZDogayxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTdCxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTLFxuICBwYXltZW50Um91dGVJZDogU1xufSkuZXh0ZW5kKE9lLnNoYXBlKSwgSW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgVG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBSbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgbW8sXG4gIHlvLFxuICBnbyxcbiAgdm8sXG4gIGJvLFxuICBFbyxcbiAgQW8sXG4gIElvLFxuICBUbyxcbiAgUG8sXG4gIFNvXG5dKSwgTm8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogUm8sXG4gIG5vbmNlOiBrLFxuICBmb3JtSWQ6IGssXG4gIGVsZW1lbnRJZDoga1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBrXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgbnQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogeCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBGbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgTW8gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZvKVxufSksIExvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBNb1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogU3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IE9lLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBTdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB4KHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEYgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShGIHx8IHt9KTtcbmNvbnN0IERvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgeG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBPbyA9IHokMS5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIHJlc291cmNlczogeiQxLm9iamVjdCh7XG4gICAgbG9nb191cmw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHgoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IHgoeiQxLmFycmF5KE9vKSlcbn0pLCBVbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgam8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkocG8pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogeChudCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeCh6JDEuYXJyYXkoWXIpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiB4KG50KVxufSksICRvID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiAkby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEdvID0geiQxLm9iamVjdCh7XG4gIHNvcnRDb2RlOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogR28ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWbyA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFZvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHFvID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEpyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBQKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogUCh6JDEubnVtYmVyKCkpXG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IFAoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBQKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB6byA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBIbyA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBQKHpvKVxufSksIFZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEJvID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBZbyA9IHokMS5vYmplY3Qoe1xuICBpZDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoQm8pLFxuICB0cmlhbF9zdGFydDogUCh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IFAoeiQxLnN0cmluZygpKVxufSksIFpyID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBKbyA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFpyKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFdvID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogSnJcbn0pLCBabyA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShXbyksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogUCh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEpvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShacilcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoWW8pLFxuICBpbnZvaWNlczogeiQxLmFycmF5KFpvKSxcbiAgcHJvY2Vzc29yc191c2VkOiBQKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGRyLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IFAoZHIpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoSnIpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogUCh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBIbyxcbiAgc3Vic19wcmV2aWV3OiBQKEtyKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVmUpLFxuICByZXR1cm5fdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogUCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBRciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHByLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQocHIuc2hhcGUpXG5dKSwgS28gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgUW8gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtRciwgS28sIFFvXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGd0ID0geiQxLm9iamVjdCh7XG4gIGxpbmUxOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogZ3QsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGd0Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBYbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoWG8pO1xuY29uc3QgZWEgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGd0LFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ3Qub3B0aW9uYWwoKVxufSksIHRhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBlbiA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkodGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVmUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChlYS5zaGFwZSkuZXh0ZW5kKHJhLnNoYXBlKTtcbmNvbnN0IHRuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IENvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZlLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogUCh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBuYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IFAobnQpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBQKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IFAoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IFAoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogUCh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogUCh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBQKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG9hID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgYWEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgaWEgPSB6JDEub2JqZWN0KHt9KSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBjYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGxhID0geiQxLmFycmF5KGNhKSwgdWEgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgZGEgPSB6JDEuYXJyYXkodWEpLCBwYSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgJHQgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHBhW3RdID8/IGU7XG59LCBfYSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgbWEgPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyAkdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHskdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBmYSA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgZWUgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChfYShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGxhLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gbWEodCkgOiBkYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IGZhKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuICR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHlhID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBoYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBybiA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgZ2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHJuKTtcbn0sIHdhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBybik7XG59LCBIID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIGE7XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgZ2EoKSwgKGEgPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IGEuY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4ub1xuICAgICAgfSksIGdpKCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhvLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChvLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBvLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgby5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBvLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBvLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtvfWApO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBlZShvKSwgYyA9IGF3YWl0IFNuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IG8gfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB3YSgpO1xuICAgIH1cbiAgfTtcbn0sIHdlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBJKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBhID0gZWUociksIG8gPSBhd2FpdCBTbih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4obywgYSwgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IGEsIGVycm9yQ29kZTogbywgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogbywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgR3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBHdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIGEgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGEpICYmIChyW2FdID0gblthXSk7XG4gIH0sIEd0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIFBlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgR3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIHZhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gYShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiByID8gbyA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihvLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBvKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbm4oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgYSwgbywgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBhICYmIChvID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgobyA9IGEucmV0dXJuKSAmJiBvLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChhID0gMCwgbyAmJiAodSA9IFt1WzBdICYgMiwgby52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IHIudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghbyB8fCB1WzFdID4gb1swXSAmJiB1WzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gb1sxXSwgbyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgci5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gVWUoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHd0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gdnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIERlKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBEZShlKTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBvID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihtLCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgeSkge1xuICAgIG5bbV0gJiYgKGFbbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYiwgdikge1xuICAgICAgICBvLnB1c2goW20sIGgsIGIsIHZdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGFbbV0gPSB5KGFbbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhvWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIERlID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihkLCBmKSA6IF8ob1swXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZihtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgeSkge1xuICAgIG0oeSksIG8uc2hpZnQoKSwgby5sZW5ndGggJiYgbChvWzBdWzBdLCBvWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRWEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIFVlID09IFwiZnVuY3Rpb25cIiA/IFVlKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4obykge1xuICAgIHJbb10gPSBlW29dICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW29dKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEobywgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIG8oeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gVihlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBDdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEZ0ID0gQ3QoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gYnQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIGx0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIGEsIG87XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gVWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChWKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG8gPSBoIGluc3RhbmNlb2YgRnQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IFVlKGYpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3IoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIG8gPSBvID8/IFtdLCBoIGluc3RhbmNlb2YgRnQgPyBvID0gdnQodnQoW10sIHd0KG8pKSwgd3QoaC5lcnJvcnMpKSA6IG8ucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKGEgPSBfLnJldHVybikgJiYgYS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvKVxuICAgICAgICB0aHJvdyBuZXcgRnQobyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGJ0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgYnQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBvbiA9IGx0LkVNUFRZO1xuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIGx0IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIFYoZS5yZW1vdmUpICYmIFYoZS5hZGQpICYmIFYoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfcihlKSB7XG4gIFYoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgc24gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgY24gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCB2dChbZSwgdF0sIHd0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGxuKGUpIHtcbiAgY24uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1yKCkge1xufVxuZnVuY3Rpb24gZnQoZSkge1xuICBlKCk7XG59XG52YXIgWXQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBhbihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0ga2EsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIHJldHVybiBuZXcgVnQociwgbiwgYSk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KGx0KSwgUGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE10KGUsIHQpIHtcbiAgcmV0dXJuIFBhLmNhbGwoZSwgdCk7XG59XG52YXIgU2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVnQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEpIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChWKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBvICYmIHNuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gby51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIE10KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIE10KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBNdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSBuZXcgU2EocyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFl0KTtcbmZ1bmN0aW9uIHB0KGUpIHtcbiAgbG4oZSk7XG59XG5mdW5jdGlvbiBDYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIga2EgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IG1yLFxuICBlcnJvcjogQ2EsXG4gIGNvbXBsZXRlOiBtclxufSwgSnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBBYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gSWEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBBYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgYSkge1xuICAgICAgcmV0dXJuIGEobik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgZ2UgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBvID0gUmEodCkgPyB0IDogbmV3IFZ0KHQsIHIsIG4pO1xuICAgIHJldHVybiBmdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIG8uYWRkKGMgPyBjLmNhbGwobywgbCkgOiBsID8gYS5fc3Vic2NyaWJlKG8pIDogYS5fdHJ5U3Vic2NyaWJlKG8pKTtcbiAgICB9KSwgbztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBmcihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgbykge1xuICAgICAgdmFyIHMgPSBuZXcgVnQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgbyhsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG8sXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbSnRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gSWEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBmcih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIG87XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4obyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gZnIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBzbi5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFRhKGUpIHtcbiAgcmV0dXJuIGUgJiYgVihlLm5leHQpICYmIFYoZS5lcnJvcikgJiYgVihlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIFJhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFl0IHx8IFRhKGUpICYmIGFuKGUpO1xufVxuZnVuY3Rpb24gTmEoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmIChOYSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTWEoZSwgdCwgciwgbiwgYSkge1xuICByZXR1cm4gbmV3IExhKGUsIHQsIHIsIG4sIGEpO1xufVxudmFyIExhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBvLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gbyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFl0KSwgRGEgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHVuID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IHlyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRGEoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgbztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gVWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKG8gPSBzLnJldHVybikgJiYgby5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGZ0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4ub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gdGhpcywgbyA9IGEuaGFzRXJyb3IsIHMgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBvIHx8IHMgPyBvbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBsdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGJ0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gbi5oYXNFcnJvciwgbyA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBhID8gci5lcnJvcihvKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBnZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgeXIociwgbik7XG4gIH0sIHQ7XG59KGdlKSwgeXIgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogb247XG4gIH0sIHQ7XG59KHVuKSwgeGEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9hID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0obHQpLCBociA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgdnQoW2UsIHRdLCB3dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFVhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSByLCBhLndvcmsgPSBuLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBvID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBvICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIG8sIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBoci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgaHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSAhMSwgbztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgbyA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBvO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIGEgPSByLnNjaGVkdWxlciwgbyA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBidChvLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oT2EpLCBnciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IHhhLm5vdywgZTtcbn0oKSwgamEgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBnci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCB0O1xufShnciksICRhID0gbmV3IGphKFVhKSwgR2EgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBWKGVbSnRdKTtcbn1cbmZ1bmN0aW9uIHphKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFlhID0gQmEoKTtcbmZ1bmN0aW9uIEphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtZYV0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gYmEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgYSwgbztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgRGUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIGEgPSBuLnZhbHVlLCBvID0gbi5kb25lLCBvID8gWzQsIERlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIERlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gS2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIGdlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKHFhKGUpKVxuICAgICAgcmV0dXJuIFFhKGUpO1xuICAgIGlmIChHYShlKSlcbiAgICAgIHJldHVybiBYYShlKTtcbiAgICBpZiAoVmEoZSkpXG4gICAgICByZXR1cm4gZWkoZSk7XG4gICAgaWYgKHphKGUpKVxuICAgICAgcmV0dXJuIGRuKGUpO1xuICAgIGlmIChKYShlKSlcbiAgICAgIHJldHVybiB0aShlKTtcbiAgICBpZiAoWmEoZSkpXG4gICAgICByZXR1cm4gcmkoZSk7XG4gIH1cbiAgdGhyb3cgSGEoZSk7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtKdF0oKTtcbiAgICBpZiAoVihyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFhhKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gbmV3IGdlKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIGxuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0gVWUoZSksIG8gPSBhLm5leHQoKTsgIW8uZG9uZTsgbyA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gby52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8gJiYgIW8uZG9uZSAmJiAobiA9IGEucmV0dXJuKSAmJiBuLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRuKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgbmkoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmkoZSkge1xuICByZXR1cm4gZG4oV2EoZSkpO1xufVxuZnVuY3Rpb24gbmkoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbztcbiAgcmV0dXJuIHZhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IEVhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChvID0gci5yZXR1cm4pID8gWzQsIG8uY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb2koZSwgdCwgciwgbiwgYSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgbyA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBhID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQobyksICFhKVxuICAgIHJldHVybiBvO1xufVxuZnVuY3Rpb24gYWkoZSwgdCkge1xuICB2YXIgciA9IFYoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBnZShuKTtcbn1cbnZhciBpaSA9IEN0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHNpKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgbyA9IHMsIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IHIobykgOiBuKG5ldyBpaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgbGkgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdWkoZSwgdCkge1xuICB2YXIgciA9IGNpKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIGEgPSByLmVhY2gsIG8gPSByLndpdGgsIHMgPSBvID09PSB2b2lkIDAgPyBkaSA6IG8sIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/ICRhIDogYywgdSA9IHIubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBGYShmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIG0sIHksIGggPSBudWxsLCBiID0gMCwgdiA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIHkgPSBvaShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIEthKHMoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IGJcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgXy5lcnJvcihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgdyk7XG4gICAgfTtcbiAgICBtID0gZi5zdWJzY3JpYmUoTWEoXywgZnVuY3Rpb24odykge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgYisrLCBfLm5leHQoaCA9IHcpLCBhID4gMCAmJiB2KGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFiICYmIHYobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaShlKSB7XG4gIHRocm93IG5ldyBsaShlKTtcbn1cbmNsYXNzIGV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGt0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gYWkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNpKHRoaXMuX3N1YmplY3QucGlwZSh1aShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB1bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB3ciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCBwaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgX2kgPSAoZSkgPT4gcGlbZV0sIEx0ID0ge30sIHBuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEx0W2VdKVxuICAgIHJldHVybiBMdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IHdyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBMdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB3ci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGt0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgQXQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCAkID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBxdCA9IG5ldyBldCgpLCB2ciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBtaSA9IDMsIGZpID0gMywgeWkgPSAxZTMsIHsgbG9nX186IF90IH0gPSBJKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIGhpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBfdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgX3QoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSAociA9ICh0ID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogdC5sb2NhbFN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiByLmdldEl0ZW0odnIpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgdmFyIHQ7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh2ciwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHQgPSAkKCk7XG4gICAgdCAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0ICYmICh0aGlzLmJhdGNoVGltZW91dCA9IHQuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgeWkpKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdmFyIHQ7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKCh0ID0gJCgpKSA9PSBudWxsIHx8IHQuY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsKSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDAgfHwgKHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITAsIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0pKTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdCA9IHF0LmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCF0KSB7XG4gICAgICBfdChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBmaSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIGV2ZW50czogci5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgZXZlbnRfbmFtZTogYy5ldmVudE5hbWUsXG4gICAgICAgICAgZGV2aWNlX3Rva2VuOiB0LmRldmljZVRva2VuLFxuICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgIC4uLmMuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5vbmNlOiBjLm5vbmNlLFxuICAgICAgICAgICAgZGF0ZXRpbWU6IGMuZGF0ZXRpbWUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGMudGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGMudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgLi4uYy5wcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgIH0sIGEgPSBfaSh0LmVudmlyb25tZW50KSwgbyA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBhKTtcbiAgICAgIChhd2FpdCBmZXRjaChvLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG4pXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgX3QoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBtaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgV3QgPSBuZXcgaGkoKSwgZyA9IChlLCB0LCByKSA9PiB7XG4gIFd0LmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgZ2kgPSAoKSA9PiB7XG4gIFd0LnByb2Nlc3NRdWV1ZSgpO1xufSwgX24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZWUoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIG1uID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBlZShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCB3aSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG1uKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIF9uKTtcbn0sIHZpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSAkKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbW4pLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgX24pO1xufTtcbnZhciBHcjtcbihHciA9ICQoKSkgPT0gbnVsbCB8fCBHci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3QucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGJpID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgRWkgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgUGkgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBJdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICBicigpIHx8IGF3YWl0IFR0KDUwMCk7XG4gIGlmICghYnIoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBTaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBJdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIENpID0gYXN5bmMgKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgY29uc3QgbyA9IGF3YWl0IEl0KGUpLCBzID0gUGlbci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBvLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgVHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCBiciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBraSA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBBaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IEl0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIElpID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGEsIG8sIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgSXQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChhID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygobyA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufTtcbnZhciBUaSA9IHR5cGVvZiBnbG9iYWxUaGlzID09IFwib2JqZWN0XCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHNlbGYgPT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ID09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB7fSwgVGUgPSBcIjEuOS4wXCIsIEVyID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuZnVuY3Rpb24gUmkoZSkge1xuICB2YXIgdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtlXSksIHIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBuID0gZS5tYXRjaChFcik7XG4gIGlmICghbilcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfTtcbiAgdmFyIGEgPSB7XG4gICAgbWFqb3I6ICtuWzFdLFxuICAgIG1pbm9yOiArblsyXSxcbiAgICBwYXRjaDogK25bM10sXG4gICAgcHJlcmVsZWFzZTogbls0XVxuICB9O1xuICBpZiAoYS5wcmVyZWxlYXNlICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiBsID09PSBlO1xuICAgIH07XG4gIGZ1bmN0aW9uIG8oYykge1xuICAgIHJldHVybiByLmFkZChjKSwgITE7XG4gIH1cbiAgZnVuY3Rpb24gcyhjKSB7XG4gICAgcmV0dXJuIHQuYWRkKGMpLCAhMDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgIGlmICh0LmhhcyhsKSlcbiAgICAgIHJldHVybiAhMDtcbiAgICBpZiAoci5oYXMobCkpXG4gICAgICByZXR1cm4gITE7XG4gICAgdmFyIHUgPSBsLm1hdGNoKEVyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gbyhsKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gbyhsKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMobCkgOiBvKGwpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhsKSA6IG8obCk7XG4gIH07XG59XG52YXIgTmkgPSBSaShUZSksIEZpID0gVGUuc3BsaXQoXCIuXCIpWzBdLCBvdCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIEZpKSwgYXQgPSBUaTtcbmZ1bmN0aW9uIFp0KGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9ICExKTtcbiAgdmFyIG8gPSBhdFtvdF0gPSAoYSA9IGF0W290XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBUZVxuICB9O1xuICBpZiAoIW4gJiYgb1tlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICBpZiAoby52ZXJzaW9uICE9PSBUZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBvLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBUZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICByZXR1cm4gb1tlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFRlICsgXCIuXCIpLCAhMDtcbn1cbmZ1bmN0aW9uIGl0KGUpIHtcbiAgdmFyIHQsIHIsIG4gPSAodCA9IGF0W290XSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC52ZXJzaW9uO1xuICBpZiAoISghbiB8fCAhTmkobikpKVxuICAgIHJldHVybiAociA9IGF0W290XSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcltlXTtcbn1cbmZ1bmN0aW9uIEt0KGUsIHQpIHtcbiAgdC5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgVGUgKyBcIi5cIik7XG4gIHZhciByID0gYXRbb3RdO1xuICByICYmIGRlbGV0ZSByW2VdO1xufVxudmFyIE1pID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBMaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBEaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBZZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZZShlLCB0LCByKSB7XG4gIHZhciBuID0gaXQoXCJkaWFnXCIpO1xuICBpZiAobilcbiAgICByZXR1cm4gci51bnNoaWZ0KHQpLCBuW2VdLmFwcGx5KG4sIExpKFtdLCBNaShyKSwgITEpKTtcbn1cbnZhciBYO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuRVJST1IgPSAzMF0gPSBcIkVSUk9SXCIsIGVbZS5XQVJOID0gNTBdID0gXCJXQVJOXCIsIGVbZS5JTkZPID0gNjBdID0gXCJJTkZPXCIsIGVbZS5ERUJVRyA9IDcwXSA9IFwiREVCVUdcIiwgZVtlLlZFUkJPU0UgPSA4MF0gPSBcIlZFUkJPU0VcIiwgZVtlLkFMTCA9IDk5OTldID0gXCJBTExcIjtcbn0pKFggfHwgKFggPSB7fSkpO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICBlIDwgWC5OT05FID8gZSA9IFguTk9ORSA6IGUgPiBYLkFMTCAmJiAoZSA9IFguQUxMKSwgdCA9IHQgfHwge307XG4gIGZ1bmN0aW9uIHIobiwgYSkge1xuICAgIHZhciBvID0gdFtuXTtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiICYmIGUgPj0gYSA/IG8uYmluZCh0KSA6IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogcihcImVycm9yXCIsIFguRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIFguV0FSTiksXG4gICAgaW5mbzogcihcImluZm9cIiwgWC5JTkZPKSxcbiAgICBkZWJ1ZzogcihcImRlYnVnXCIsIFguREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIFguVkVSQk9TRSlcbiAgfTtcbn1cbnZhciBPaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgVWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgamkgPSBcImRpYWdcIiwgRXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIGZ1bmN0aW9uIHQoYSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBzID0gMDsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgICAgIG9bc10gPSBhcmd1bWVudHNbc107XG4gICAgICAgICAgdmFyIGMgPSBpdChcImRpYWdcIik7XG4gICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICByZXR1cm4gY1thXS5hcHBseShjLCBVaShbXSwgT2kobyksICExKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSBmdW5jdGlvbihhLCBvKSB7XG4gICAgICAgIHZhciBzLCBjLCBsO1xuICAgICAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0geyBsb2dMZXZlbDogWC5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksICExO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBvID09IFwibnVtYmVyXCIgJiYgKG8gPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IG9cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gaXQoXCJkaWFnXCIpLCBmID0geGkoKGMgPSBvLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogWC5JTkZPLCBhKTtcbiAgICAgICAgaWYgKGQgJiYgIW8uc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICB2YXIgXyA9IChsID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBcIjxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT5cIjtcbiAgICAgICAgICBkLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBfKSwgZi53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgXyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFp0KFwiZGlhZ1wiLCBmLCByLCAhMCk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgS3QoamksIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGkoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiAkaShlKSB7XG4gIHJldHVybiBTeW1ib2wuZm9yKGUpO1xufVxudmFyIEdpID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIHIuX2N1cnJlbnRDb250ZXh0ID0gdCA/IG5ldyBNYXAodCkgOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCByLmdldFZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gci5fY3VycmVudENvbnRleHQuZ2V0KG4pO1xuICAgICAgfSwgci5zZXRWYWx1ZSA9IGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5zZXQobiwgYSksIG87XG4gICAgICB9LCByLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgYSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGEuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShuKSwgYTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9KClcbiksIFZpID0gbmV3IEdpKCksIHFpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCB6aSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBIaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVmk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIGEgPSBbXSwgbyA9IDM7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgICAgIGFbbyAtIDNdID0gYXJndW1lbnRzW29dO1xuICAgICAgcmV0dXJuIHIuY2FsbC5hcHBseShyLCB6aShbbl0sIHFpKGEpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgQmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIFlpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIER0ID0gXCJjb250ZXh0XCIsIEppID0gbmV3IEhpKCksIFF0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIFp0KER0LCB0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBvID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBvW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgWWkoW3QsIHIsIG5dLCBCaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdChEdCkgfHwgSmk7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIEt0KER0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHp0O1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuU0FNUExFRCA9IDFdID0gXCJTQU1QTEVEXCI7XG59KSh6dCB8fCAoenQgPSB7fSkpO1xudmFyIGZuID0gXCIwMDAwMDAwMDAwMDAwMDAwXCIsIHluID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLCBXaSA9IHtcbiAgdHJhY2VJZDogeW4sXG4gIHNwYW5JZDogZm4sXG4gIHRyYWNlRmxhZ3M6IHp0Lk5PTkVcbn0sIHR0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gV2kpLCB0aGlzLl9zcGFuQ29udGV4dCA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgZS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCByKSB7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBYdCA9ICRpKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gZXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShYdCkgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gWmkoKSB7XG4gIHJldHVybiBlcihRdC5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIHRyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUoWHQsIHQpO1xufVxuZnVuY3Rpb24gS2koZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShYdCk7XG59XG5mdW5jdGlvbiBRaShlLCB0KSB7XG4gIHJldHVybiB0cihlLCBuZXcgdHQodCkpO1xufVxuZnVuY3Rpb24gaG4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBYaSA9IC9eKFswLTlhLWZdezMyfSkkL2ksIGVzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiB0cyhlKSB7XG4gIHJldHVybiBYaS50ZXN0KGUpICYmIGUgIT09IHluO1xufVxuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gZXMudGVzdChlKSAmJiBlICE9PSBmbjtcbn1cbmZ1bmN0aW9uIGduKGUpIHtcbiAgcmV0dXJuIHRzKGUudHJhY2VJZCkgJiYgcnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gbnMoZSkge1xuICByZXR1cm4gbmV3IHR0KGUpO1xufVxudmFyIHh0ID0gUXQuZ2V0SW5zdGFuY2UoKSwgd24gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHh0LmFjdGl2ZSgpKTtcbiAgICAgIHZhciBhID0gISEociAhPSBudWxsICYmIHIucm9vdCk7XG4gICAgICBpZiAoYSlcbiAgICAgICAgcmV0dXJuIG5ldyB0dCgpO1xuICAgICAgdmFyIG8gPSBuICYmIGhuKG4pO1xuICAgICAgcmV0dXJuIG9zKG8pICYmIGduKG8pID8gbmV3IHR0KG8pIDogbmV3IHR0KCk7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8sIHMsIGM7XG4gICAgICBpZiAoIShhcmd1bWVudHMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IGMgPSByIDogYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IChvID0gciwgYyA9IG4pIDogKG8gPSByLCBzID0gbiwgYyA9IGEpO1xuICAgICAgICB2YXIgbCA9IHMgPz8geHQuYWN0aXZlKCksIHUgPSB0aGlzLnN0YXJ0U3Bhbih0LCBvLCBsKSwgZCA9IHRyKGwsIHUpO1xuICAgICAgICByZXR1cm4geHQud2l0aChkLCBjLCB2b2lkIDAsIHUpO1xuICAgICAgfVxuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIG9zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBhcyA9IG5ldyB3bigpLCBpcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4sIGEpIHtcbiAgICAgIHRoaXMuX3Byb3ZpZGVyID0gdCwgdGhpcy5uYW1lID0gciwgdGhpcy52ZXJzaW9uID0gbiwgdGhpcy5vcHRpb25zID0gYTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4odCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8gPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG8uc3RhcnRBY3RpdmVTcGFuLCBvLCBhcmd1bWVudHMpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgdmFyIHQgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgIHJldHVybiB0ID8gKHRoaXMuX2RlbGVnYXRlID0gdCwgdGhpcy5fZGVsZWdhdGUpIDogYXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyB3bigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgY3MgPSBuZXcgc3MoKSwgUHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcih0LCByLCBuKSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG5ldyBpcyh0aGlzLCB0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQ7XG4gICAgICByZXR1cm4gKHQgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGNzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0O1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5nZXRUcmFjZXIodCwgciwgbik7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShzdCB8fCAoc3QgPSB7fSkpO1xudmFyIEVlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKEVlIHx8IChFZSA9IHt9KSk7XG52YXIgeGUgPSBRdC5nZXRJbnN0YW5jZSgpLCBPdCA9IFwidHJhY2VcIiwgbHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHIoKSwgdGhpcy53cmFwU3BhbkNvbnRleHQgPSBucywgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBnbiwgdGhpcy5kZWxldGVTcGFuID0gS2ksIHRoaXMuZ2V0U3BhbiA9IGVyLCB0aGlzLmdldEFjdGl2ZVNwYW4gPSBaaSwgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGhuLCB0aGlzLnNldFNwYW4gPSB0ciwgdGhpcy5zZXRTcGFuQ29udGV4dCA9IFFpO1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gWnQoT3QsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIEV0Lmluc3RhbmNlKCkpO1xuICAgICAgcmV0dXJuIHIgJiYgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZSh0KSwgcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0KE90KSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIEt0KE90LCBFdC5pbnN0YW5jZSgpKSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgamUgPSBscy5nZXRJbnN0YW5jZSgpO1xuY29uc3QgdXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgYSA9IHhlLmFjdGl2ZSgpLCBvID0gbi5zdGFydFNwYW4oXG4gICAgYGNkZS4ke3QudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICAuLi5lLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkodC5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgYVxuICApO1xuICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKGEsIG8pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCByKCk7XG4gICAgICByZXR1cm4gby5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgcztcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICB0aHJvdyBvLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IEVlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBzIGluc3RhbmNlb2YgRXJyb3IgPyBzLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSksIHM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG8uZW5kKCk7XG4gICAgfVxuICB9KTtcbn0sIG10ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG4gPSB4ZS5hY3RpdmUoKSwgYSA9IHIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7ZS5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUucmVmZXJyZXIsXG4gICAgICAgIC4uLmUucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogZS5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBuXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGF3YWl0IHQoKTtcbiAgICByZXR1cm4gYS5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgbztcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IHMgPSBvIGluc3RhbmNlb2YgRXJyb3IgPyBvLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBhLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IHNcbiAgICB9KSwgbztcbiAgfSBmaW5hbGx5IHtcbiAgICBhLmVuZCgpO1xuICB9XG59O1xuY2xhc3Mgdm4gZXh0ZW5kcyBsbyB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBjb25zdCByID0gYCR7dC5tZXNzYWdlfWA7XG4gICAgc3VwZXIociksIHRoaXMucmVzcG9uc2UgPSB0O1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBCID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHVzKGUsIHQsIGFzeW5jICgpID0+IHtcbiAgbiAmJiBnKG4sIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCBhID0gYXdhaXQgZS5zZW5kKHQpO1xuICBpZiAocHMoYSkpXG4gICAgdGhyb3cgZyhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIG5ldyB2bihhKTtcbiAgaWYgKCFkcyhhLCByKSkge1xuICAgIGNvbnN0IG8gPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBvLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgby5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgZyhuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBkcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCBwcyA9IChlKSA9PiBxby5zYWZlUGFyc2UoZSkuc3VjY2VzcywgX3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBLciksIE0gPSBhc3luYyAoZSkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUXIpLCBuZSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgdG4sXG4gIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiksIGJuID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEIoXG4gIGUsXG4gIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHQgfSxcbiAgbmEsXG4gIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4pLCBtcyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCByID0gYXdhaXQgQihlLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiB0IH0sIHRuKTtcbiAgcmV0dXJuIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4uclxuICB9KSwgcjtcbn0sIEwgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgam8sXG4gIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuKSwgZnMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSxcbiAgWHIsXG4gIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuKSwgeXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiB0IH0sXG4gIFVvLFxuICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4pLCBocyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBfcyhlLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LFxuICAgIHByb21vdGlvbl9jb2RlOiByXG4gIH0pLCBhID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBvID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IGhhKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IG8sXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgdmUgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBpZiAocilcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwLCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFuICYmIChuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSk7XG4gICAgY29uc3QgYSA9IGF3YWl0IGhzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgRW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEIobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBMbylcbiAgICApXG4gICk7XG59LCBTciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIG50LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgZ3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBYciwgXCJzZXR1cF9jaGVja291dFwiKSwgcnIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBudCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBQbiA9IDFlMywgd3MgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbyA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IFBuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgQihvLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgUnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgYWEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgU24gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgQihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBvYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBlZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCB2cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgaWFcbiksIGJzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCBFcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgQ24gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGtuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBydCA9IDMyLCBQcyA9IDE2LCBBbiA9IDEwLCBDciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBSZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFJlIHx8IChSZSA9IHt9KSk7XG5jbGFzcyBaZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBTcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBydCk7XG4gIHJldHVybiB0ID09PSBydCAmJiAodCA9IHJ0IC0gMSksIGtuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIENzKGUpIHtcbiAgY29uc3QgdCA9IGtzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgWmUoUmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24ga3MoKSB7XG4gIHJldHVybiBUcygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEFzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gU3ModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIElzKGUsIHQgPSBBbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFplKFJlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IENyKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtDcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgcnQsIG4gPSBrbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIHJ0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIFRzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gUnMoZSwgdCkge1xuICBjb25zdCByID0gQ3MoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBJcyhuLCBBbikgKyBBcyhQcywgcik7XG59XG5jb25zdCBJbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBUbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhJbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBScygpO1xuICByZXR1cm4gTnModCksIHQ7XG59LCBOcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7SW59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgRnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHFyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIG8pID0+IHtcbiAgY29uc3QgcyA9IG8uZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBjID0gby50eXBlID09PSBcImNoZWNrYm94XCIgPyBvLmNoZWNrZWQgOiBvLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGMgfTtcbn0sIHt9KSwgTXMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBOby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBMcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgWiA9IChlKSA9PiAoe1xuICBsaW5lMTogZVtwLkxJTkUxXSxcbiAgbGluZTI6IGVbcC5MSU5FMl0sXG4gIGxpbmUzOiBlW3AuTElORTNdLFxuICBjaXR5OiBlW3AuQ0lUWV0sXG4gIHN0YXRlOiBlW3AuU1RBVEVdLFxuICBjb3VudHJ5OiBlW3AuQ09VTlRSWV0sXG4gIHppcF9jb2RlOiBlW3AuWklQX0NPREVdXG59KSwgSyA9IChlLCB0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKVxuICAgIHJldHVybiB7XG4gICAgICBsaW5lMTogZVtwLlNISVBQSU5HX0xJTkUxXSxcbiAgICAgIGxpbmUyOiBlW3AuU0hJUFBJTkdfTElORTJdLFxuICAgICAgbGluZTM6IGVbcC5TSElQUElOR19MSU5FM10sXG4gICAgICBjaXR5OiBlW3AuU0hJUFBJTkdfQ0lUWV0sXG4gICAgICBzdGF0ZTogZVtwLlNISVBQSU5HX1NUQVRFXSxcbiAgICAgIGNvdW50cnk6IGVbcC5TSElQUElOR19DT1VOVFJZXSxcbiAgICAgIHppcF9jb2RlOiBlW3AuU0hJUFBJTkdfWklQX0NPREVdXG4gICAgfTtcbn0sIE50ID0gKGUsIHQpID0+IFtlLCB0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksIERzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgeHMgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7dCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBSbiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaWQ6IHIsIHRpdGxlOiBuLCB3aWR0aDogYSwgaGVpZ2h0OiBvIH0gPSB0ID8/IHt9LCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBzLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0RzKHsgd2lkdGg6IGEsIGhlaWdodDogbyB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7ciA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHtuID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBsID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbC5hcHBlbmRDaGlsZChzLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IHUgPSBsLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBkID0gbC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLCB7IGhvc3Q6IGMsIGlmcmFtZTogdSwgY2FuY2VsQnV0dG9uOiBkIH07XG59LCBObiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgd2lkdGg6IHIsIGhlaWdodDogbiwgdGl0bGU6IGEgfSA9IHQgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIiksIGwgPSBlLm1hcCgoeSwgaCkgPT4ge1xuICAgICAgY29uc3QgYiA9IHkucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHt5LnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke3kuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke3kuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtofVwiPlxuICAgICAgICAgICR7Yn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke3kuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7eS5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGMuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke3hzKHsgd2lkdGg6IHIsIGhlaWdodDogbiB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke2EgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7bH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIGQgPSB1LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIGQuYXBwZW5kQ2hpbGQoYy5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICAgIGNvbnN0IGYgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKSwgXyA9IGQucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIiksIG0gPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHUpO1xuICAgIH07XG4gICAgZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbSgpLCBzKG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSksIF8uZm9yRWFjaCgoeSwgaCkgPT4ge1xuICAgICAgeS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBtKCksIG8oZVtoXSk7XG4gICAgICB9KTtcbiAgICB9KSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1KTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gT3MoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBvID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjID0gYXdhaXQgd3MoZSwgciwgbiwgYSk7XG4gICAgICBjICYmIChjbGVhckludGVydmFsKHMpLCB0KGMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG8oKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKG8sIFBuKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBVcyh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gYmUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IG8gfSA9IGUsIHMgPSBSbih0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBvIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCBsID0gKGYpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBjKGYpLCBkID09IG51bGwgfHwgZCgpO1xuICAgIH0sIHUgPSBPcyhcbiAgICAgIHMuaWZyYW1lLFxuICAgICAgbCxcbiAgICAgIG5ldyBVUkwocikub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIERvXG4gICAgKSwgZCA9IFVzKHtcbiAgICAgIGVsZW1lbnRzOiBzLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiB1LFxuICAgICAgcmVzb2x2ZTogY1xuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IEZuID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IGJlKGUpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHQuc3RhdHVzICE9PSBGLlNVQ0NFU1MgJiYga3QodC5zdGF0dXMpLCB7XG4gICAgaHJlZjogdC5ocmVmXG4gIH07XG59LCBqcyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB3aW5kb3cub3Blbih0LCBcIl9ibGFua1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gcjtcbn0sIE1uID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogYSB9ID0gSShcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgYyA9IGpzKGUsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHlzKHQsIHIpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgbyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGEoZWUodSkpLCBjbGVhckludGVydmFsKGwpLCBzKGVlKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIGNlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186ICRzLCBlcnJfXzogR3MgfSA9IEkoXCJjb21tb24tY2NcIiksIFZzID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZTogZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzczogdCxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3M6IHIsXG4gIHBheW1lbnRfbWV0aG9kOiBuXG59KSA9PiB7XG4gIGNvbnN0IGEgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKGFbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgYVtwLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChhW3AuWklQX0NPREVdID0gayksIHQgJiYgKGFbcC5MSU5FMV0gPSBrLCBhW3AuQ0lUWV0gPSBrLCBhW3AuU1RBVEVdID0gaywgYVtwLkNPVU5UUlldID0gaywgYVtwLlpJUF9DT0RFXSA9IGspLCByICYmIChhW3AuU0hJUFBJTkdfTElORTFdID0gaywgYVtwLlNISVBQSU5HX0NJVFldID0gaywgYVtwLlNISVBQSU5HX1NUQVRFXSA9IGssIGFbcC5TSElQUElOR19DT1VOVFJZXSA9IGssIGFbcC5TSElQUElOR19aSVBfQ09ERV0gPSBrKSwgT2JqZWN0LmtleXMoYSkubGVuZ3RoID09PSAwID8gT2UgOiBPZS5leHRlbmQoYSk7XG59LCBxcyA9IChlLCB0LCByID0ge30pID0+IHtcbiAgaWYgKHIpIHtcbiAgICAkcyhgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgY29uc3QgbyA9IE9iamVjdC5rZXlzKHIpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykge1xuICAgICAgY29uc3QgYyA9IG9bc10sIGwgPSByW2NdO1xuICAgICAgZVtjXSB8fCAoZVtjXSA9IGwpO1xuICAgIH1cbiAgfVxuICBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10sIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddICYmIChlW3AuU0hJUFBJTkdfTElORTFdID0gZVtwLkxJTkUxXSwgZVtwLlNISVBQSU5HX0xJTkUyXSA9IGVbcC5MSU5FMl0sIGVbcC5TSElQUElOR19MSU5FM10gPSBlW3AuTElORTNdLCBlW3AuU0hJUFBJTkdfQ0lUWV0gPSBlW3AuQ0lUWV0sIGVbcC5TSElQUElOR19TVEFURV0gPSBlW3AuU1RBVEVdLCBlW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0sIGVbcC5TSElQUElOR19aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdKTtcbiAgY29uc3QgYSA9IFZzKHIpLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFhLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gYS5lcnJvci5mb3JtYXQoKSwgcyA9IEZzKG8pLCBjID0gT2JqZWN0LmtleXMocyk7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBjLmxlbmd0aDsgbCsrKSB7XG4gICAgICBjb25zdCB1ID0gY1tsXSwgZCA9IHNbdV07XG4gICAgICB0KHUsIGQsIHUpO1xuICAgIH1cbiAgICB0aHJvdyBHcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiBhLmRhdGE7XG59LCB7IGxvZ19fOiB6cywgZXJyX186IEhzIH0gPSBJKFwiY29tbW9uLWNjXCIpLCBxID0gcXMsIExuID0gKGUsIHQpID0+IHtcbiAgZm9yIChjb25zdCByIG9mIGUpXG4gICAgaWYgKHIuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyByLmVycm9ycy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBCci5zYWZlUGFyc2Uobi5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgICAgIEhzKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7bi5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgbyA9IGEuZGF0YTtcbiAgICAgICAgICB0KG8sIG4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIHpzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCB7IGxvZ19fOiBWbCwgZXJyX186IERuIH0gPSBJKFwiY29tbW9uXCIpLCB1dCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIHogPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IERuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBuciA9IChlLCB0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBlLmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooZSksXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGUsIHQpXG59KSwgbGUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IE0oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHV0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IGZzKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBEbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZS5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgeG4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgbykgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIoKSA/IGEoKSA6IGMgPyBzID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgcWUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgXztcbiAgY29uc3QgYyA9ICgoZiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogbyAhPSBudWxsICYmIG8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBvICE9IG51bGwgJiYgby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBvLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5vLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgb3IgPSAoKSA9PiB4bih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBVdCA9IG51bGw7XG5jb25zdCBhciA9IGFzeW5jIChlKSA9PiBhd2FpdCBwbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCB6ZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBhcihlKTtcbiAgcmV0dXJuIFV0ID09PSBudWxsICYmIChVdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIFV0O1xufSwgSGUgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gWXIucGFyc2UodCkgOiBudWxsO1xufSwgaXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBhID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmRdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIGYgPSBkLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLkxJTkUxXSA9IHJbcC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW3AuTElORTJdID0gcltwLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5MSU5FM10gPSByW3AuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltwLkNJVFldID0gcltwLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNUQVRFXSA9IHJbcC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW3AuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltwLkxBU1RfTkFNRV0gfHwgZiB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW3AuRklSU1RfTkFNRV0gPSBfLCByW3AuTEFTVF9OQU1FXSA9IG0pIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gYSAmJiAocltwLlNISVBQSU5HX0xJTkUxXSA9IHJbcC5TSElQUElOR19MSU5FMV0gfHwgYS5hZGRyZXNzMSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTJdID0gcltwLlNISVBQSU5HX0xJTkUyXSB8fCBhLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FM10gPSByW3AuU0hJUFBJTkdfTElORTNdIHx8IGEuYWRkcmVzczMgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NJVFldID0gcltwLlNISVBQSU5HX0NJVFldIHx8IGEubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbcC5TSElQUElOR19aSVBfQ09ERV0gfHwgYS5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltwLlNISVBQSU5HX1NUQVRFXSA9IHJbcC5TSElQUElOR19TVEFURV0gfHwgYS5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NPVU5UUlldID0gcltwLlNISVBQSU5HX0NPVU5UUlldIHx8IGEuY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IEplLCBlcnJfXzogQnMgfSA9IEkoXCJhd3gtYmFjc1wiKSwgWXMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB3LCBFO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiLCB1ID0gYXdhaXQgbmUocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhvLCBjLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSksIGQgPSBIZSh1KSwgZiA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY29uc2VudF9pZCwgXyA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBtO1xuICAgIGlmIChfICYmIF8ubGVuZ3RoID49IDEpIHtcbiAgICAgIEplKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtID0gYXdhaXQgTm4oXywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgSmUoYEJhbmsgc2VsZWN0ZWQ6ICR7bS5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgSmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeSA9IHtcbiAgICAgIHR5cGU6IFwiYmFjc19kaXJlY3RfZGViaXRcIixcbiAgICAgIGJhY3NfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgIC8vIFRydWVMYXllclxuICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IG9bcC5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9LCBiID0gKEUgPSAodyA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHlcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdy5maW5kKFxuICAgICAgKEMpID0+IEMudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogRS5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGIpIHtcbiAgICAgIEplKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBDIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgIHVybDogYixcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSmUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDfV1gKSwgQyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChDID09PSBGLkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQykge1xuICAgICAgdGhyb3cgQnMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgQyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBDXG4gICAgICB9KSwgbmV3IEVycm9yKChDID09IG51bGwgPyB2b2lkIDAgOiBDLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGtyLCBlcnJfXzogSnMgfSA9IEkoXCJhd3gtZWZ0XCIpLCBXcyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGIsIHY7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICAvLyBpbnN0aXR1dGlvbl9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIHRyYW5zaXRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH0sIHkgPSAodiA9IChiID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogX1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB2LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoeSkge1xuICAgICAga3IoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoa3IoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3d9XWApLCB3ID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBKcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXZSwgZXJyX186IFpzIH0gPSBJKFwiYXd4LXNlcGFcIiksIEtzID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdiwgdztcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgbTtcbiAgICBpZiAoXyAmJiBfLmxlbmd0aCA+PSAxKSB7XG4gICAgICBXZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbSA9IGF3YWl0IE5uKF8sIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFdlKGBCYW5rIHNlbGVjdGVkOiAke20uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFdlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSAodyA9ICh2ID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBvW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE50KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF1cbiAgICAgICAgICAgIC8vIGliYW46IGN1c3RvbVBhcmFtcy5pYmFuLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiB2LmZpbmQoXG4gICAgICAoRSkgPT4gRS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB3LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoaCkge1xuICAgICAgV2UoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChXZShg4pWwIFNFUEEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0V9XWApLCBFID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEUgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBiID0gYXdhaXQgTChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBiLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aHJvdyBacyhcIlNFUEEgcGF5bWVudCBlcnJvclwiLCBFKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IEVcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogUXMsIGVycl9fOiBzciB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgWHMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBlYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBYcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHNyKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE9uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHRjID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBRcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgc3IociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtlZSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBVbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlYyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGEgPSB0YyhuLmhyZWYgPz8gXCJcIiksIG8gPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAobyAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtvfSkuYDtcbiAgICB0aHJvdyBzcihsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgam4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBjciA9ICgpID0+IHhuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBsciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBhID0gdC5zaGlwcGluZ0NvbnRhY3QsIG8gPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBhKSB7XG4gICAgb1twLkVNQUlMXSA9IG9bcC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgb1twLkNPVU5UUlldID0gb1twLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgb1twLlpJUF9DT0RFXSA9IG9bcC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBvW3AuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IG9bcC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKG9bcC5GSVJTVF9OQU1FXSA9IHMsIG9bcC5MQVNUX05BTUVdID0gYykgOiAob1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBvW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBvO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCByYyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgQ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIG5jID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdXIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBhLCB0b3RhbDogbyB9ID0gbmMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBvLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiByYyh7XG4gICAgICB0b3RhbDogbyxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBvYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgYWMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBjdCB9ID0gSShcImFkeWVuLWNjXCIpLCBpYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IG9jLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBHbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgc2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gaWMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBjdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIGNjID0gKGUpID0+IEpTT04ucGFyc2UoZSksIEFyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIGxjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgQXIoKSB8fCBhd2FpdCBUdCg1MDApO1xuICBpZiAoIUFyKCkpXG4gICAgdGhyb3cgY3QoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgdWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogbywgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gY2ModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKSwgby5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIGN0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9ICh5KSA9PiB7XG4gICAgICBjdChcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pO1xuICAgIGNvbnN0IG0gPSAoeSwgaCwgYikgPT4ge1xuICAgICAgby5yZW1vdmUoKSwgbCh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGxjKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogbSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gYWMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGN0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIFZuID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBzYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IG8sIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBSbihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IHVjKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogZGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IG8sXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGt0KGwuc3RhdHVzKTtcbn0sIHpuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHBjIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIF9jKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFJ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBtYyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBlLnBheW1lbnQsIG8gPSBscih0Lm5vbkNkZUZvcm1JbnB1dHMsIGEpLCBzID0gcShcbiAgICAgIG8sXG4gICAgICB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBhbygpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHBjKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgbGUoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChvKSwgYTtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogS2UsIGVycl9fOiBCbiB9ID0gSShcImFkeWVuLWFwcGxlLXBheVwiKSwgZmMgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChLZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgY3IoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKEtlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFQuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIEJuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgeWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgS2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBfYyh3LCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGIoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHcgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uZi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHcpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1jKHcsIG0pO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9uY2FuY2VsID0gdiwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBCbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogTWUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBoYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZiwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChpZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKF8gPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBNZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGFyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGllKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gcWUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHkgPSBhd2FpdCB6ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgeS5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBNZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFQuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBNZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBnYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGIsIHYsIHcsIEUsIEMsIE87XG4gICAgaWUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBvLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZCA9IGF3YWl0IE0odSksIGYgPSBxZSh7XG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBvLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQoZCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBpZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEEpO1xuICAgICAgY29uc3QgRCA9IGlyKHIsIEEpLCBRID0gcShcbiAgICAgICAgRCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5RXG4gICAgICB9KSwgISgoeSA9IChtID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW4pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVlID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBRW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogUVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBRW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooUSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgQ2UgPSBIZSh1ZSk7XG4gICAgICBpZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIENlKTtcbiAgICAgIGxldCBZID0gYXdhaXQgTCh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGFvKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoYiA9IChoID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGxldCBoZSA9ICh3ID0gKHYgPSBZLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB3LmlkO1xuICAgICAgY29uc3QgRmUgPSAoRSA9IFkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogRS5maW5kKChCZSkgPT4gQmUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoRmUgJiYgRmUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGllKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgRmUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQmUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgICB1cmw6IEZlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7QmV9XWApLCBCZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChCZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEZlICYmICFoZSAmJiAoWSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBGZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgaWUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgWSksIGhlID0gKE8gPSAoQyA9IFkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE8uaWQpLCAhaGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogWSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgTWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJciwgZXJyX186IHdjIH0gPSBJKFwiYXd4LWFjaFwiKSwgdmMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBoLCBiO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCIsIHUgPSBhd2FpdCBuZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKG8sIGMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KSwgZCA9IEhlKHUpLCBmID0gZCA9PSBudWxsID8gdm9pZCAwIDogZC5jb25zZW50X2lkLCBtID0gKGIgPSAoaCA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGEuaXNCdXNpbmVzc0FjY291bnQgPz8gITEsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBOdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiBhY2hSZXN1bHQ/LnBheWxvYWQ/LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgICAvLyBhYmFfcm91dGluZ19udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8ucm91dGluZ051bWJlcixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaC5maW5kKFxuICAgICAgKHYpID0+IHYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogYi5yZWRpcmVjdF91cmw7XG4gICAgaWYgKG0pIHtcbiAgICAgIElyKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdiB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IG0sXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSXIoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dn1dYCksIHYgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHYgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeSA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyB3YyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHYpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogdlxuICAgICAgfSksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiB5dCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBiYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB5dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYmUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoeXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB5dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gUGMoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gbHIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IHEoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG5lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWih1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBtID0gYXdhaXQgTCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB5dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG0pO1xuICAgIGxldCB5ID0gKG4gPSAociA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gbS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAodikgPT4gdi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAobSA9IGF3YWl0IEVjKGgsIHQpLCB5ID0gKHMgPSAobyA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGIgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYiksIGxlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBtLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBRZSwgZXJyX186IFluIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgU2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoUWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChRZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgdmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBULmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgWW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQ2MgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgam4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgUWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSB2LCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYmModywgbSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmYudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBQYyh3LCBtKTtcbiAgICAgICAgICBoKEUpO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgYihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBZbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHJlLCBlcnJfXzogTGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwga2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIGYsIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICByZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBMZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHJlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgb3IoKSwgISgoXyA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIExlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgYXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IGMsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBtLCB5LCBoLCBiLCB2LCB3LCBFO1xuICAgIHJlKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBBdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHJlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBPID0gaXIociwgQyksIEEgPSBxKFxuICAgICAgICBPLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICByZShcIl9fX1wiLCBBKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRCA9ICh5ID0gKG0gPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBRID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooQSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKEEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgICAgfSksIFNlID0gSGUoUSk7XG4gICAgICByZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFNlKTtcbiAgICAgIGxldCB1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFNlID09IG51bGwgPyB2b2lkIDAgOiBTZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBEXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpO1xuICAgICAgbGV0IENlID0gKGIgPSAoaCA9IHVlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiBiLmlkO1xuICAgICAgY29uc3QgWSA9ICh2ID0gdWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFkgJiYgWS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgcmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBZKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgICAgdXJsOiBZLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFkgJiYgIUNlICYmICh1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBZLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBZLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHJlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpLCBDZSA9IChFID0gKHcgPSB1ZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCksICFDZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gbGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogQSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdWUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBXbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBJYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFRjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGxyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBsZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGh0LCBlcnJfXzogWm4gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBSYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoaHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gaHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGh0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBOYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBKbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIGYgPSB1cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIGIpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGh0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBJYyh2LCBtKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGYudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgVGModiwgbSk7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgWm4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFhlIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEZjID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBmO1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gWGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKGYgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIGYuYXBpKSlcbiAgICAgIHJldHVybiBYZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHplKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IHZlKG8sIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBNYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGI7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbikubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBJZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHYpO1xuICAgICAgY29uc3QgdyA9IGlyKHQsIHYpLCBFID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAobSA9IHYucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBuZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihFKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoRSwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgQSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoYiA9IChoID0gQS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBBLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB2KSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB2XG4gICAgICB9KSwgbmV3IEVycm9yKCh2ID09IG51bGwgPyB2b2lkIDAgOiB2Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IExjLCBlcnJfXzogS24gfSA9IEkoXCJwb2NreXQtY2NcIiksIERjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgeGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRGMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBRbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTGMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEtuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgSHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBPYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBVYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB4Yyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBRbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogVHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIGpjID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgWG4gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgVHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IElpKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgVHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCAkYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBqYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIEdjID0gNCwgeyBsb2dfXzogTmUsIGVycl9fOiBQdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIFZjID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTmUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBOZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBjID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBUbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBQdChhLCBsKSwgTmUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgTG4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgYm4obywgbCk7XG4gIGlmIChOZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBlbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gcWMoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBsLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgcWMgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBjXG4gIH0gPSBlO1xuICBsZXQgbCA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgR2M7IHUrKykge1xuICAgIE5lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IEJjKGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmID0gYXdhaXQgemModC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLmYubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTmUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgIGNvbnN0IF8gPSBlZShmKTtcbiAgICAgIFB0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgTChvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE5lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBlbyhyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHpjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBYbigkYyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoT24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgVW4oZSwgdCkgfSB9O1xuICAgIGlmIChWbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IHFuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoSGModCkpXG4gICAgICByZXR1cm4gYXdhaXQgcm8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgSGMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0byhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBCYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBzYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBQdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBlbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogTiwgZXJyX186IFJyIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBZYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHk7XG4gICAgTihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgYyA9ICgobSA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogbS51bmlmaWVkX2NjKSA/PyAwO1xuICAgIE4oYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChjICogMTAwKX0lYCk7XG4gICAgY29uc3QgbCA9IE1hdGgucmFuZG9tKCksIHUgPSBsIDwgYywgZCA9IHtcbiAgICAgIHJvbGw6IGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGMsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBOKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgVmMoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBOKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIE4oYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBmID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZlxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBmLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBOKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgTihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IGdzKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBiIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBOKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IFNyKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2Ygdm4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBOKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgTihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGIgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSBiW1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIE4oYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgdiA9IE9jKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgTihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgVWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT24oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE4oXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFVuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFZuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBOKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgcW4oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IGJuKG8sIF8pO1xuICAgICAgICBOKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCBPID0gKCh5ID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogeVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgdiA/IE4oXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE8gPyAoTihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKEpjKEMpKSkgOiAoTihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IHJvKEMsIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBBID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtBfV1gKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgTChvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE4oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRCk7XG4gICAgICAgICAgY29uc3QgUSA9IHV0KEQpO1xuICAgICAgICAgIHJldHVybiBOKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7US5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFEgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBOKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke08gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFNyKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQSxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBScihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgUnIoaCksIGg7XG4gICAgfVxuICB9XG4pLCBKYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gYmkucGFyc2UodCk7XG59LCBXYyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgdG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBXYy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4geG8ucGFyc2UodCk7XG59LCBybyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0byhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE4oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGJlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE4oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgWmMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEosIGVycl9fOiBLYyB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCBRYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBKKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFpjKTtcbiAgICBKKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IFJ0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IHZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIGQpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IGYgPSBkLCBfID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGYsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBtLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IHlcbiAgICB9O1xuICB9XG4pLCBYYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgSihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBKKFwiY29udGV4dFwiLCBlKSwgSihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgSihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIEooXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBKKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgSihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtvLm1vZGV9XWApO1xuICAgIGNvbnN0IHMgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgby5jaGVja291dF9zZXR0aW5nc1xuICAgICksIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBvLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IG5yKHMsIG8uY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgZyhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgbmUoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAuLi51LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBvLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogby5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV1cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBmID0gYXdhaXQgTChjLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG8udG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IGQuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBhLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEooYENvbmZpcm0gcmVzdWx0OiAke2Z9YCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBKKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBmKTtcbiAgICAgIGNvbnN0IF8gPSB1dChmKTtcbiAgICAgIHJldHVybiBKKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEtjKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBrZSwgZXJyX186IGVsIH0gPSBJKFwicGF5cGFsXCIpLCBubyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIHRsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgbm8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFQucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBybCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGtlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBrZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gbm8ucGFyc2Uocik7XG4gICAgICBrZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gcSh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTHMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIGYgPSBucihkLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGtlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgbSA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogX1xuICAgICAgICB9LFxuICAgICAgICAuLi5mXG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBiID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIHYgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IGJcbiAgICAgIH0pLCB3ID0gYCR7aH0/JHt2LnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBrZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3LCBhd2FpdCBUdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgRSA9IGF3YWl0IE1uKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBvLFxuICAgICAgICBfLFxuICAgICAgICB3XG4gICAgICApO1xuICAgICAga2UoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgRSk7XG4gICAgICBjb25zdCBDID0gSHQoRS5ocmVmLCBcImNhdHRcIiksIE8gPSBIdChFLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgQSA9IGF3YWl0IEwobywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBDIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IE8gOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGtlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIEEpLCBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IEEsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAobykge1xuICAgICAgdGhyb3cgZWwoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBvKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBvIH0pLCBuZXcgRXJyb3IoKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogZGUsIGVycl9fOiBOciB9ID0gSShcInBvY2t5dC1wYXlwYWxcIiksIG9vID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBubCA9IGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICBjb25zdCByID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG9vKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIlBvY2t5dCBQYXlQYWwgQ1BNIG5vdCBmb3VuZCBpbiBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzXCIpO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogITEsXG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIHN0YXJ0RmxvdzogKCkgPT4gVC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7fSB9XG4gICAgfSlcbiAgfTtcbn0sIG9sID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgQSwgRDtcbiAgICBkZShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGRlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gb28ucGFyc2UodCk7XG4gICAgZGUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IGwgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzLCB1ID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IG5yKHUsIHMuY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGRlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IHY0KCksIF8gPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgbSA9IHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogXyxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogXyA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoQSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgQS51c2VSZWRpcmVjdEZsb3cpLFxuICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogZlxuICAgICAgfSxcbiAgICAgIC4uLmRcbiAgICB9LCB5ID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBoID0gYnRvYShKU09OLnN0cmluZ2lmeShtKSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgcjogaFxuICAgIH0pLCB2ID0gYCR7eX0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICBpZiAoKEQgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIEQudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgZGUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdiwgYXdhaXQgVHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBkZShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgZGUoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgdyA9IGF3YWl0IE1uKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIG8sXG4gICAgICBmLFxuICAgICAgdlxuICAgICk7XG4gICAgZGUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgdyk7XG4gICAgY29uc3QgRSA9IFFuKHcuaHJlZiksIEMgPSBIdCh3LmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUMpXG4gICAgICB0aHJvdyBOcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgdy5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIGRlKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke0V9YCk7XG4gICAgY29uc3QgTyA9IGF3YWl0IEwobywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IEUsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBfID8gQyA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChkZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBPKSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBPLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IE5yKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgTyksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IE8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBGciA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBHLCBlcnJfXzogYWwgfSA9IEkoXCJzdHJpcGUtbGlua1wiKSwgaWwgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgc2wgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgY2wgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEcoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgaWwpO1xuICAgIEcoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBNKGEpLCBzID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRyhcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgdmUoYSwgby50b2tlbiwgcywgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBTaShuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEcoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBmID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RnJ9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHIgIT0gbnVsbCAmJiByLmRvTm90TW91bnRPbkluaXQgPyBHKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChHKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBmKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIGlmIChHKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHIgIT0gbnVsbCAmJiByLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgci5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBHKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIEcoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIG0pO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IG0uYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB5LmVycm9yID8gKGFsKFwiZXJyb3JcIiwgeS5lcnJvciksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcih5LmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChHKFwicGF5bWVudE1ldGhvZFwiLCB5LnBheW1lbnRNZXRob2QpLCBULnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBkbChGcilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBsbCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgRyhcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShvKTtcbiAgICBHKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBjID0gdWwociwgYS5zdHJpcGVQTSksIGwgPSBxKGMsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmxcbiAgICB9KSwgRyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgbmUobywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGEuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGxbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbFtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbFtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihsKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGwsIHMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBHKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHUpO1xuICAgIGNvbnN0IGYgPSBzbC5wYXJzZSh1LnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkO1xuICAgIGlmIChzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRyhcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgTChvLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGZcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHV0KF8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEcoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IF8gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGxbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGxbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBsW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfYWRkcmVzczogWihsKSxcbiAgICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGxbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBycihvLCBfKSB9O1xuICAgIH1cbiAgfVxuKSwgdWwgPSAoZSwgdCkgPT4ge1xuICB2YXIgbCwgdSwgZCwgZiwgXztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBbbiwgLi4uYV0gPSAoKHUgPSAobCA9IHQuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBsLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUuc3BsaXQoL1xccysvKSkgPz8gW10sIG8gPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKChkID0gdC5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogZC5lbWFpbCkgfHwgdC5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCAoKGYgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZi5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgKChfID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBzID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgYyA9IHJbcC5MQVNUX05BTUVdIHx8IG8gfHwgXCJcIjtcbiAgcmV0dXJuIHMgfHwgYyA/IChyW3AuRklSU1RfTkFNRV0gPSBzLCByW3AuTEFTVF9OQU1FXSA9IGMpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgRyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGRsID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIGNvbnN0IHIgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIG4gPyB0KG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHIpO1xuICB9O1xuICByKCk7XG59KSwgeyBsb2dfXzogVywgZXJyX186IHBsIH0gPSBJKFwic3RyaXBlLXByXCIpLCBfbCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgbWwgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgVyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgX2wpO1xuICAgIFcoXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbiA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IE0obiksIG8gPSBhLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBXKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCB2ZShuLCBhLnRva2VuLCBvLCB2b2lkIDApLCBjID0gYXdhaXQgQ2koXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBvXG4gICAgKTtcbiAgICBXKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgYy5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChsID09PSBudWxsKVxuICAgICAgcmV0dXJuIHBsKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfTtcbiAgICBXKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGwpO1xuICAgIGNvbnN0IHUgPSAoZCwgZikgPT4gVC5zdHJpcGVQUi5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBkKSxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgICAgaW5pdFJlc3VsdDoge1xuICAgICAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgICAgIHByOiBjLFxuICAgICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczogeyBhcHBsZVBheTogbC5hcHBsZVBheSwgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheSB9LFxuICAgICAgICBzdGFydEZsb3c6IHVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGMsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGwuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogbC5nb29nbGVQYXlcbiAgICAgIH0sXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBmbCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICBpbml0UmVzdWx0OiBvXG4gIH0pID0+IHtcbiAgICBpZiAoVyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGEucHJvdmlkZXIgIT09IHQucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2EucHJvdmlkZXJ9LCBnb3QgJHt0LnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBvLnByO1xuICAgIGlmIChhICE9IG51bGwgJiYgYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgVyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSk7XG4gICAgICBjb25zdCBoID0gdHlwZW9mIHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgaGwoYywgeS5hbW91bnQsIHkucGVuZGluZywgaCwgeS5sYWJlbCk7XG4gICAgfVxuICAgIFcoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IGtpKGMpO1xuICAgIFcoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCBXKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0geWwociwgbCksIGQgPSBxKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgVyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IGYgPSBhd2FpdCBtcyhzLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgXyA9IGdsKGYpO1xuICAgIFcoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBBaShfLCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgTShzKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFcoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgTChzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdXQoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgVyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoZCwgbS5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIocywgeSkgfTtcbiAgICB9XG4gIH1cbiksIHlsID0gKGUsIHQpID0+IHtcbiAgdmFyIGQsIGYsIF8sIG07XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gKChmID0gKGQgPSB0LnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogZi5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgbyA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gKG0gPSAoXyA9IHQucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IHQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbcC5aSVBfQ09ERV0gPSByW3AuWklQX0NPREVdIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSByW3AuRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCB1ID0gcltwLkxBU1RfTkFNRV0gfHwgbyB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHJbcC5GSVJTVF9OQU1FXSA9IGwsIHJbcC5MQVNUX05BTUVdID0gdSkgOiAocltwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBXKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgaGwgPSAoZSwgdCwgciwgbiwgYSkgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogdC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGEgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgY3VycmVuY3k6IHQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIGdsID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIEVpLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIG1lID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGUuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IHIgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gciwgcyA9IGEucHJvdmlkZXIgPT09IHQ7XG4gICAgcmV0dXJuIG8gJiYgcztcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApO1xuICByZXR1cm4gbi5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApLCBnKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiB0LFxuICAgIHByb2Nlc3NvcjogcixcbiAgICBjcG1zOiBlXG4gIH0pKSwgblswXTtcbn0sIFQgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWWNcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogbWwsXG4gICAgcnVuOiBmbFxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogY2wsXG4gICAgcnVuOiBsbFxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgaW5pdDogbmwsXG4gICAgcnVuOiBvbFxuICB9LFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB7XG4gICAgaW5pdDogdGwsXG4gICAgcnVuOiBybFxuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDoga2MsXG4gICAgcnVuOiBBY1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IFNjLFxuICAgIHJ1bjogQ2NcbiAgfSxcbiAgYWlyd2FsbGV4QUNIOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiB2Y1xuICB9LFxuICBhaXJ3YWxsZXhFRlQ6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFdzXG4gIH0sXG4gIGFpcndhbGxleEJBQ1M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFlzXG4gIH0sXG4gIGFpcndhbGxleFNFUEE6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IEtzXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IFFjLFxuICAgIHJ1bjogWGNcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBSYyxcbiAgICBydW46IE5jXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IEZjLFxuICAgIHJ1bjogTWNcbiAgfSxcbiAgYWR5ZW5Hb29nbGVQYXk6IHtcbiAgICBpbml0OiBoYyxcbiAgICBydW46IGdjXG4gIH0sXG4gIGFkeWVuQXBwbGVQYXk6IHtcbiAgICBpbml0OiBmYyxcbiAgICBydW46IHljXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiB3bCwgZXJyX186IHZsIH0gPSBJKFwiaW5pdC1mbG93c1wiKSwgb2UgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IGV0KCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCB0KG4pO1xuICAgICAgICB3bChg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgci5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIHZsKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIGVlKGEpLCBcIkRldGFpbHM6XCIsIGEpLCByLnRocm93KGEsIGVlKGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBibCA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXMoZSkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pKSk7XG59LCBFbCA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBvZShcIlN0cmlwZSBQUlwiLCBULnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBvZShcIlN0cmlwZSBMaW5rXCIsIFQuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IG9lKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBULmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBvZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBULmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IG9lKFwiTG9vcFwiLCBULmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IG9lKFwiUGF5UGFsXCIsIFQucGF5cGFsLmluaXQpLFxuICAvLyBQb2NreXQgUGF5UGFsXG4gIHBvY2t5dFBheXBhbDogb2UoXCJQb2NreXQgUGF5UGFsXCIsIFQucG9ja3l0UGF5cGFsLmluaXQpLFxuICAvLyBBdXRobmV0IEdvb2dsZVBheVxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IG9lKFwiQXV0aG5ldCBHb29nbGVQYXlcIiwgVC5hdXRob3JpemVOZXRHb29nbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgQXBwbGVQYXlcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IG9lKFwiQXV0aG5ldCBBcHBsZVBheVwiLCBULmF1dGhvcml6ZU5ldEFwcGxlUGF5LmluaXQpLFxuICAvLyBBZHllbiBHb29nbGVQYXlcbiAgYWR5ZW5Hb29nbGVQYXk6IG9lKFwiQWR5ZW4gR29vZ2xlUGF5XCIsIFQuYWR5ZW5Hb29nbGVQYXkuaW5pdCksXG4gIC8vIEFkeWVuIEFwcGxlUGF5XG4gIGFkeWVuQXBwbGVQYXk6IG9lKFwiQWR5ZW4gQXBwbGVQYXlcIiwgVC5hZHllbkFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogUGwgfSA9IEkoXCJmb3JtLWNhbGxiYWNrc1wiKSwgYWUgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBNciA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBhZSxcbiAgb25CbHVyOiBhZSxcbiAgb25DaGFuZ2U6IGFlLFxuICBvbkxvYWQ6IGFlLFxuICBvbkxvYWRFcnJvcjogYWUsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBhZSxcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGFlLFxuICBvbkNoZWNrb3V0U3VjY2VzczogYWUsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogYWUsXG4gIG9uQ2hlY2tvdXRFcnJvcjogYWUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBhZVxufSksIGZlID0gY2xhc3MgZmUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9ICh0KSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBmZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IHlhKHIsIG4gPz8gZmUuTk9PUCwgUGwpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nbcl0gPSBhO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbmZlLk5PT1AgPSAoKSA9PiB7XG59LCBmZS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoTXIua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgdFtyXSA9IGZlLk5PT1A7XG4gIH0pLCB0O1xufSwgZmUuZnJvbU9iamVjdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgZmUoKTtcbiAgcmV0dXJuIHIuc2V0Q2FsbGJhY2tzKE1yLnBhcnNlKHQpKSwgcjtcbn07XG5sZXQgQnQgPSBmZTtcbmZ1bmN0aW9uIFNsKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSAkKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChhKSA9PiBhLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAoYSkgPT4gYS5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uIENsKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgbyA9ICQoKTtcbiAgICAgICAgcmV0dXJuICgodCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBhID0gKG4gPSAkKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBvID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gbyA/IG8uZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBrbCgpIHtcbiAgY29uc3QgZSA9IFNsKCksIHQgPSBDbChlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jb25zdCBhbyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5oZWlnaHQgOiBudWxsLCB0ID0gd2luZG93ICYmIHdpbmRvdy5zY3JlZW4gPyB3aW5kb3cuc2NyZWVuLndpZHRoIDogbnVsbCwgciA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi5jb2xvckRlcHRoIDogbnVsbCwgbiA9IHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yID8gd2luZG93Lm5hdmlnYXRvci5qYXZhRW5hYmxlZCgpIDogITEsIGEgPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50IDogbnVsbCwgbyA9IFwidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOFwiO1xuICBsZXQgcyA9IG51bGw7XG4gIHdpbmRvdyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIChzID0gd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZSA/IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgOiB3aW5kb3cubmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSk7XG4gIGNvbnN0IGMgPSAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiB7XG4gICAgY29sb3JfZGVwdGg6IHIsXG4gICAgamF2YV9lbmFibGVkOiBuLFxuICAgIGphdmFzY3JpcHRfZW5hYmxlZDogITAsXG4gICAgbGFuZ3VhZ2U6IHMsXG4gICAgc2NyZWVuX2hlaWdodDogZSxcbiAgICBzY3JlZW5fd2lkdGg6IHQsXG4gICAgdGltZV96b25lX29mZnNldDogYyxcbiAgICB1c2VyX2FnZW50OiBhLFxuICAgIGFjY2VwdF9oZWFkZXI6IG9cbiAgfTtcbn07XG52YXIgUiA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFwcGxlUGF5ID0gXCJhcHBsZS1wYXlcIiwgZS5nb29nbGVQYXkgPSBcImdvb2dsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUuYWlyd2FsbGV4R29vZ2xlUGF5ID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiLCBlLmFpcndhbGxleEFwcGxlUGF5ID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0R29vZ2xlUGF5ID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEFwcGxlUGF5ID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCIsIGUuYWR5ZW5Hb29nbGVQYXkgPSBcImFkeWVuLWdvb2dsZS1wYXlcIiwgZS5hZHllbkFwcGxlUGF5ID0gXCJhZHllbi1hcHBsZS1wYXlcIiwgZS5haXJ3YWxsZXhBQ0ggPSBcImFpcndhbGxleC1hY2hcIiwgZS5haXJ3YWxsZXhFRlQgPSBcImFpcndhbGxleC1lZnRcIiwgZS5haXJ3YWxsZXhCQUNTID0gXCJhaXJ3YWxsZXgtYmFjc1wiLCBlLmFpcndhbGxleFNFUEEgPSBcImFpcndhbGxleC1zZXBhXCIsIGUpKShSIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFIpO1xudmFyIEFlID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQUNIID0gXCJhY2hcIiwgZS5FRlQgPSBcImVmdFwiLCBlLkJBQ1MgPSBcImJhY3NcIiwgZS5TRVBBID0gXCJzZXBhXCIsIGUuQVBQTEVfUEFZID0gXCJhcHBsZV9wYXlcIiwgZS5DUkVESVRfQ0FSRCA9IFwiY3JlZGl0X2NhcmRcIiwgZS5HT09HTEVfUEFZID0gXCJnb29nbGVfcGF5XCIsIGUuU1RSSVBFX0xJTksgPSBcInN0cmlwZV9saW5rXCIsIGUuQ1JZUFRPID0gXCJjcnlwdG9cIiwgZS5QQVlQQUwgPSBcInBheXBhbFwiLCBlKSkoQWUgfHwge30pO1xuY29uc3QgTHIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4QXBwbGVQYXksIGUuYXV0aG9yaXplTmV0QXBwbGVQYXksIGUuYWR5ZW5BcHBsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIG8gIT0gbnVsbCAmJiBvLmlzQXZhaWxhYmxlICYmIHIucHVzaChvKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IG4uc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gQWwociwgYSlcbiAgfTtcbn0sIERyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEdvb2dsZVBheSwgZS5hdXRob3JpemVOZXRHb29nbGVQYXksIGUuYWR5ZW5Hb29nbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSBhLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBvICE9IG51bGwgJiYgby5pc0F2YWlsYWJsZSAmJiByLnB1c2gobyk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobykgPT4gbi5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pXG4gIH0pLCB7XG4gICAgcHJvY2Vzc29yczogci5tYXAoKGEpID0+IGEucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogci5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgc3RhcnRGbG93OiAoYSkgPT4gSWwociwgYSlcbiAgfTtcbn0sIEFsID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEFwcGxlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgSWwgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHt0LnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IG4uaXNBdmFpbGFibGUpO1xuICBpZiAocilcbiAgICByZXR1cm4gci5zdGFydEZsb3codCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBHb29nbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIFRsID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCB7IGxvZ19fOiBqdCwgZXJyX186IFJsIH0gPSBJKFwidHJhY2VyXCIpLCBObCA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgRmwoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBSbChgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IHhyO1xuY29uc3QgRmwgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1wSUtCVzBBNC0hfnswMDN9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IGEsIFdlYlRyYWNlclByb3ZpZGVyOiBvIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUN4NXVKRkJ6LSF+ezAwNn1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGMgfSA9IHMsIGwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ2FZb2pzV2ctIX57MDBifX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGwsIGQgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRE1Ca3NYbTktIX57MDBjfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IGYgfSA9IGQsIF8gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ3lYZERJOXUtIX57MDBlfX4uanMnKSwgeyBSZXNvdXJjZTogbSB9ID0gXywgeSA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLTBWUmt0MF9TLSF+ezAwaH1+LmpzJykudGhlbigoQ2UpID0+IENlLmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGggfSA9IHksIGIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtV1E1SEtZX2ktIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogdiB9ID0gYiwgdyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CX1ktaEVObi0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogRSwgQjNJbmplY3RFbmNvZGluZzogQyB9ID0gdywgTyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1tMFU3aWZvdC0hfnswMDF9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogQSB9ID0gTztcbiAganQoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCBEID0gTWwodCk7XG4gIGp0KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7RH1gKTtcbiAgY29uc3QgUSA9IG5ldyB2KHsgdXJsOiBEIH0pLCBTZSA9IHtcbiAgICBcInNlcnZpY2UudmVyc2lvblwiOiBlLFxuICAgIFwic2VydmljZS5uYW1lXCI6IFwib2pzXCJcbiAgfTtcbiAgcmV0dXJuIG5ldyBvKHtcbiAgICByZXNvdXJjZTogbmV3IG0oU2UpLm1lcmdlKGgoKSksXG4gICAgc3BhblByb2Nlc3NvcnM6IFtcbiAgICAgIG5ldyBhKG5ldyBuKCkpLFxuICAgICAgbmV3IEEoUSwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBFKHsgaW5qZWN0RW5jb2Rpbmc6IEMuTVVMVElfSEVBREVSIH0pXG4gIH0pLCBmKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgYyh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIHhyID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwganQoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIHhyO1xufSwgTWwgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59O1xuY2xhc3MgTGwge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKG8pID0+IHtcbiAgICAgIGlmICghby5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoT3Ioby5vcmlnaW4pICE9PSBPcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBvLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBvLmRhdGEucGVucGFsIHx8IHR5cGVvZiBvLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBvLmRhdGEuc291cmNlICYmIG8uZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBNcyhKU09OLnBhcnNlKG8uZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IG8uc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChvKSA9PiBvLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIW8uZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBvLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBvKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKG8ubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIG8pLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKG8ubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gYTtcbiAgfVxufVxuY29uc3QgT3IgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBEbChlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgYnMobik7XG4gIGlmICghRXMobiwgYSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIHhsIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IE9sID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChhKSA9PiB7XG4gICAgaWYgKGEuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBvID0gYS5sb2FkZWRWYWx1ZSwgcyA9IG8uaXNBdmFpbGFibGUgJiYgby5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBvLmlzQXZhaWxhYmxlICYmIG8uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIFVyKFwiYXBwbGVfcGF5XCIsIG8sIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBVcihcImdvb2dsZV9wYXlcIiwgbywgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIFVyID0gKGUsIHQsIHIsIG4sIGEpID0+IFQuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBqKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBqciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IHBlLCBlcnJfXzogdGUgfSA9IEkoXCJvcC1mb3JtXCIpLCB5ZSA9IGNsYXNzIHllIHtcbiAgY29uc3RydWN0b3IodCkge1xuICAgIHZhciBhO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSAhMSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgZXQoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGV0KCksIHRoaXMuY29udGV4dCA9IG5ldyBldCgpLCB0aGlzLmluaXRGbG93cyA9IEVsKCksIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG8gPSBqZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBzID0gby5zdGFydFNwYW4oXCJmb3JtLmluaXRpYWxpemVcIiwge1xuICAgICAgICBraW5kOiBzdC5DTElFTlQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAvLyAnZW52aXJvbm1lbnQnOiAsXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yayc6IGZyYW1ld29yayxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4ZS53aXRoKGplLnNldFNwYW4oeGUuYWN0aXZlKCksIHMpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYyA9IHRoaXMuY3JlYXRlRWxlbWVudChfZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBjLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBjLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKGMubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIGMubW91bnQoXCJib2R5XCIpLCBwZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBwZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBwZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBsID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzoganJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgcGUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCB4ZS5hY3RpdmUoKSksIGQgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzoganJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBwZShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgdnMoZCwgdGhpcy5kZXZpY2VUb2tlbiksIHBlKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IGYgPSB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGYpLCBPbCh0aGlzLmluaXRGbG93cywgZiwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgcGUoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IGJsKHRoaXMuaW5pdEZsb3dzLCBmLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChsLnRvdGFsQW1vdW50QXRvbXMsIGwuY3VycmVuY3kpLCBwZShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpLCBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgY29uc3QgbCA9IGVlKGMpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGxcbiAgICAgICAgICB9KSwgdGUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChvKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IG8sIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBfZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gbyk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQobyksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IobyksIG8pLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogb1xuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChvLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gdW8ucGFyc2UobyksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gZC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChvLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBvLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IG9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbX2UuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW19lLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbX2UuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtfZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW19lLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tvXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIG8uc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIFRsKG8uc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKG8pID0+IG10KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBEbChvLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihvLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIG8udHlwZSA9PT0gX2UuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IHRlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAobykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHRlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IG10KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5vIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IFQuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogbyA9PSBudWxsID8gdm9pZCAwIDogby5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IG10KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgIGNvbnN0IG8gPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgIGlmICghbylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogcywgaXNBdmFpbGFibGU6IGMgfSA9IExyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIHsgcHJvY2Vzc29yczogbCwgaXNBdmFpbGFibGU6IHUgfSA9IERyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBmID0gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuaXNBdmFpbGFibGUpID8/ICExLCBfID0gby5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgKHcpID0+IHcucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgdy5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICApLCBtID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIHkgPSAobSA9PSBudWxsID8gdm9pZCAwIDogbS5pc0F2YWlsYWJsZSkgPz8gITEsIGggPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5hcHBsZVBheSxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHMsXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogY1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5nb29nbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBsLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIucGF5cGFsLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogZiA/IFtVLkVudW0ucGF5cGFsXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGZcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIucG9ja3l0UGF5cGFsLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogXyA/IFtVLkVudW0ucG9ja3l0XSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IF9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIubG9vcENyeXB0byxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IHkgPyBbVS5FbnVtLmxvb3BdIDogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogeVxuICAgICAgICAgIH1cbiAgICAgICAgXSwgYiA9IHtcbiAgICAgICAgICBwYXlwYWw6IFIucGF5cGFsLFxuICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogUi5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IFIuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogUi5hdXRob3JpemVuZXRBcHBsZVBheSxcbiAgICAgICAgICBhZHllbkdvb2dsZVBheTogUi5hZHllbkdvb2dsZVBheSxcbiAgICAgICAgICBhZHllbkFwcGxlUGF5OiBSLmFkeWVuQXBwbGVQYXlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFsuLi5PYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbdywgRV0pID0+IHtcbiAgICAgICAgICBjb25zdCBDID0gRS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGJbd10gPz8gdyxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IChDID09IG51bGwgPyB2b2lkIDAgOiBDLmlzQXZhaWxhYmxlKSA/PyAhMVxuICAgICAgICAgIH07XG4gICAgICAgIH0pLCAuLi5oXTtcbiAgICAgIH1cbiAgICApLCB0aGlzLmdlbmVyYWxTdWJtaXQgPSBhc3luYyAobywgcykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHRlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IG10KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcImdlbmVyYWxfZm9ybV9zdWJtaXRcIixcbiAgICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLCB7IG1ldGhvZDogbywgc2V0dGluZ3M6IHMgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdlbmVyYWxTdWJtaXRcIik7XG4gICAgICAgICAgICBjb25zdCBsID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgaWYgKCFsKVxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICAgICAgc3dpdGNoIChvKSB7XG4gICAgICAgICAgICAgIGNhc2UgUi5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5QQVlQQUwsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBULnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmxvb3BDcnlwdG86XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQubG9vcENyeXB0by5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJjcnlwdG9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJsb29wXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IExyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuZ29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydEZsb3c6IHUgfSA9IERyKHRoaXMuaW5pdEZsb3dzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFkeWVuR29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWR5ZW5BcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImFkeWVuLWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhBQ0g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQuYWlyd2FsbGV4QUNILnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5BQ0gsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEVGVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhFRlQucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLkVGVCxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QkFDUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhCQUNTLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5CQUNTLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhTRVBBOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmFpcndhbGxleFNFUEEucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLlNFUEEsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBrdChvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBjO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIHBlKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAobyA9ICQoKSkgPT0gbnVsbCB8fCBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB2aSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhvKTtcbiAgICB9LCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuNlwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSB0LmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4udCwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEJ0LmZyb21PYmplY3QodCksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gdC5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyB4bCgpLCB0aGlzLmRldmljZVRva2VuID0gVG4oKSwgd2koKTtcbiAgICBjb25zdCB7IGZyYW1ld29yazogciwgdmVyc2lvbjogbiB9ID0ga2woKTtcbiAgICBwbih0aGlzLmJhc2VVcmwpLnRoZW4oKG8pID0+IHtcbiAgICAgIGlmICghcXQuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGVudmlyb25tZW50OiBvLFxuICAgICAgICAgIGZyYW1ld29yazogcixcbiAgICAgICAgICBmcmFtZXdvcmtWZXJzaW9uOiBuLFxuICAgICAgICAgIG9qc1ZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBvanNSZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmxcbiAgICAgICAgfTtcbiAgICAgICAgcXQuc2V0KHMpO1xuICAgICAgfVxuICAgIH0pLCBnKFwiZm9ybV9pbml0XCIpLCBjb25zb2xlLmxvZyhcIk9KUyBWRVJTSU9OXCIsIHRoaXMub2pzVmVyc2lvbiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBObCh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IExsKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAoYSA9ICQoKSkgPT0gbnVsbCB8fCBhLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSB5ZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgYSA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAodGUoYSksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksICExKSA6ICFyIHx8IHIuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCA/ICh0ZShhKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogYSB9KSwgITEpIDogITA7XG4gIH1cbn07XG55ZS5vanNGbG93cyA9IFQsIHllLmFzc2lnbkFzU2luZ2xldG9uID0gKHQpID0+IHtcbiAgaWYgKHllLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSB0O1xufSwgeWUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHllLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAodCwgciwgbiwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHQuYmFzZVVybCA/PyBDbikub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogdC5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG59KTtcbmxldCAkciA9IHllO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKCRyLmdldEluc3RhbmNlKCkpIHtcbiAgICAkci5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwbGVQYXlSZXN1bHQsIHNldEFwcGxlUGF5UmVzdWx0XSA9IHVzZVN0YXRlKE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSk7XG4gIGNvbnN0IFtnb29nbGVQYXlSZXN1bHQsIHNldEdvb2dsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgICAgaWYgKG9wRm9ybSkge1xuICAgICAgICBjb25zdCBhcHBsZVBheVJlc3VsdDIgPSBnZXRBcHBsZVBheVByb2Nlc3NvcnMob3BGb3JtLmluaXRGbG93cyk7XG4gICAgICAgIHNldEFwcGxlUGF5UmVzdWx0KGFwcGxlUGF5UmVzdWx0Mik7XG4gICAgICAgIGNvbnN0IGdvb2dsZVBheVJlc3VsdDIgPSBnZXRHb29nbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRHb29nbGVQYXlSZXN1bHQoZ29vZ2xlUGF5UmVzdWx0Mik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9ICRyLmdldEluc3RhbmNlKCkgPz8gbmV3ICRyKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgYWxsb3dUcmFjaW5nOiBwcm9wcy5hbGxvd1RyYWNpbmcgPz8gZmFsc2UsXG4gICAgICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHByb3BzLnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbixcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBhcHBsZVBheVJlc3VsdCxcbiAgICBnb29nbGVQYXk6IGdvb2dsZVBheVJlc3VsdCxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmV4cG9ydCB7ICRpIGFzICQsIENhcmRDdmNFbGVtZW50IGFzIEMsIEVlIGFzIEUsIEZpZWxkTmFtZSBhcyBGLCBLdCBhcyBLLCBQciBhcyBQLCBRdCBhcyBRLCBTdWJtaXRNZXRob2RzIGFzIFMsIFZpIGFzIFYsIFdpIGFzIFcsIFgsIFp0IGFzIFosIEV0IGFzIGEsIGl0IGFzIGIsIENhcmRFbGVtZW50IGFzIGMsIENhcmRFeHBpcnlFbGVtZW50IGFzIGQsIENhcmROdW1iZXJFbGVtZW50IGFzIGUsIGZuIGFzIGYsIGduIGFzIGcsIEVsZW1lbnRzRm9ybSBhcyBoLCBpcyBhcyBpLCBqZSBhcyBqLCBFbnZpcm9ubWVudCBhcyBrLCBQYXlJbkZhaWxlZCBhcyBsLCBQYXlJblN0YXRlIGFzIG0sIHJzIGFzIHIsIHN0IGFzIHMsIHRzIGFzIHQsIHVzZU9wZW5QYXlFbGVtZW50cyBhcyB1LCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgYXMgdiwgeGUgYXMgeCwgeW4gYXMgeSwgenQgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsa0JBQUFBLFVBQXNCO0FBQy9CLFNBQVMsS0FBS0MsU0FBVztBQUN6QixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLE9BQUFDLElBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxpQkFBQUMsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsVUFBQUMsSUFBUSxXQUFBQyxJQUFTLGFBQUFDLFVBQWlCO0FBRWhGLFNBQVNDLEdBQVNDLEdBQVFDLEdBQVc7QUFDbkMsTUFBSUMsSUFBaUIsT0FBTztBQUM1QixFQUFBQSxJQUFpQkEsRUFBZUYsR0FBUUMsQ0FBUyxJQUFJRCxFQUFPLFlBQVlDO0FBQzFFO0FBQ0EsU0FBU0UsR0FBU0gsR0FBUUksR0FB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QSxJQUNmLFlBQVlBLEVBQU87QUFBQSxJQUNuQixVQUFVTTtBQUFBLElBQ1YsV0FBV0U7QUFBQSxJQUNYLFFBQUFKO0FBQUE7QUFBQSxJQUVBLFNBQVM7QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxZQUFZTTtBQUFBLElBQ1osV0FBQUk7QUFBQSxJQUNBLE1BQU1GO0FBQUEsRUFDUjtBQUNBLFNBQXVCLGdCQUFBL2tCLEdBQUl5bEIsSUFBVSxFQUFFLFVBQVVwQixJQUF1QyxnQkFBQXJrQixHQUFJekIsR0FBZ0IsVUFBVSxFQUFFLE9BQU84bEIsR0FBc0IsVUFBMEIsZ0JBQUFya0IsR0FBSSxPQUFPLEVBQUUsSUFBSWlrQixJQUFhLFdBQVdybEIsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBUzhtQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUExbEIsR0FBSXlsQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUQsS0FBMEIsQ0FBQ3JCLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiQxIiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZUFkZHJlc3MiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJhIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18kMSIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJNZXRyaWNzUXVldWUiLCAiZXZlbnROYW1lIiwgInByb3BlcnRpZXMiLCAiY29udGV4dFByb3BlcnRpZXMiLCAiZXZlbnQiLCAidjQiLCAic3RvcmVkUXVldWUiLCAic2FmZVdpbmRvdyIsICJjb250ZXh0IiwgImJhdGNoIiwgImJhdGNoUGF5bG9hZCIsICJjb25udG9VcmwiLCAibWV0cmljc1JvdXRlciIsICJldmVudHNUb0tlZXAiLCAibWV0cmljc1F1ZXVlIiwgImV4dHJhY3RJc3N1ZXNQZXJGaWVsZCIsICJpc3N1ZXNQZXJGaWVsZCIsICJrZXkiLCAiZmllbGROYW1lIiwgIkZpZWxkTmFtZUVudW0iLCAibG9nX18iLCAiZXJyX18kMSIsICJjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSIsICJyZXF1aXJlX3ppcF9jb2RlIiwgInJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MiLCAicmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MiLCAicGF5bWVudF9tZXRob2QiLCAiY29uZGl0aW9uYWxGaWVsZHMiLCAiRmllbGROYW1lIiwgIlJlcXVpcmVkU3RyaW5nIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMiLCAibm9uQ2RlRm9ybUlucHV0cyIsICJvblZhbGlkYXRpb25FcnJvciIsICJkZWZhdWx0RmllbGRWYWx1ZXMiLCAia2V5cyIsICJyZXN1bHQiLCAiZm9ybWF0dGVkIiwgImlzc3VlcyIsICJpc3N1ZUtleXMiLCAiUGF5bWVudFByb2Nlc3NvciIsICJBV1hfTE9BRElORyIsICJBZHllbkVudmlyb25tZW50IiwgIkVudmlyb25tZW50IiwgIkVudmlyb25tZW50MiIsICJQYXlJbkZhaWxlZCIsICJQYXlJbkZhaWxlZDIiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFIiwgImdldEFwcGxlUGF5UHJvY2Vzc29ycyIsICJpbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0Rmxvd3MiLCAiYXBwbGVQYXlJbml0UmVzdWx0cyIsICJmbG93IiwgImZsb3dWYWx1ZSIsICJzdHJpcGVQUkZsb3dSZXN1bHQiLCAiY3VzdG9tUGFyYW1zIiwgInN0YXJ0QXBwbGVQYXlGbG93IiwgImdldEdvb2dsZVBheVByb2Nlc3NvcnMiLCAiZ29vZ2xlUGF5SW5pdEZsb3dzIiwgImdvb2dsZVBheUluaXRSZXN1bHRzIiwgInN0YXJ0R29vZ2xlUGF5RmxvdyIsICJpbml0UmVzdWx0cyIsICJhdmFpbGFibGVGbG93IiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJFbGVtZW50c0NvbnRleHQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAidXNlQ29udGV4dCIsICJFbGVtZW50RnJhbWUiLCAicHJvcHMiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJ1c2VTdGF0ZSIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVzZUVmZmVjdCIsICJqc3giLCAidXJsIiwgIkNhcmRFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCIsICJpbyIsICJzbyIsICJjbyIsICJyIiwgIm4iLCAiYSIsICJvIiwgInMiLCAibG8iLCAiayIsICJTIiwgInFyIiwgInpyIiwgIkhyIiwgIkJyIiwgIl9lIiwgInVvIiwgIlN0IiwgInBvIiwgInNlIiwgIl9vIiwgIm1vIiwgImZvIiwgInlvIiwgImhvIiwgImdvIiwgIndvIiwgInZvIiwgImJvIiwgIkVvIiwgIlBvIiwgIlNvIiwgIk9lIiwgIkNvIiwgImtvIiwgIkFvIiwgIklvIiwgIlRvIiwgIlJvIiwgIk5vIiwgIm50IiwgIkZvIiwgIk1vIiwgIkxvIiwgIkYiLCAiRG8iLCAieG8iLCAiT28iLCAiWXIiLCAiVW8iLCAiam8iLCAiJG8iLCAiR28iLCAiVm8iLCAiUCIsICJxbyIsICJKciIsICJXciIsICJ6byIsICJIbyIsICJWZSIsICJCbyIsICJZbyIsICJaciIsICJKbyIsICJXbyIsICJabyIsICJkciIsICJLciIsICJwciIsICJRciIsICJLbyIsICJRbyIsICJndCIsICJYciIsICJYbyIsICJlYSIsICJ0YSIsICJlbiIsICJyYSIsICJ0biIsICJuYSIsICJvYSIsICJhYSIsICJpYSIsICJzYSIsICJjYSIsICJsYSIsICJ1YSIsICJkYSIsICJwYSIsICIkdCIsICJtYSIsICJmYSIsICJlZSIsICJ5YSIsICJoYSIsICJybiIsICJnYSIsICJ3YSIsICJIIiwgImciLCAiZ2kiLCAiU24iLCAid2UiLCAiSSIsICJjaGFsayIsICJHdCIsICJQZSIsICJ2YSIsICJubiIsICJVZSIsICJ3dCIsICJ2dCIsICJEZSIsICJiYSIsICJ5IiwgImgiLCAiYiIsICJ2IiwgIl8iLCAiRWEiLCAiViIsICJDdCIsICJGdCIsICJidCIsICJsdCIsICJfciIsICJvbiIsICJhbiIsICJzbiIsICJjbiIsICJsbiIsICJtciIsICJmdCIsICJZdCIsICJrYSIsICJWdCIsICJQYSIsICJNdCIsICJTYSIsICJwdCIsICJDYSIsICJKdCIsICJBYSIsICJJYSIsICJnZSIsICJSYSIsICJmciIsICJUYSIsICJOYSIsICJGYSIsICJNYSIsICJMYSIsICJEYSIsICJ1biIsICJ5ciIsICJ4YSIsICJPYSIsICJociIsICJVYSIsICJnciIsICJqYSIsICIkYSIsICJHYSIsICJWYSIsICJxYSIsICJ6YSIsICJIYSIsICJCYSIsICJZYSIsICJKYSIsICJXYSIsICJaYSIsICJLYSIsICJRYSIsICJYYSIsICJlaSIsICJkbiIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJhaSIsICJpaSIsICJzaSIsICJjaSIsICJsaSIsICJ1aSIsICJkaSIsICJ3IiwgImV0IiwgImt0IiwgIndyIiwgInBpIiwgIkx0IiwgInBuIiwgIkF0IiwgIiQiLCAicXQiLCAidnIiLCAibWkiLCAiZmkiLCAieWkiLCAiX3QiLCAiaGkiLCAiYyIsICJXdCIsICJfbiIsICJtbiIsICJ0IiwgIndpIiwgInZpIiwgIkdyIiwgImJpIiwgIkVpIiwgIlBpIiwgIkl0IiwgImJyIiwgIlR0IiwgIlNpIiwgIkNpIiwgImtpIiwgIkFpIiwgIklpIiwgIlRpIiwgIlRlIiwgIkVyIiwgIlJpIiwgImwiLCAidSIsICJkIiwgIk5pIiwgIkZpIiwgIm90IiwgImF0IiwgIlp0IiwgIml0IiwgIkt0IiwgIk1pIiwgIkxpIiwgIkRpIiwgIlllIiwgIlgiLCAieGkiLCAiT2kiLCAiVWkiLCAiamkiLCAiRXQiLCAiJGkiLCAiR2kiLCAiVmkiLCAicWkiLCAiemkiLCAiSGkiLCAiQmkiLCAiWWkiLCAiRHQiLCAiSmkiLCAiUXQiLCAienQiLCAieW4iLCAiV2kiLCAidHQiLCAiWHQiLCAiZXIiLCAiWmkiLCAidHIiLCAiS2kiLCAiUWkiLCAiaG4iLCAiWGkiLCAiZXMiLCAidHMiLCAicnMiLCAiZ24iLCAibnMiLCAieHQiLCAid24iLCAib3MiLCAiYXMiLCAiaXMiLCAic3MiLCAiY3MiLCAiUHIiLCAic3QiLCAiRWUiLCAieGUiLCAiT3QiLCAibHMiLCAiamUiLCAidXMiLCAibXQiLCAidm4iLCAiQiIsICJwcyIsICJkcyIsICJfcyIsICJNIiwgIm5lIiwgImJuIiwgIm1zIiwgIkwiLCAiZnMiLCAieXMiLCAiaHMiLCAidmUiLCAiRW4iLCAiU3IiLCAiZ3MiLCAicnIiLCAiUG4iLCAid3MiLCAiY29ubmVjdFRvQ2hpbGQiLCAiUnQiLCAidnMiLCAiYnMiLCAiRXMiLCAiQ24iLCAia24iLCAicnQiLCAiUHMiLCAiQW4iLCAiQ3IiLCAiUmUiLCAiWmUiLCAiU3MiLCAiQ3MiLCAia3MiLCAiVHMiLCAiQXMiLCAiSXMiLCAiUnMiLCAiSW4iLCAiVG4iLCAiTnMiLCAiRnMiLCAiaiIsICJNcyIsICJMcyIsICJaIiwgIksiLCAiTnQiLCAiRHMiLCAieHMiLCAiUm4iLCAiTm4iLCAiT3MiLCAiVXMiLCAiYmUiLCAiRm4iLCAianMiLCAiTW4iLCAiY2UiLCAiJHMiLCAiR3MiLCAiVnMiLCAicXMiLCAienMiLCAiSHMiLCAicSIsICJMbiIsICJWbCIsICJEbiIsICJ1dCIsICJ6IiwgIm5yIiwgImxlIiwgIlUiLCAieG4iLCAicWUiLCAiZiIsICJvciIsICJVdCIsICJhciIsICJ6ZSIsICJIZSIsICJpciIsICJKZSIsICJCcyIsICJZcyIsICJFIiwgIm0iLCAiQyIsICJrciIsICJKcyIsICJXcyIsICJXZSIsICJacyIsICJLcyIsICJRcyIsICJzciIsICJYcyIsICJlYyIsICJPbiIsICJ0YyIsICJVbiIsICJqbiIsICIkbiIsICJjciIsICJsciIsICJyYyIsICJuYyIsICJ1ciIsICJvYyIsICJhYyIsICIkZSIsICJjdCIsICJpYyIsICJHbiIsICJzYyIsICJjYyIsICJBciIsICJsYyIsICJ1YyIsICJkYyIsICJWbiIsICJxbiIsICJ6biIsICJIbiIsICJwYyIsICJtYyIsICJhbyIsICJLZSIsICJCbiIsICJmYyIsICJUIiwgInljIiwgImllIiwgIk1lIiwgImhjIiwgImdjIiwgIk8iLCAiQSIsICJEIiwgIlEiLCAidWUiLCAiQ2UiLCAiWSIsICJoZSIsICJGZSIsICJCZSIsICJJciIsICJ3YyIsICJ2YyIsICJ5dCIsICJiYyIsICJFYyIsICJQYyIsICJRZSIsICJZbiIsICJTYyIsICJDYyIsICJyZSIsICJMZSIsICJrYyIsICJBYyIsICJTZSIsICJKbiIsICJXbiIsICJJYyIsICJUYyIsICJodCIsICJabiIsICJSYyIsICJOYyIsICJJZSIsICJYZSIsICJGYyIsICJNYyIsICJMYyIsICJLbiIsICJEYyIsICJ4YyIsICJRbiIsICJIdCIsICJPYyIsICJVYyIsICJUciIsICJqYyIsICJYbiIsICIkYyIsICJHYyIsICJOZSIsICJQdCIsICJWYyIsICJlbyIsICJxYyIsICJCYyIsICJ6YyIsICJIYyIsICJybyIsICJ0byIsICJOIiwgIlJyIiwgIlljIiwgIkpjIiwgIldjIiwgIlpjIiwgIkoiLCAiS2MiLCAiUWMiLCAiWGMiLCAia2UiLCAiZWwiLCAibm8iLCAidGwiLCAicmwiLCAiZGUiLCAiTnIiLCAib28iLCAibmwiLCAib2wiLCAiRnIiLCAiRyIsICJhbCIsICJpbCIsICJzbCIsICJjbCIsICJkbCIsICJsbCIsICJ1bCIsICJXIiwgInBsIiwgIl9sIiwgIm1sIiwgIm1lIiwgImZsIiwgImhsIiwgInlsIiwgImdsIiwgIndsIiwgInZsIiwgIm9lIiwgImJsIiwgIkVsIiwgIlBsIiwgImFlIiwgIk1yIiwgImZlIiwgIkJ0IiwgIlNsIiwgIkNsIiwgImtsIiwgIlIiLCAiQWUiLCAiTHIiLCAiQWwiLCAiRHIiLCAiSWwiLCAiVGwiLCAianQiLCAiUmwiLCAiTmwiLCAiRmwiLCAieHIiLCAiTWwiLCAiTGwiLCAiT3IiLCAiRGwiLCAieGwiLCAiT2wiLCAiVXIiLCAianIiLCAicGUiLCAidGUiLCAieWUiLCAiJHIiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJhcHBsZVBheVJlc3VsdCIsICJzZXRBcHBsZVBheVJlc3VsdCIsICJnb29nbGVQYXlSZXN1bHQiLCAic2V0R29vZ2xlUGF5UmVzdWx0IiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiYXBwbGVQYXlSZXN1bHQyIiwgImdvb2dsZVBheVJlc3VsdDIiLCAiZm9ybSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=
9109
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTJcIiAvKiBMSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lM1wiIC8qIExJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIgLyogSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HICovXTogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCh0cnVlKSxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiIC8qIFNISVBQSU5HX0xJTkUyICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUzXCIgLyogU0hJUFBJTkdfTElORTMgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ2l0eVwiIC8qIFNISVBQSU5HX0NJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiAvKiBTSElQUElOR19TVEFURSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wibGluZTFcIiAvKiBMSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiIC8qIFNISVBQSU5HX0xJTkUxICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcbnokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJDEoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgZXh0cmFjdElzc3Vlc1BlckZpZWxkID0gKGVycm9yKSA9PiB7XG4gIGNvbnN0IGlzc3Vlc1BlckZpZWxkID0ge307XG4gIE9iamVjdC5lbnRyaWVzKGVycm9yKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gRmllbGROYW1lRW51bS5wYXJzZShrZXkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5fZXJyb3JzKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWUuX2Vycm9ycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNzdWVzUGVyRmllbGQ7XG59O1xuXG5jb25zdCB7IGxvZ19fLCBlcnJfXzogZXJyX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb24tY2NcIik7XG5jb25zdCBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYSA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICBwYXltZW50X21ldGhvZFxufSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25hbEZpZWxkcyA9IHt9O1xuICBpZiAocGF5bWVudF9tZXRob2QgPT09IFwiYWNoXCIpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSk7XG4gIH1cbiAgaWYgKHJlcXVpcmVfemlwX2NvZGUpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MpIHtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAoT2JqZWN0LmtleXMoY29uZGl0aW9uYWxGaWVsZHMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHM7XG4gIH1cbiAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcy5leHRlbmQoY29uZGl0aW9uYWxGaWVsZHMpO1xufTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkcyA9IChub25DZGVGb3JtSW5wdXRzLCBvblZhbGlkYXRpb25FcnJvciwgZGVmYXVsdEZpZWxkVmFsdWVzID0ge30pID0+IHtcbiAgaWYgKGRlZmF1bHRGaWVsZFZhbHVlcykge1xuICAgIGxvZ19fKGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0RmllbGRWYWx1ZXMpfWApO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmYXVsdEZpZWxkVmFsdWVzW2tleV07XG4gICAgICBpZiAoIW5vbkNkZUZvcm1JbnB1dHNba2V5XSkge1xuICAgICAgICBub25DZGVGb3JtSW5wdXRzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXTtcbiAgaWYgKG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10pIHtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTJdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTJdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUzXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUzXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNJVFldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1NUQVRFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNUQVRFXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19DT1VOVFJZXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkNPVU5UUlldO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXTtcbiAgfVxuICBjb25zdCB2YWxpZGF0aW9uU2NoZW1hID0gY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGlvblNjaGVtYS5zYWZlUGFyc2Uobm9uQ2RlRm9ybUlucHV0cyk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSByZXN1bHQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgY29uc3QgaXNzdWVLZXlzID0gT2JqZWN0LmtleXMoaXNzdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3VlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gaXNzdWVLZXlzW2ldO1xuICAgICAgY29uc3QgZXJyb3JzID0gaXNzdWVzW2ZpZWxkTmFtZV07XG4gICAgICBvblZhbGlkYXRpb25FcnJvcihmaWVsZE5hbWUsIGVycm9ycywgZmllbGROYW1lKTtcbiAgICB9XG4gICAgZXJyX18kMShcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIGlvKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gc28oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIGNvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGEuX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGZvciAodmFyIHMgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHMpICYmIChhW3NdID0gb1tzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgbG8gPSBmdW5jdGlvbihlKSB7XG4gIGNvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGlvKG8sIGEucHJvdG90eXBlKSwgc28obyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IGsgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiUGxlYXNlIGZpbGwgaW4gdGhpcyBmaWVsZFwiIH0pLCBTID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCB4ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuTElORTEgPSBcImxpbmUxXCIsIGUuTElORTIgPSBcImxpbmUyXCIsIGUuTElORTMgPSBcImxpbmUzXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLlNISVBQSU5HX0xJTkUxID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiLCBlLlNISVBQSU5HX0xJTkUyID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiLCBlLlNISVBQSU5HX0xJTkUzID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiLCBlLlNISVBQSU5HX0NJVFkgPSBcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiwgZS5TSElQUElOR19TVEFURSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiwgZS5TSElQUElOR19DT1VOVFJZID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIsIGUuU0hJUFBJTkdfWklQX0NPREUgPSBcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiwgZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgcXIgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciB6ciA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoenIgfHwge30pO1xuY29uc3QgSHIgPSB6JDEubmF0aXZlRW51bSh6ciksIEJyID0geiQxLnVuaW9uKFtxciwgSHJdKTtcbnZhciBfZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkQgPSBcImNhcmRcIiwgZS5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgZS5DREVfQlJJREdFID0gXCJjZGUtYnJpZGdlXCIsIGUpKShfZSB8fCB7fSk7XG5jb25zdCB1byA9IHokMS5uYXRpdmVFbnVtKF9lKSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHgoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUyxcbiAgZXhwaXJ5OiBTLFxuICBjdmM6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUyxcbiAgY29sb3I6IFMsXG4gIGZvbnRGYW1pbHk6IFMsXG4gIGZvbnRTaXplOiBTLFxuICBmb250V2VpZ2h0OiBTLFxuICBtYXJnaW46IFMsXG4gIHBhZGRpbmc6IFMsXG4gIGxldHRlclNwYWNpbmc6IFMsXG4gIGxpbmVIZWlnaHQ6IFMsXG4gIGhpZGVJY29uOiBTXG59KTtcbmNvbnN0IHNlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIF9vID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIG1vID0geiQxLm9iamVjdCh7IHR5cGU6IF9vIH0pLCBmbyA9IHNlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgeW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogZm8sXG4gIGVsZW1lbnRUeXBlOiBIcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgaG8gPSBzZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaG8sXG4gIG1lc3NhZ2U6IGssXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCB3byA9IHNlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIHZvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHdvLFxuICBlbGVtZW50VHlwZTogQnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBibyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDoga1xufSksIEVvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHNlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBrLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBTLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoU3QpXG59KSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBTbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChzZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIE9lID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBrLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogayxcbiAgbGFzdE5hbWU6IGssXG4gIHByb21vdGlvbkNvZGU6IFMsXG4gIGxpbmUxOiBTLFxuICBsaW5lMjogUyxcbiAgbGluZTM6IFMsXG4gIGNpdHk6IFMsXG4gIHN0YXRlOiBTLFxuICBjb3VudHJ5OiBrLFxuICB6aXBDb2RlOiBTLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogUyxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBTLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBTXG59KSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IGsuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBTLFxuICBsYXN0TmFtZTogUyxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgbGluZTE6IFMsXG4gIGxpbmUyOiBTLFxuICBsaW5lMzogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFMsXG4gIGNvdW50cnk6IGssXG4gIHppcENvZGU6IFMsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBTLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogUyxcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogUyxcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IFMsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IFNcbn0pO1xueiQxLm9iamVjdCh7XG4gIGxpbmUxOiBrLFxuICBjaXR5OiBrLFxuICBzdGF0ZTogayxcbiAgY291bnRyeToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogayxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZToga1xufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IGssXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IGssXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBrLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBrLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBrXG59KTtcbmNvbnN0IGtvID0gc2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZToga28sXG4gIHNlc3Npb25JZDogayxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBTdCxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTLFxuICBwYXltZW50Um91dGVJZDogU1xufSkuZXh0ZW5kKE9lLnNoYXBlKSwgSW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgVG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoc2UuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBSbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgbW8sXG4gIHlvLFxuICBnbyxcbiAgdm8sXG4gIGJvLFxuICBFbyxcbiAgQW8sXG4gIElvLFxuICBUbyxcbiAgUG8sXG4gIFNvXG5dKSwgTm8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogUm8sXG4gIG5vbmNlOiBrLFxuICBmb3JtSWQ6IGssXG4gIGVsZW1lbnRJZDoga1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBrXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgbnQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogeCh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBGbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgTW8gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZvKVxufSksIExvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBNb1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogU3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IE9lLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBTdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB4KHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEYgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShGIHx8IHt9KTtcbmNvbnN0IERvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgeG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBPbyA9IHokMS5vYmplY3Qoe1xuICBiYW5rX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIHJlc291cmNlczogeiQxLm9iamVjdCh7XG4gICAgbG9nb191cmw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHgoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBhdmFpbGFibGVfYmFua3M6IHgoeiQxLmFycmF5KE9vKSlcbn0pLCBVbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgam8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkocG8pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogeChudCksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeCh6JDEuYXJyYXkoWXIpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogeCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiB4KG50KVxufSksICRvID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiAkby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEdvID0geiQxLm9iamVjdCh7XG4gIHNvcnRDb2RlOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogR28ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWbyA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFZvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHFvID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEpyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBQKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogUCh6JDEubnVtYmVyKCkpXG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IFAoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBQKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB6byA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBIbyA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBQKHpvKVxufSksIFZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEJvID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBZbyA9IHokMS5vYmplY3Qoe1xuICBpZDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoQm8pLFxuICB0cmlhbF9zdGFydDogUCh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IFAoeiQxLnN0cmluZygpKVxufSksIFpyID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBKbyA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFpyKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFdvID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogSnJcbn0pLCBabyA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShXbyksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogUCh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEpvKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShacilcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoWW8pLFxuICBpbnZvaWNlczogeiQxLmFycmF5KFpvKSxcbiAgcHJvY2Vzc29yc191c2VkOiBQKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGRyLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IFAoZHIpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoSnIpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogUCh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBIbyxcbiAgc3Vic19wcmV2aWV3OiBQKEtyKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVmUpLFxuICByZXR1cm5fdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogUCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBRciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKHByLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQocHIuc2hhcGUpXG5dKSwgS28gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgUW8gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtRciwgS28sIFFvXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGd0ID0geiQxLm9iamVjdCh7XG4gIGxpbmUxOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogZ3QsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IGd0Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShXciksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBYbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoWG8pO1xuY29uc3QgZWEgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IGd0LFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogZ3Qub3B0aW9uYWwoKVxufSksIHRhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBlbiA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkodGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVmUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChlYS5zaGFwZSkuZXh0ZW5kKHJhLnNoYXBlKTtcbmNvbnN0IHRuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IENvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZlLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogT2UsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogUCh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBlbi5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBuYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IFAobnQpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBQKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IFAoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IFAoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogUCh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogUCh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBQKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG9hID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgYWEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgaWEgPSB6JDEub2JqZWN0KHt9KSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBjYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGxhID0geiQxLmFycmF5KGNhKSwgdWEgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgZGEgPSB6JDEuYXJyYXkodWEpLCBwYSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgJHQgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHBhW3RdID8/IGU7XG59LCBfYSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgbWEgPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyAkdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHskdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBmYSA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgZWUgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChfYShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIGxhLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gbWEodCkgOiBkYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IGZhKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuICR0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHlhID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBoYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBybiA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgZ2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHJuKTtcbn0sIHdhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBybik7XG59LCBIID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIGE7XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgZ2EoKSwgKGEgPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IGEuY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4ub1xuICAgICAgfSksIGdpKCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhvLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChvLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBvLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgby5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBvLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBvLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtvfWApO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHQgPSAhMTtcbiAgICAgIGNvbnN0IHMgPSBlZShvKSwgYyA9IGF3YWl0IFNuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IG8gfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB3YSgpO1xuICAgIH1cbiAgfTtcbn0sIHdlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBJKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBhID0gZWUociksIG8gPSBhd2FpdCBTbih0LmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4obywgYSwgciksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IGEsIGVycm9yQ29kZTogbywgZXJyb3I6IHIgfSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogbywgaXNMb2FkaW5nOiAhMSB9O1xuICB9XG59LCBJID0gKGUpID0+IHtcbiAgY29uc3QgdCA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5uKTtcbiAgfSwgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogdCxcbiAgICBlcnI6IHIsXG4gICAgbG9nX186IHQsXG4gICAgZXJyX186IHJcbiAgfTtcbn07XG52YXIgR3QgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHJldHVybiBHdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24ociwgbikge1xuICAgIGZvciAodmFyIGEgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGEpICYmIChyW2FdID0gblthXSk7XG4gIH0sIEd0KGUsIHQpO1xufTtcbmZ1bmN0aW9uIFBlKGUsIHQpIHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIiAmJiB0ICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgR3QoZSwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IGU7XG4gIH1cbiAgZS5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbn1cbmZ1bmN0aW9uIHZhKGUsIHQsIHIsIG4pIHtcbiAgZnVuY3Rpb24gYShvKSB7XG4gICAgcmV0dXJuIG8gaW5zdGFuY2VvZiByID8gbyA6IG5ldyByKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMobyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAociB8fCAociA9IFByb21pc2UpKShmdW5jdGlvbihvLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBvKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseShlLCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbm4oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChvWzBdICYgMSkgdGhyb3cgb1sxXTtcbiAgICByZXR1cm4gb1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgYSwgbywgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAociA9IDApKSwgcjsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBhICYmIChvID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgobyA9IGEucmV0dXJuKSAmJiBvLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKG8gPSBvLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBvO1xuICAgICAgc3dpdGNoIChhID0gMCwgbyAmJiAodSA9IFt1WzBdICYgMiwgby52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG8gPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHIubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHIubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAobyA9IHIudHJ5cywgIShvID0gby5sZW5ndGggPiAwICYmIG9bby5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghbyB8fCB1WzFdID4gb1swXSAmJiB1WzFdIDwgb1szXSkpIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIHIubGFiZWwgPCBvWzFdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gb1sxXSwgbyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG8gJiYgci5sYWJlbCA8IG9bMl0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzJdLCByLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9bMl0gJiYgci5vcHMucG9wKCksIHIudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSB0LmNhbGwoZSwgcik7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBvID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gVWUoZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHd0KGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufVxuZnVuY3Rpb24gdnQoZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn1cbmZ1bmN0aW9uIERlKGUpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEZSA/ICh0aGlzLnYgPSBlLCB0aGlzKSA6IG5ldyBEZShlKTtcbn1cbmZ1bmN0aW9uIGJhKGUsIHQsIHIpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSByLmFwcGx5KGUsIHQgfHwgW10pLCBhLCBvID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyhtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihtLCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgeSkge1xuICAgIG5bbV0gJiYgKGFbbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYiwgdikge1xuICAgICAgICBvLnB1c2goW20sIGgsIGIsIHZdKSA+IDEgfHwgbChtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGFbbV0gPSB5KGFbbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChtLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoblttXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgXyhvWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIERlID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihkLCBmKSA6IF8ob1swXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZChtKSB7XG4gICAgbChcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZihtKSB7XG4gICAgbChcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSwgeSkge1xuICAgIG0oeSksIG8uc2hpZnQoKSwgby5sZW5ndGggJiYgbChvWzBdWzBdLCBvWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gRWEoZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgdCA9IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCByO1xuICByZXR1cm4gdCA/IHQuY2FsbChlKSA6IChlID0gdHlwZW9mIFVlID09IFwiZnVuY3Rpb25cIiA/IFVlKGUpIDogZVtTeW1ib2wuaXRlcmF0b3JdKCksIHIgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgcltTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcik7XG4gIGZ1bmN0aW9uIG4obykge1xuICAgIHJbb10gPSBlW29dICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSBlW29dKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEobywgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIG8oeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gVihlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBDdChlKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgciA9IGUodCk7XG4gIHJldHVybiByLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSByLCByO1xufVxudmFyIEZ0ID0gQ3QoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IHIgPyByLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyByLm1hcChmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gYnQoZSwgdCkge1xuICBpZiAoZSkge1xuICAgIHZhciByID0gZS5pbmRleE9mKHQpO1xuICAgIDAgPD0gciAmJiBlLnNwbGljZShyLCAxKTtcbiAgfVxufVxudmFyIGx0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCkge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gdCwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIG4sIGEsIG87XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gVWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgdCA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChyID0gYy5yZXR1cm4pICYmIHIuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChWKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG8gPSBoIGluc3RhbmNlb2YgRnQgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IFVlKGYpLCBtID0gXy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBfLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgX3IoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIG8gPSBvID8/IFtdLCBoIGluc3RhbmNlb2YgRnQgPyBvID0gdnQodnQoW10sIHd0KG8pKSwgd3QoaC5lcnJvcnMpKSA6IG8ucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKGEgPSBfLnJldHVybikgJiYgYS5jYWxsKF8pO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvKVxuICAgICAgICB0aHJvdyBuZXcgRnQobyk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgaWYgKHQgJiYgdCAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgX3IodCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBlKSB7XG4gICAgICAgICAgaWYgKHQuY2xvc2VkIHx8IHQuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB0Ll9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAociA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBbXSkucHVzaCh0KTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gciA9PT0gdCB8fCBBcnJheS5pc0FycmF5KHIpICYmIHIuaW5jbHVkZXModCk7XG4gIH0sIGUucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShyKSA/IChyLnB1c2godCksIHIpIDogciA/IFtyLCB0XSA6IHQ7XG4gIH0sIGUucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgciA9PT0gdCA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KHIpICYmIGJ0KHIsIHQpO1xuICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIHIgJiYgYnQociwgdCksIHQgaW5zdGFuY2VvZiBlICYmIHQuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgZS5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMCwgdDtcbiAgfSgpLCBlO1xufSgpLCBvbiA9IGx0LkVNUFRZO1xuZnVuY3Rpb24gYW4oZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIGx0IHx8IGUgJiYgXCJjbG9zZWRcIiBpbiBlICYmIFYoZS5yZW1vdmUpICYmIFYoZS5hZGQpICYmIFYoZS51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBfcihlKSB7XG4gIFYoZSkgPyBlKCkgOiBlLnVuc3Vic2NyaWJlKCk7XG59XG52YXIgc24gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgY24gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCB2dChbZSwgdF0sIHd0KHIpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KShlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGxuKGUpIHtcbiAgY24uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG1yKCkge1xufVxuZnVuY3Rpb24gZnQoZSkge1xuICBlKCk7XG59XG52YXIgWXQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB2YXIgbiA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCByID8gKG4uZGVzdGluYXRpb24gPSByLCBhbihyKSAmJiByLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0ga2EsIG47XG4gIH1cbiAgcmV0dXJuIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIHJldHVybiBuZXcgVnQociwgbiwgYSk7XG4gIH0sIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChyKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKHIpKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgdC5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3Iocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHQ7XG59KGx0KSwgUGEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE10KGUsIHQpIHtcbiAgcmV0dXJuIFBhLmNhbGwoZSwgdCk7XG59XG52YXIgU2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIHIubmV4dCh0KTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgcHQobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICByLmVycm9yKHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBwdChuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBwdCh0KTtcbiAgfSwgZS5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBwdChyKTtcbiAgICAgIH1cbiAgfSwgZTtcbn0oKSwgVnQgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEpIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChWKHIpIHx8ICFyKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogciA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBvICYmIHNuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShyKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gby51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogci5uZXh0ICYmIE10KHIubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiByLmVycm9yICYmIE10KHIuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogci5jb21wbGV0ZSAmJiBNdChyLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gcjtcbiAgICB9XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSBuZXcgU2EocyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KFl0KTtcbmZ1bmN0aW9uIHB0KGUpIHtcbiAgbG4oZSk7XG59XG5mdW5jdGlvbiBDYShlKSB7XG4gIHRocm93IGU7XG59XG52YXIga2EgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IG1yLFxuICBlcnJvcjogQ2EsXG4gIGNvbXBsZXRlOiBtclxufSwgSnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBBYShlKSB7XG4gIHJldHVybiBlO1xufVxuZnVuY3Rpb24gSWEoZSkge1xuICByZXR1cm4gZS5sZW5ndGggPT09IDAgPyBBYSA6IGUubGVuZ3RoID09PSAxID8gZVswXSA6IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24obiwgYSkge1xuICAgICAgcmV0dXJuIGEobik7XG4gICAgfSwgcik7XG4gIH07XG59XG52YXIgZ2UgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdCAmJiAodGhpcy5fc3Vic2NyaWJlID0gdCk7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBvID0gUmEodCkgPyB0IDogbmV3IFZ0KHQsIHIsIG4pO1xuICAgIHJldHVybiBmdChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzID0gYSwgYyA9IHMub3BlcmF0b3IsIGwgPSBzLnNvdXJjZTtcbiAgICAgIG8uYWRkKGMgPyBjLmNhbGwobywgbCkgOiBsID8gYS5fc3Vic2NyaWJlKG8pIDogYS5fdHJ5U3Vic2NyaWJlKG8pKTtcbiAgICB9KSwgbztcbiAgfSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICB0LmVycm9yKHIpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBmcihyKSwgbmV3IHIoZnVuY3Rpb24oYSwgbykge1xuICAgICAgdmFyIHMgPSBuZXcgVnQoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHQoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgbyhsKSwgcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG8sXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKHMpO1xuICAgIH0pO1xuICB9LCBlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByO1xuICAgIHJldHVybiAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KTtcbiAgfSwgZS5wcm90b3R5cGVbSnRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gSWEodCkodGhpcyk7XG4gIH0sIGUucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgcmV0dXJuIHQgPSBmcih0KSwgbmV3IHQoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIG87XG4gICAgICByLnN1YnNjcmliZShmdW5jdGlvbihzKSB7XG4gICAgICAgIHJldHVybiBvID0gcztcbiAgICAgIH0sIGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGEocyk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4obyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgZS5jcmVhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIG5ldyBlKHQpO1xuICB9LCBlO1xufSgpO1xuZnVuY3Rpb24gZnIoZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZSA/PyBzbi5Qcm9taXNlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIFRhKGUpIHtcbiAgcmV0dXJuIGUgJiYgVihlLm5leHQpICYmIFYoZS5lcnJvcikgJiYgVihlLmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIFJhKGUpIHtcbiAgcmV0dXJuIGUgJiYgZSBpbnN0YW5jZW9mIFl0IHx8IFRhKGUpICYmIGFuKGUpO1xufVxuZnVuY3Rpb24gTmEoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmxpZnQpO1xufVxuZnVuY3Rpb24gRmEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGlmIChOYSh0KSlcbiAgICAgIHJldHVybiB0LmxpZnQoZnVuY3Rpb24ocikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlKHIsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gTWEoZSwgdCwgciwgbiwgYSkge1xuICByZXR1cm4gbmV3IExhKGUsIHQsIHIsIG4sIGEpO1xufVxudmFyIExhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuLCBhLCBvLCBzLCBjKSB7XG4gICAgdmFyIGwgPSBlLmNhbGwodGhpcywgcikgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gcywgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gbyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHIuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIHIuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChyID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHQ7XG59KFl0KSwgRGEgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHVuID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB2YXIgciA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICExLCByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCByLm9ic2VydmVycyA9IFtdLCByLmlzU3RvcHBlZCA9ICExLCByLmhhc0Vycm9yID0gITEsIHIudGhyb3duRXJyb3IgPSBudWxsLCByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gbmV3IHlyKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gciwgbjtcbiAgfSwgdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgRGEoKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgbztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBzID0gVWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IHMubmV4dCgpOyAhYy5kb25lOyBjID0gcy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKG8gPSBzLnJldHVybikgJiYgby5jYWxsKHMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIGZ0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gcjtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4ub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgZnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IHIub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAoKHIgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMociksIHRoaXMuX2lubmVyU3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gdGhpcywgbyA9IGEuaGFzRXJyb3IsIHMgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBvIHx8IHMgPyBvbiA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2gociksIG5ldyBsdChmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIGJ0KGMsIHIpO1xuICAgIH0pKTtcbiAgfSwgdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gbi5oYXNFcnJvciwgbyA9IG4udGhyb3duRXJyb3IsIHMgPSBuLmlzU3RvcHBlZDtcbiAgICBhID8gci5lcnJvcihvKSA6IHMgJiYgci5jb21wbGV0ZSgpO1xuICB9LCB0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyBnZSgpO1xuICAgIHJldHVybiByLnNvdXJjZSA9IHRoaXMsIHI7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiBuZXcgeXIociwgbik7XG4gIH0sIHQ7XG59KGdlKSwgeXIgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gciwgYS5zb3VyY2UgPSBuLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIChhID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuO1xuICAgIChuID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuLCBhO1xuICAgIHJldHVybiAoYSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKHIpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogb247XG4gIH0sIHQ7XG59KHVuKSwgeGEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9hID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgcmV0dXJuIGUuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdDtcbn0obHQpLCBociA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICBmb3IgKHZhciByID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgcltuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgdnQoW2UsIHRdLCB3dChyKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFVhID0gZnVuY3Rpb24oZSkge1xuICBQZSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSByLCBhLndvcmsgPSBuLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSByO1xuICAgIHZhciBvID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBvICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIG8sIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBoci5zZXRJbnRlcnZhbChyLmZsdXNoLmJpbmQociwgdGhpcyksIGEpO1xuICB9LCB0LnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgaHIuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgdC5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUociwgbik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgdC5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgdmFyIGEgPSAhMSwgbztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKHIpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgbyA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBvO1xuICB9LCB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiA9IHIuaWQsIGEgPSByLnNjaGVkdWxlciwgbyA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBidChvLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgdDtcbn0oT2EpLCBnciA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBlLm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHQsIHRoaXMubm93ID0gcjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgcmV0dXJuIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHQpLnNjaGVkdWxlKG4sIHIpO1xuICB9LCBlLm5vdyA9IHhhLm5vdywgZTtcbn0oKSwgamEgPSBmdW5jdGlvbihlKSB7XG4gIFBlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBnci5ub3cpO1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKHIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSByLmV4ZWN1dGUoci5zdGF0ZSwgci5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChyID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyByID0gbi5zaGlmdCgpOyApXG4gICAgICAgIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCB0O1xufShnciksICRhID0gbmV3IGphKFVhKSwgR2EgPSBmdW5jdGlvbihlKSB7XG4gIHJldHVybiBlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBWYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudGhlbik7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBWKGVbSnRdKTtcbn1cbmZ1bmN0aW9uIHphKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArIChlICE9PSBudWxsICYmIHR5cGVvZiBlID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIGUgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIEJhKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIFlhID0gQmEoKTtcbmZ1bmN0aW9uIEphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZVtZYV0pO1xufVxuZnVuY3Rpb24gV2EoZSkge1xuICByZXR1cm4gYmEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgbiwgYSwgbztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByID0gZS5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgRGUoci5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gcy5zZW50KCksIGEgPSBuLnZhbHVlLCBvID0gbi5kb25lLCBvID8gWzQsIERlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIERlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiByLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gS2EoZSkge1xuICBpZiAoZSBpbnN0YW5jZW9mIGdlKVxuICAgIHJldHVybiBlO1xuICBpZiAoZSAhPSBudWxsKSB7XG4gICAgaWYgKHFhKGUpKVxuICAgICAgcmV0dXJuIFFhKGUpO1xuICAgIGlmIChHYShlKSlcbiAgICAgIHJldHVybiBYYShlKTtcbiAgICBpZiAoVmEoZSkpXG4gICAgICByZXR1cm4gZWkoZSk7XG4gICAgaWYgKHphKGUpKVxuICAgICAgcmV0dXJuIGRuKGUpO1xuICAgIGlmIChKYShlKSlcbiAgICAgIHJldHVybiB0aShlKTtcbiAgICBpZiAoWmEoZSkpXG4gICAgICByZXR1cm4gcmkoZSk7XG4gIH1cbiAgdGhyb3cgSGEoZSk7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gZVtKdF0oKTtcbiAgICBpZiAoVihyLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gci5zdWJzY3JpYmUodCk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFhhKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlLmxlbmd0aCAmJiAhdC5jbG9zZWQ7IHIrKylcbiAgICAgIHQubmV4dChlW3JdKTtcbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gbmV3IGdlKGZ1bmN0aW9uKHQpIHtcbiAgICBlLnRoZW4oZnVuY3Rpb24ocikge1xuICAgICAgdC5jbG9zZWQgfHwgKHQubmV4dChyKSwgdC5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KS50aGVuKG51bGwsIGxuKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBuZXcgZ2UoZnVuY3Rpb24odCkge1xuICAgIHZhciByLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0gVWUoZSksIG8gPSBhLm5leHQoKTsgIW8uZG9uZTsgbyA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBzID0gby52YWx1ZTtcbiAgICAgICAgaWYgKHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIHIgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8gJiYgIW8uZG9uZSAmJiAobiA9IGEucmV0dXJuKSAmJiBuLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdC5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRuKGUpIHtcbiAgcmV0dXJuIG5ldyBnZShmdW5jdGlvbih0KSB7XG4gICAgbmkoZSwgdCkuY2F0Y2goZnVuY3Rpb24ocikge1xuICAgICAgcmV0dXJuIHQuZXJyb3Iocik7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcmkoZSkge1xuICByZXR1cm4gZG4oV2EoZSkpO1xufVxuZnVuY3Rpb24gbmkoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbztcbiAgcmV0dXJuIHZhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbm4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgciA9IEVhKGUpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgci5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSBuLnZhbHVlLCB0Lm5leHQocyksIHQuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChvID0gci5yZXR1cm4pID8gWzQsIG8uY2FsbChyKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdC5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb2koZSwgdCwgciwgbiwgYSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgbyA9IHQuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgcigpLCBhID8gZS5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAoZS5hZGQobyksICFhKVxuICAgIHJldHVybiBvO1xufVxuZnVuY3Rpb24gYWkoZSwgdCkge1xuICB2YXIgciA9IFYoZSkgPyBlIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG4gPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IocigpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBnZShuKTtcbn1cbnZhciBpaSA9IEN0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHNpKGUsIHQpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIGUuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgbyA9IHMsIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IHIobykgOiBuKG5ldyBpaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaShlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZSk7XG59XG52YXIgbGkgPSBDdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gbnVsbCksIGUodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gcjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdWkoZSwgdCkge1xuICB2YXIgciA9IGNpKGUpID8geyBmaXJzdDogZSB9IDogdHlwZW9mIGUgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogZSB9IDogZSwgbiA9IHIuZmlyc3QsIGEgPSByLmVhY2gsIG8gPSByLndpdGgsIHMgPSBvID09PSB2b2lkIDAgPyBkaSA6IG8sIGMgPSByLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/ICRhIDogYywgdSA9IHIubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBGYShmdW5jdGlvbihmLCBfKSB7XG4gICAgdmFyIG0sIHksIGggPSBudWxsLCBiID0gMCwgdiA9IGZ1bmN0aW9uKHcpIHtcbiAgICAgIHkgPSBvaShfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIEthKHMoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IGJcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgXy5lcnJvcihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgdyk7XG4gICAgfTtcbiAgICBtID0gZi5zdWJzY3JpYmUoTWEoXywgZnVuY3Rpb24odykge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgYisrLCBfLm5leHQoaCA9IHcpLCBhID4gMCAmJiB2KGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICFiICYmIHYobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaShlKSB7XG4gIHRocm93IG5ldyBsaShlKTtcbn1cbmNsYXNzIGV0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogdCB9LCB0aGlzLl9zdWJqZWN0Lm5leHQodCksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHQsIHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiB0LCBlcnJNc2c6IHIgfSwgdGhpcy5fc3ViamVjdC5lcnJvcih0KTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHQpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiB0LCB0aGlzLnN1YnNjcmliZSA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHIgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpLCByLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIGt0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgZmlyc3Q6IHQudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gYWkoKCkgPT4gbmV3IEVycm9yKHQudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHNpKHRoaXMuX3N1YmplY3QucGlwZSh1aShyKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyB1bigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB3ciA9IHokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pLCBwaSA9IHtcbiAgcHJvZDogXCJodHRwczovL2Nvbm50by5nZXRvcGVucGF5LmNvbVwiLFxuICBzdGc6IFwiaHR0cHM6Ly9jb25udG8ub3BlbnBheXN0YWdpbmcuY29tXCIsXG4gIGRldjogXCJodHRwOi8vbG9jYWxob3N0OjgwMDBcIlxufSwgX2kgPSAoZSkgPT4gcGlbZV0sIEx0ID0ge30sIHBuID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKEx0W2VdKVxuICAgIHJldHVybiBMdFtlXTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gYXdhaXQgZmV0Y2gobmV3IFVSTChcIi9oZWFsdGgvZW52aXJvbm1lbnRcIiwgZSkpLnRoZW4oKG4pID0+IG4uanNvbigpKSwgciA9IHdyLnBhcnNlKHQuZW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBMdFtlXSA9IHIsIHI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB3ci5WYWx1ZXMucHJvZDtcbiAgfVxufTtcbmZ1bmN0aW9uIGt0KGUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHtlfWApO1xufVxuY29uc3QgQXQgPSAoZSwgdCkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW3JdKSA9PiAhdC5pbmNsdWRlcyhyKSkpLCAkID0gKCkgPT4ge1xuICBpZiAoISh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpKVxuICAgIHJldHVybiB3aW5kb3c7XG59LCBxdCA9IG5ldyBldCgpLCB2ciA9IFwib3BfbWV0cmljc19xdWV1ZVwiLCBtaSA9IDMsIGZpID0gMywgeWkgPSAxZTMsIHsgbG9nX186IF90IH0gPSBJKFwib3AtbWV0cmljc1wiKTtcbmNsYXNzIGhpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMCwgdGhpcy5vZmZsaW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBfdChcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9LCB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgX3QoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIuYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudCh0LCByLCBuKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIGV2ZW50TmFtZTogdCxcbiAgICAgIHByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogbiB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBhLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKGEpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSAociA9ICh0ID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogdC5sb2NhbFN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiByLmdldEl0ZW0odnIpO1xuICAgICAgbiAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UobikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgdmFyIHQ7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh2ciwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHQgPSAkKCk7XG4gICAgdCAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0ICYmICh0aGlzLmJhdGNoVGltZW91dCA9IHQuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgeWkpKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdmFyIHQ7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKCh0ID0gJCgpKSA9PSBudWxsIHx8IHQuY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsKSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDAgfHwgKHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITAsIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0pKTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdCA9IHF0LmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCF0KSB7XG4gICAgICBfdChcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBmaSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIGV2ZW50czogci5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgZXZlbnRfbmFtZTogYy5ldmVudE5hbWUsXG4gICAgICAgICAgZGV2aWNlX3Rva2VuOiB0LmRldmljZVRva2VuLFxuICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgIC4uLmMuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5vbmNlOiBjLm5vbmNlLFxuICAgICAgICAgICAgZGF0ZXRpbWU6IGMuZGF0ZXRpbWUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGMudGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGMudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgLi4uYy5wcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgIH0sIGEgPSBfaSh0LmVudmlyb25tZW50KSwgbyA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBhKTtcbiAgICAgIChhd2FpdCBmZXRjaChvLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG4pXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uoci5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgX3QoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIG4pLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaCh0KSB7XG4gICAgdC5mb3JFYWNoKChuKSA9PiB7XG4gICAgICBuLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHIgPSB0LmZpbHRlcigobikgPT4gbi5hdHRlbXB0Q291bnQgPCBtaSk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnIsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksIChyID0gJCgpKSA9PSBudWxsIHx8IHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgV3QgPSBuZXcgaGkoKSwgZyA9IChlLCB0LCByKSA9PiB7XG4gIFd0LmFkZEV2ZW50KGUsIHQsIHIpO1xufSwgZ2kgPSAoKSA9PiB7XG4gIFd0LnByb2Nlc3NRdWV1ZSgpO1xufSwgX24gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZWUoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIG1uID0gKGUpID0+IHtcbiAgdmFyIHIsIG47XG4gIGNvbnN0IHQgPSBlZShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCB3aSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG1uKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIF9uKTtcbn0sIHZpID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSAkKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbW4pLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgX24pO1xufTtcbnZhciBHcjtcbihHciA9ICQoKSkgPT0gbnVsbCB8fCBHci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3QucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IGJpID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgRWkgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgUGkgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBJdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICBicigpIHx8IGF3YWl0IFR0KDUwMCk7XG4gIGlmICghYnIoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBTaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBJdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIENpID0gYXN5bmMgKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgY29uc3QgbyA9IGF3YWl0IEl0KGUpLCBzID0gUGlbci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBvLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgVHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCBiciA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBraSA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBBaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IEl0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIElpID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIGEsIG8sIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgSXQoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChhID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygobyA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufTtcbnZhciBUaSA9IHR5cGVvZiBnbG9iYWxUaGlzID09IFwib2JqZWN0XCIgPyBnbG9iYWxUaGlzIDogdHlwZW9mIHNlbGYgPT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ID09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB7fSwgVGUgPSBcIjEuOS4wXCIsIEVyID0gL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO1xuZnVuY3Rpb24gUmkoZSkge1xuICB2YXIgdCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFtlXSksIHIgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCBuID0gZS5tYXRjaChFcik7XG4gIGlmICghbilcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfTtcbiAgdmFyIGEgPSB7XG4gICAgbWFqb3I6ICtuWzFdLFxuICAgIG1pbm9yOiArblsyXSxcbiAgICBwYXRjaDogK25bM10sXG4gICAgcHJlcmVsZWFzZTogbls0XVxuICB9O1xuICBpZiAoYS5wcmVyZWxlYXNlICE9IG51bGwpXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHJldHVybiBsID09PSBlO1xuICAgIH07XG4gIGZ1bmN0aW9uIG8oYykge1xuICAgIHJldHVybiByLmFkZChjKSwgITE7XG4gIH1cbiAgZnVuY3Rpb24gcyhjKSB7XG4gICAgcmV0dXJuIHQuYWRkKGMpLCAhMDtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgIGlmICh0LmhhcyhsKSlcbiAgICAgIHJldHVybiAhMDtcbiAgICBpZiAoci5oYXMobCkpXG4gICAgICByZXR1cm4gITE7XG4gICAgdmFyIHUgPSBsLm1hdGNoKEVyKTtcbiAgICBpZiAoIXUpXG4gICAgICByZXR1cm4gbyhsKTtcbiAgICB2YXIgZCA9IHtcbiAgICAgIG1ham9yOiArdVsxXSxcbiAgICAgIG1pbm9yOiArdVsyXSxcbiAgICAgIHBhdGNoOiArdVszXSxcbiAgICAgIHByZXJlbGVhc2U6IHVbNF1cbiAgICB9O1xuICAgIHJldHVybiBkLnByZXJlbGVhc2UgIT0gbnVsbCB8fCBhLm1ham9yICE9PSBkLm1ham9yID8gbyhsKSA6IGEubWFqb3IgPT09IDAgPyBhLm1pbm9yID09PSBkLm1pbm9yICYmIGEucGF0Y2ggPD0gZC5wYXRjaCA/IHMobCkgOiBvKGwpIDogYS5taW5vciA8PSBkLm1pbm9yID8gcyhsKSA6IG8obCk7XG4gIH07XG59XG52YXIgTmkgPSBSaShUZSksIEZpID0gVGUuc3BsaXQoXCIuXCIpWzBdLCBvdCA9IFN5bWJvbC5mb3IoXCJvcGVudGVsZW1ldHJ5LmpzLmFwaS5cIiArIEZpKSwgYXQgPSBUaTtcbmZ1bmN0aW9uIFp0KGUsIHQsIHIsIG4pIHtcbiAgdmFyIGE7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9ICExKTtcbiAgdmFyIG8gPSBhdFtvdF0gPSAoYSA9IGF0W290XSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHtcbiAgICB2ZXJzaW9uOiBUZVxuICB9O1xuICBpZiAoIW4gJiYgb1tlXSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBBdHRlbXB0ZWQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBvZiBBUEk6IFwiICsgZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICBpZiAoby52ZXJzaW9uICE9PSBUZSkge1xuICAgIHZhciBzID0gbmV3IEVycm9yKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RyYXRpb24gb2YgdmVyc2lvbiB2XCIgKyBvLnZlcnNpb24gKyBcIiBmb3IgXCIgKyBlICsgXCIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2XCIgKyBUZSk7XG4gICAgcmV0dXJuIHIuZXJyb3Iocy5zdGFjayB8fCBzLm1lc3NhZ2UpLCAhMTtcbiAgfVxuICByZXR1cm4gb1tlXSA9IHQsIHIuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdGVyZWQgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIFRlICsgXCIuXCIpLCAhMDtcbn1cbmZ1bmN0aW9uIGl0KGUpIHtcbiAgdmFyIHQsIHIsIG4gPSAodCA9IGF0W290XSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC52ZXJzaW9uO1xuICBpZiAoISghbiB8fCAhTmkobikpKVxuICAgIHJldHVybiAociA9IGF0W290XSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcltlXTtcbn1cbmZ1bmN0aW9uIEt0KGUsIHQpIHtcbiAgdC5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogVW5yZWdpc3RlcmluZyBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgVGUgKyBcIi5cIik7XG4gIHZhciByID0gYXRbb3RdO1xuICByICYmIGRlbGV0ZSByW2VdO1xufVxudmFyIE1pID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBMaSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBEaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHQubmFtZXNwYWNlIHx8IFwiRGlhZ0NvbXBvbmVudExvZ2dlclwiO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJkZWJ1Z1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiZXJyb3JcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5pbmZvID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFllKFwiaW5mb1wiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLndhcm4gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWWUoXCJ3YXJuXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUudmVyYm9zZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBZZShcInZlcmJvc2VcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiBZZShlLCB0LCByKSB7XG4gIHZhciBuID0gaXQoXCJkaWFnXCIpO1xuICBpZiAobilcbiAgICByZXR1cm4gci51bnNoaWZ0KHQpLCBuW2VdLmFwcGx5KG4sIExpKFtdLCBNaShyKSwgITEpKTtcbn1cbnZhciBYO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuRVJST1IgPSAzMF0gPSBcIkVSUk9SXCIsIGVbZS5XQVJOID0gNTBdID0gXCJXQVJOXCIsIGVbZS5JTkZPID0gNjBdID0gXCJJTkZPXCIsIGVbZS5ERUJVRyA9IDcwXSA9IFwiREVCVUdcIiwgZVtlLlZFUkJPU0UgPSA4MF0gPSBcIlZFUkJPU0VcIiwgZVtlLkFMTCA9IDk5OTldID0gXCJBTExcIjtcbn0pKFggfHwgKFggPSB7fSkpO1xuZnVuY3Rpb24geGkoZSwgdCkge1xuICBlIDwgWC5OT05FID8gZSA9IFguTk9ORSA6IGUgPiBYLkFMTCAmJiAoZSA9IFguQUxMKSwgdCA9IHQgfHwge307XG4gIGZ1bmN0aW9uIHIobiwgYSkge1xuICAgIHZhciBvID0gdFtuXTtcbiAgICByZXR1cm4gdHlwZW9mIG8gPT0gXCJmdW5jdGlvblwiICYmIGUgPj0gYSA/IG8uYmluZCh0KSA6IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogcihcImVycm9yXCIsIFguRVJST1IpLFxuICAgIHdhcm46IHIoXCJ3YXJuXCIsIFguV0FSTiksXG4gICAgaW5mbzogcihcImluZm9cIiwgWC5JTkZPKSxcbiAgICBkZWJ1ZzogcihcImRlYnVnXCIsIFguREVCVUcpLFxuICAgIHZlcmJvc2U6IHIoXCJ2ZXJib3NlXCIsIFguVkVSQk9TRSlcbiAgfTtcbn1cbnZhciBPaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgVWkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgamkgPSBcImRpYWdcIiwgRXQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIGZ1bmN0aW9uIHQoYSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZm9yICh2YXIgbyA9IFtdLCBzID0gMDsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgICAgIG9bc10gPSBhcmd1bWVudHNbc107XG4gICAgICAgICAgdmFyIGMgPSBpdChcImRpYWdcIik7XG4gICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICByZXR1cm4gY1thXS5hcHBseShjLCBVaShbXSwgT2kobyksICExKSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgciA9IHRoaXMsIG4gPSBmdW5jdGlvbihhLCBvKSB7XG4gICAgICAgIHZhciBzLCBjLCBsO1xuICAgICAgICBpZiAobyA9PT0gdm9pZCAwICYmIChvID0geyBsb2dMZXZlbDogWC5JTkZPIH0pLCBhID09PSByKSB7XG4gICAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGRpYWcgYXMgdGhlIGxvZ2dlciBmb3IgaXRzZWxmLiBQbGVhc2UgdXNlIGEgRGlhZ0xvZ2dlciBpbXBsZW1lbnRhdGlvbiBsaWtlIENvbnNvbGVEaWFnTG9nZ2VyIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiByLmVycm9yKChzID0gdS5zdGFjaykgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHUubWVzc2FnZSksICExO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVvZiBvID09IFwibnVtYmVyXCIgJiYgKG8gPSB7XG4gICAgICAgICAgbG9nTGV2ZWw6IG9cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkID0gaXQoXCJkaWFnXCIpLCBmID0geGkoKGMgPSBvLmxvZ0xldmVsKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogWC5JTkZPLCBhKTtcbiAgICAgICAgaWYgKGQgJiYgIW8uc3VwcHJlc3NPdmVycmlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICB2YXIgXyA9IChsID0gbmV3IEVycm9yKCkuc3RhY2spICE9PSBudWxsICYmIGwgIT09IHZvaWQgMCA/IGwgOiBcIjxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT5cIjtcbiAgICAgICAgICBkLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIGJlIG92ZXJ3cml0dGVuIGZyb20gXCIgKyBfKSwgZi53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBvdmVyd3JpdGUgb25lIGFscmVhZHkgcmVnaXN0ZXJlZCBmcm9tIFwiICsgXyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFp0KFwiZGlhZ1wiLCBmLCByLCAhMCk7XG4gICAgICB9O1xuICAgICAgci5zZXRMb2dnZXIgPSBuLCByLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgS3QoamksIHIpO1xuICAgICAgfSwgci5jcmVhdGVDb21wb25lbnRMb2dnZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGkoYSk7XG4gICAgICB9LCByLnZlcmJvc2UgPSB0KFwidmVyYm9zZVwiKSwgci5kZWJ1ZyA9IHQoXCJkZWJ1Z1wiKSwgci5pbmZvID0gdChcImluZm9cIiksIHIud2FybiA9IHQoXCJ3YXJuXCIpLCByLmVycm9yID0gdChcImVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZS5pbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiAkaShlKSB7XG4gIHJldHVybiBTeW1ib2wuZm9yKGUpO1xufVxudmFyIEdpID0gKFxuICAvKiogQGNsYXNzICovXG4gIC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIHIuX2N1cnJlbnRDb250ZXh0ID0gdCA/IG5ldyBNYXAodCkgOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCByLmdldFZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gci5fY3VycmVudENvbnRleHQuZ2V0KG4pO1xuICAgICAgfSwgci5zZXRWYWx1ZSA9IGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgICAgdmFyIG8gPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBvLl9jdXJyZW50Q29udGV4dC5zZXQobiwgYSksIG87XG4gICAgICB9LCByLmRlbGV0ZVZhbHVlID0gZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgYSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGEuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShuKSwgYTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9KClcbiksIFZpID0gbmV3IEdpKCksIHFpID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCB6aSA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBIaSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gVmk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIGEgPSBbXSwgbyA9IDM7IG8gPCBhcmd1bWVudHMubGVuZ3RoOyBvKyspXG4gICAgICAgIGFbbyAtIDNdID0gYXJndW1lbnRzW29dO1xuICAgICAgcmV0dXJuIHIuY2FsbC5hcHBseShyLCB6aShbbl0sIHFpKGEpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgQmkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIFlpID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIER0ID0gXCJjb250ZXh0XCIsIEppID0gbmV3IEhpKCksIFF0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIFp0KER0LCB0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmFjdGl2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhLCBvID0gW10sIHMgPSAzOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICBvW3MgLSAzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkpLndpdGguYXBwbHkoYSwgWWkoW3QsIHIsIG5dLCBCaShvKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYmluZCh0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0Q29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdChEdCkgfHwgSmk7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5kaXNhYmxlKCksIEt0KER0LCBFdC5pbnN0YW5jZSgpKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHp0O1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLk5PTkUgPSAwXSA9IFwiTk9ORVwiLCBlW2UuU0FNUExFRCA9IDFdID0gXCJTQU1QTEVEXCI7XG59KSh6dCB8fCAoenQgPSB7fSkpO1xudmFyIGZuID0gXCIwMDAwMDAwMDAwMDAwMDAwXCIsIHluID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLCBXaSA9IHtcbiAgdHJhY2VJZDogeW4sXG4gIHNwYW5JZDogZm4sXG4gIHRyYWNlRmxhZ3M6IHp0Lk5PTkVcbn0sIHR0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gV2kpLCB0aGlzLl9zcGFuQ29udGV4dCA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmsgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldFN0YXR1cyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZU5hbWUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbih0KSB7XG4gICAgfSwgZS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZWNvcmRFeGNlcHRpb24gPSBmdW5jdGlvbih0LCByKSB7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBYdCA9ICRpKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO1xuZnVuY3Rpb24gZXIoZSkge1xuICByZXR1cm4gZS5nZXRWYWx1ZShYdCkgfHwgdm9pZCAwO1xufVxuZnVuY3Rpb24gWmkoKSB7XG4gIHJldHVybiBlcihRdC5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbmZ1bmN0aW9uIHRyKGUsIHQpIHtcbiAgcmV0dXJuIGUuc2V0VmFsdWUoWHQsIHQpO1xufVxuZnVuY3Rpb24gS2koZSkge1xuICByZXR1cm4gZS5kZWxldGVWYWx1ZShYdCk7XG59XG5mdW5jdGlvbiBRaShlLCB0KSB7XG4gIHJldHVybiB0cihlLCBuZXcgdHQodCkpO1xufVxuZnVuY3Rpb24gaG4oZSkge1xuICB2YXIgdDtcbiAgcmV0dXJuICh0ID0gZXIoZSkpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3BhbkNvbnRleHQoKTtcbn1cbnZhciBYaSA9IC9eKFswLTlhLWZdezMyfSkkL2ksIGVzID0gL15bMC05YS1mXXsxNn0kL2k7XG5mdW5jdGlvbiB0cyhlKSB7XG4gIHJldHVybiBYaS50ZXN0KGUpICYmIGUgIT09IHluO1xufVxuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gZXMudGVzdChlKSAmJiBlICE9PSBmbjtcbn1cbmZ1bmN0aW9uIGduKGUpIHtcbiAgcmV0dXJuIHRzKGUudHJhY2VJZCkgJiYgcnMoZS5zcGFuSWQpO1xufVxuZnVuY3Rpb24gbnMoZSkge1xuICByZXR1cm4gbmV3IHR0KGUpO1xufVxudmFyIHh0ID0gUXQuZ2V0SW5zdGFuY2UoKSwgd24gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IHh0LmFjdGl2ZSgpKTtcbiAgICAgIHZhciBhID0gISEociAhPSBudWxsICYmIHIucm9vdCk7XG4gICAgICBpZiAoYSlcbiAgICAgICAgcmV0dXJuIG5ldyB0dCgpO1xuICAgICAgdmFyIG8gPSBuICYmIGhuKG4pO1xuICAgICAgcmV0dXJuIG9zKG8pICYmIGduKG8pID8gbmV3IHR0KG8pIDogbmV3IHR0KCk7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8sIHMsIGM7XG4gICAgICBpZiAoIShhcmd1bWVudHMubGVuZ3RoIDwgMikpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiA/IGMgPSByIDogYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IChvID0gciwgYyA9IG4pIDogKG8gPSByLCBzID0gbiwgYyA9IGEpO1xuICAgICAgICB2YXIgbCA9IHMgPz8geHQuYWN0aXZlKCksIHUgPSB0aGlzLnN0YXJ0U3Bhbih0LCBvLCBsKSwgZCA9IHRyKGwsIHUpO1xuICAgICAgICByZXR1cm4geHQud2l0aChkLCBjLCB2b2lkIDAsIHUpO1xuICAgICAgfVxuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIG9zKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGUuc3BhbklkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VJZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlRmxhZ3MgPT0gXCJudW1iZXJcIjtcbn1cbnZhciBhcyA9IG5ldyB3bigpLCBpcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIsIG4sIGEpIHtcbiAgICAgIHRoaXMuX3Byb3ZpZGVyID0gdCwgdGhpcy5uYW1lID0gciwgdGhpcy52ZXJzaW9uID0gbiwgdGhpcy5vcHRpb25zID0gYTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4odCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuc3RhcnRBY3RpdmVTcGFuID0gZnVuY3Rpb24odCwgciwgbiwgYSkge1xuICAgICAgdmFyIG8gPSB0aGlzLl9nZXRUcmFjZXIoKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KG8uc3RhcnRBY3RpdmVTcGFuLCBvLCBhcmd1bWVudHMpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRUcmFjZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICAgICAgdmFyIHQgPSB0aGlzLl9wcm92aWRlci5nZXREZWxlZ2F0ZVRyYWNlcih0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwgdGhpcy5vcHRpb25zKTtcbiAgICAgIHJldHVybiB0ID8gKHRoaXMuX2RlbGVnYXRlID0gdCwgdGhpcy5fZGVsZWdhdGUpIDogYXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzcyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIG5ldyB3bigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgY3MgPSBuZXcgc3MoKSwgUHIgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5nZXREZWxlZ2F0ZVRyYWNlcih0LCByLCBuKSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG5ldyBpcyh0aGlzLCB0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQ7XG4gICAgICByZXR1cm4gKHQgPSB0aGlzLl9kZWxlZ2F0ZSkgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IGNzO1xuICAgIH0sIGUucHJvdG90eXBlLnNldERlbGVnYXRlID0gZnVuY3Rpb24odCkge1xuICAgICAgdGhpcy5fZGVsZWdhdGUgPSB0O1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlVHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIGE7XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9kZWxlZ2F0ZSkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogYS5nZXRUcmFjZXIodCwgciwgbik7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBzdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5JTlRFUk5BTCA9IDBdID0gXCJJTlRFUk5BTFwiLCBlW2UuU0VSVkVSID0gMV0gPSBcIlNFUlZFUlwiLCBlW2UuQ0xJRU5UID0gMl0gPSBcIkNMSUVOVFwiLCBlW2UuUFJPRFVDRVIgPSAzXSA9IFwiUFJPRFVDRVJcIiwgZVtlLkNPTlNVTUVSID0gNF0gPSBcIkNPTlNVTUVSXCI7XG59KShzdCB8fCAoc3QgPSB7fSkpO1xudmFyIEVlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLlVOU0VUID0gMF0gPSBcIlVOU0VUXCIsIGVbZS5PSyA9IDFdID0gXCJPS1wiLCBlW2UuRVJST1IgPSAyXSA9IFwiRVJST1JcIjtcbn0pKEVlIHx8IChFZSA9IHt9KSk7XG52YXIgeGUgPSBRdC5nZXRJbnN0YW5jZSgpLCBPdCA9IFwidHJhY2VcIiwgbHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgUHIoKSwgdGhpcy53cmFwU3BhbkNvbnRleHQgPSBucywgdGhpcy5pc1NwYW5Db250ZXh0VmFsaWQgPSBnbiwgdGhpcy5kZWxldGVTcGFuID0gS2ksIHRoaXMuZ2V0U3BhbiA9IGVyLCB0aGlzLmdldEFjdGl2ZVNwYW4gPSBaaSwgdGhpcy5nZXRTcGFuQ29udGV4dCA9IGhuLCB0aGlzLnNldFNwYW4gPSB0ciwgdGhpcy5zZXRTcGFuQ29udGV4dCA9IFFpO1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gWnQoT3QsIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIsIEV0Lmluc3RhbmNlKCkpO1xuICAgICAgcmV0dXJuIHIgJiYgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlci5zZXREZWxlZ2F0ZSh0KSwgcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXJQcm92aWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGl0KE90KSB8fCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIEt0KE90LCBFdC5pbnN0YW5jZSgpKSwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBQcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgamUgPSBscy5nZXRJbnN0YW5jZSgpO1xuY29uc3QgdXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgYSA9IHhlLmFjdGl2ZSgpLCBvID0gbi5zdGFydFNwYW4oXG4gICAgYGNkZS4ke3QudHlwZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJtZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICAuLi5lLnRyYWNpbmdDb250ZXh0ICYmIHtcbiAgICAgICAgICBcIm9qcy5jaGVja291dFNlY3VyZVRva2VuXCI6IGUudHJhY2luZ0NvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLnRyYWNpbmdDb250ZXh0LmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQudmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS50cmFjaW5nQ29udGV4dC5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLnRyYWNpbmdDb250ZXh0LmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogZS50cmFjaW5nQ29udGV4dC5yZWZlcnJlclxuICAgICAgICB9LFxuICAgICAgICBcImNkZS5tZXNzYWdlLnR5cGVcIjogdC50eXBlLFxuICAgICAgICBcImNkZS5tZXNzYWdlLnBheWxvYWRcIjogSlNPTi5zdHJpbmdpZnkodC5wYXlsb2FkKVxuICAgICAgfVxuICAgIH0sXG4gICAgYVxuICApO1xuICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKGEsIG8pLCBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCByKCk7XG4gICAgICByZXR1cm4gby5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgcztcbiAgICB9IGNhdGNoIChzKSB7XG4gICAgICB0aHJvdyBvLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IEVlLkVSUk9SLFxuICAgICAgICBtZXNzYWdlOiBzIGluc3RhbmNlb2YgRXJyb3IgPyBzLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIlxuICAgICAgfSksIHM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG8uZW5kKCk7XG4gICAgfVxuICB9KTtcbn0sIG10ID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG4gPSB4ZS5hY3RpdmUoKSwgYSA9IHIuc3RhcnRTcGFuKFxuICAgIGBmb3JtLiR7ZS5zcGFuTmFtZX1gLFxuICAgIHtcbiAgICAgIGtpbmQ6IHN0LkNMSUVOVCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IGUuZGV2aWNlVG9rZW4sXG4gICAgICAgIFwib2pzLmZvcm1JZFwiOiBlLmZvcm1JZCxcbiAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnZlcnNpb24sXG4gICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiBlLnJlbGVhc2VWZXJzaW9uLFxuICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiBlLmJhc2VVcmwsXG4gICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUucmVmZXJyZXIsXG4gICAgICAgIC4uLmUucGF5bWVudFJvdXRlSWQgJiYgeyBcInBheW1lbnQucm91dGVfaWRcIjogZS5wYXltZW50Um91dGVJZCB9XG4gICAgICB9XG4gICAgfSxcbiAgICBuXG4gICk7XG4gIHRyeSB7XG4gICAgY29uc3QgbyA9IGF3YWl0IHQoKTtcbiAgICByZXR1cm4gYS5zZXRTdGF0dXMoeyBjb2RlOiBFZS5PSyB9KSwgbztcbiAgfSBjYXRjaCAobykge1xuICAgIGNvbnN0IHMgPSBvIGluc3RhbmNlb2YgRXJyb3IgPyBvLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBhLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBFZS5FUlJPUixcbiAgICAgIG1lc3NhZ2U6IHNcbiAgICB9KSwgbztcbiAgfSBmaW5hbGx5IHtcbiAgICBhLmVuZCgpO1xuICB9XG59O1xuY2xhc3Mgdm4gZXh0ZW5kcyBsbyB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICBjb25zdCByID0gYCR7dC5tZXNzYWdlfWA7XG4gICAgc3VwZXIociksIHRoaXMucmVzcG9uc2UgPSB0O1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBCID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHVzKGUsIHQsIGFzeW5jICgpID0+IHtcbiAgbiAmJiBnKG4sIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCBhID0gYXdhaXQgZS5zZW5kKHQpO1xuICBpZiAocHMoYSkpXG4gICAgdGhyb3cgZyhcImNkZV9yZXNwb25zZV9lcnJvclwiLCB7XG4gICAgICAuLi5hXG4gICAgfSksIG5ldyB2bihhKTtcbiAgaWYgKCFkcyhhLCByKSkge1xuICAgIGNvbnN0IG8gPSByLnNhZmVQYXJzZShhKTtcbiAgICB0aHJvdyBvLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIHIsIFwiQWN0dWFsOlwiLCBhKSwgby5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG4gJiYgZyhuLCB7XG4gICAgLi4uYVxuICB9KSwgYTtcbn0pLCBkcyA9IChlLCB0KSA9PiB0LnNhZmVQYXJzZShlKS5zdWNjZXNzLCBwcyA9IChlKSA9PiBxby5zYWZlUGFyc2UoZSkuc3VjY2VzcywgX3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogdCB9LCBLciksIE0gPSBhc3luYyAoZSkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgUXIpLCBuZSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgdG4sXG4gIFwic3RhcnRfcGF5bWVudF9mbG93XCJcbiksIGJuID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IEIoXG4gIGUsXG4gIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IHQgfSxcbiAgbmEsXG4gIFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiXG4pLCBtcyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCByID0gYXdhaXQgQihlLCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiB0IH0sIHRuKTtcbiAgcmV0dXJuIGcoXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByX3Jlc3VsdFwiLCB7XG4gICAgLi4uclxuICB9KSwgcjtcbn0sIEwgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgam8sXG4gIFwiY29uZmlybV9wYXltZW50X2Zsb3dcIlxuKSwgZnMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSxcbiAgWHIsXG4gIFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIlxuKSwgeXMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiB0IH0sXG4gIFVvLFxuICBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiXG4pLCBocyA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBfcyhlLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LFxuICAgIHByb21vdGlvbl9jb2RlOiByXG4gIH0pLCBhID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBvID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IGhhKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IG8sXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgdmUgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBpZiAocilcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwLCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwicHJvbW9Db2RlXCIpICYmICFuICYmIChuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSk7XG4gICAgY29uc3QgYSA9IGF3YWl0IGhzKGUsIHQsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgRW4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoZS5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oZS52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEIobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogdCB9LCBMbylcbiAgICApXG4gICk7XG59LCBTciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiB0IH0sXG4gIG50LFxuICBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIlxuKSwgZ3MgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogdCB9LCBYciwgXCJzZXR1cF9jaGVja291dFwiKSwgcnIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihlLCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogdCB9LCBudCwgXCJwZXJmb3JtX2NoZWNrb3V0XCIpLCBQbiA9IDFlMywgd3MgPSBhc3luYyAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zb2xlLmxvZyh0KTtcbiAgY29uc3QgbyA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IFBuLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBzID0gYXdhaXQgQihvLCB7IHR5cGU6IHIgfSwgbik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgUnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgQihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgYWEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgU24gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgQihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBvYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBlZShyKSksIFwiUEFZTUVOVF9GQUlMRURfR0VORVJJQ1wiO1xuICB9XG59LCB2cyA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBCKFxuICBlLFxuICB7IHR5cGU6IFwic2V0X3VzZXJfZGV2aWNlX3Rva2VuXCIsIHBheWxvYWQ6IHsgZGV2aWNlX3Rva2VuOiB0IH0gfSxcbiAgaWFcbiksIGJzID0gYXN5bmMgKGUpID0+IHtcbiAgaWYgKHR5cGVvZiBlICE9IFwib2JqZWN0XCIgfHwgIWUpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0geyB0eXBlOiBcInBpbmdcIiB9LCByID0gYXdhaXQgZS5zZW5kKHQpO1xuICAgIGlmIChyICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAodCkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgdCksICExO1xuICB9XG59LCBFcyA9IChlLCB0KSA9PiAhIWUgJiYgdCwgQ24gPSBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIGtuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCBydCA9IDMyLCBQcyA9IDE2LCBBbiA9IDEwLCBDciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciBSZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKFJlIHx8IChSZSA9IHt9KSk7XG5jbGFzcyBaZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBTcyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiBydCk7XG4gIHJldHVybiB0ID09PSBydCAmJiAodCA9IHJ0IC0gMSksIGtuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIENzKGUpIHtcbiAgY29uc3QgdCA9IGtzKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgWmUoUmUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24ga3MoKSB7XG4gIHJldHVybiBUcygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIEFzKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gU3ModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIElzKGUsIHQgPSBBbikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IFplKFJlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IENyKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtDcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBaZShSZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IGEgPSB0OyBhID4gMDsgYS0tKVxuICAgIHIgPSBlICUgcnQsIG4gPSBrbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIHJ0O1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIFRzKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gUnMoZSwgdCkge1xuICBjb25zdCByID0gQ3MoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBJcyhuLCBBbikgKyBBcyhQcywgcik7XG59XG5jb25zdCBJbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBUbiA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcyhJbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBScygpO1xuICByZXR1cm4gTnModCksIHQ7XG59LCBOcyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7SW59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufSwgRnMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKChbciwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IHFyLnBhcnNlKHIpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHRbYV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmICh0W2FdID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCB0O1xufSwgaiA9IChlLCB0KSA9PiBBcnJheS5mcm9tKGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIG8pID0+IHtcbiAgY29uc3QgcyA9IG8uZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICBpZiAoIXMpIHJldHVybiBhO1xuICBjb25zdCBjID0gby50eXBlID09PSBcImNoZWNrYm94XCIgPyBvLmNoZWNrZWQgOiBvLnZhbHVlO1xuICByZXR1cm4geyAuLi5hLCBbc106IGMgfTtcbn0sIHt9KSwgTXMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBOby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59LCBMcyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgWiA9IChlKSA9PiAoe1xuICBsaW5lMTogZVtwLkxJTkUxXSxcbiAgbGluZTI6IGVbcC5MSU5FMl0sXG4gIGxpbmUzOiBlW3AuTElORTNdLFxuICBjaXR5OiBlW3AuQ0lUWV0sXG4gIHN0YXRlOiBlW3AuU1RBVEVdLFxuICBjb3VudHJ5OiBlW3AuQ09VTlRSWV0sXG4gIHppcF9jb2RlOiBlW3AuWklQX0NPREVdXG59KSwgSyA9IChlLCB0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKVxuICAgIHJldHVybiB7XG4gICAgICBsaW5lMTogZVtwLlNISVBQSU5HX0xJTkUxXSxcbiAgICAgIGxpbmUyOiBlW3AuU0hJUFBJTkdfTElORTJdLFxuICAgICAgbGluZTM6IGVbcC5TSElQUElOR19MSU5FM10sXG4gICAgICBjaXR5OiBlW3AuU0hJUFBJTkdfQ0lUWV0sXG4gICAgICBzdGF0ZTogZVtwLlNISVBQSU5HX1NUQVRFXSxcbiAgICAgIGNvdW50cnk6IGVbcC5TSElQUElOR19DT1VOVFJZXSxcbiAgICAgIHppcF9jb2RlOiBlW3AuU0hJUFBJTkdfWklQX0NPREVdXG4gICAgfTtcbn0sIE50ID0gKGUsIHQpID0+IFtlLCB0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksIERzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xufVxuLmZyYW1lLCAjYWR5ZW4tY29udGFpbmVyLCAjYWR5ZW4tY29udGFpbmVyID4gKiB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3JkZXI6IG5vbmU7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgeHMgPSAoeyB3aWR0aDogZSwgaGVpZ2h0OiB0IH0pID0+IGBcbkBrZXlmcmFtZXMgZmFkZUluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XG4gIH1cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxufVxuXG4ub3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ4ICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4uY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAke2UgPz8gXCI1MDBweFwifTtcbiAgbWF4LWhlaWdodDogJHt0ID8/IFwiNjAwcHhcIn07XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBhbmltYXRpb246IGZhZGVJbiAwLjNzIGVhc2Utb3V0O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgMTBweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLXNlbGVjdG9yLWNvbnRlbnQge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXgtaGVpZ2h0OiBjYWxjKCR7dCA/PyBcIjYwMHB4XCJ9IC0gNDhweCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG4uYmFuay1zZWxlY3Rvci1oZWFkZXIge1xuICBmb250LXNpemU6IDEuMjVyZW07XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGNvbG9yOiAjMWExYTFhO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYmFuay1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuLmJhbmstaXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNlNWU1ZTU7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuLmJhbmstaXRlbTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzNiODJmNjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xuICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cbi5iYW5rLWl0ZW06YWN0aXZlIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuLmJhbmstbG9nbyB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTllY2VmO1xufVxuLmJhbmstbG9nby1wbGFjZWhvbGRlciB7XG4gIHdpZHRoOiA0MHB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZWNlZjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgY29sb3I6ICM2Yzc1N2Q7XG4gIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG4uYmFuay1pbmZvIHtcbiAgZmxleDogMTtcbn1cbi5iYW5rLWRpc3BsYXktbmFtZSB7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICMxYTFhMWE7XG4gIG1hcmdpbi1ib3R0b206IDJweDtcbn1cbi5iYW5rLW5hbWUge1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBjb2xvcjogIzZjNzU3ZDtcbn1cbi5jYW5jZWwtYnV0dG9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IDFyZW07XG4gIGNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRvcDogLTEuNXJlbTtcbiAgcGFkZGluZzogMDtcbiAgcmlnaHQ6IDA7XG59XG5gLCBSbiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgaWQ6IHIsIHRpdGxlOiBuLCB3aWR0aDogYSwgaGVpZ2h0OiBvIH0gPSB0ID8/IHt9LCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBzLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0RzKHsgd2lkdGg6IGEsIGhlaWdodDogbyB9KX1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHtlfVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cIiR7ciA/PyBcInRocmVlLWRzLWlmcmFtZVwifVwiIHRpdGxlPVwiJHtuID8/IFwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwifVwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBsID0gYy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbC5hcHBlbmRDaGlsZChzLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IHUgPSBsLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBkID0gbC5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGMpLCB7IGhvc3Q6IGMsIGlmcmFtZTogdSwgY2FuY2VsQnV0dG9uOiBkIH07XG59LCBObiA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHsgd2lkdGg6IHIsIGhlaWdodDogbiwgdGl0bGU6IGEgfSA9IHQgPz8ge307XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIiksIGwgPSBlLm1hcCgoeSwgaCkgPT4ge1xuICAgICAgY29uc3QgYiA9IHkucmVzb3VyY2VzLmxvZ29fdXJsID8gYDxpbWcgc3JjPVwiJHt5LnJlc291cmNlcy5sb2dvX3VybH1cIiBhbHQ9XCIke3kuZGlzcGxheV9uYW1lfVwiIGNsYXNzPVwiYmFuay1sb2dvXCIgLz5gIDogYDxkaXYgY2xhc3M9XCJiYW5rLWxvZ28tcGxhY2Vob2xkZXJcIj4ke3kuZGlzcGxheV9uYW1lLnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpfTwvZGl2PmA7XG4gICAgICByZXR1cm4gYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pdGVtXCIgZGF0YS1iYW5rLWluZGV4PVwiJHtofVwiPlxuICAgICAgICAgICR7Yn1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1pbmZvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1kaXNwbGF5LW5hbWVcIj4ke3kuZGlzcGxheV9uYW1lfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbmstbmFtZVwiPiR7eS5iYW5rX25hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICAgIGMuaW5uZXJIVE1MID0gYFxuICAgICAgPHN0eWxlPlxuICAgICAgICAke3hzKHsgd2lkdGg6IHIsIGhlaWdodDogbiB9KX1cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1zZWxlY3Rvci1oZWFkZXJcIj4ke2EgPz8gXCJTZWxlY3QgeW91ciBiYW5rXCJ9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1saXN0XCI+XG4gICAgICAgICAgICAgICR7bH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gICAgY29uc3QgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIGQgPSB1LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICAgIGQuYXBwZW5kQ2hpbGQoYy5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICAgIGNvbnN0IGYgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKSwgXyA9IGQucXVlcnlTZWxlY3RvckFsbChcIi5iYW5rLWl0ZW1cIiksIG0gPSAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHUpO1xuICAgIH07XG4gICAgZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbSgpLCBzKG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSk7XG4gICAgfSksIF8uZm9yRWFjaCgoeSwgaCkgPT4ge1xuICAgICAgeS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBtKCksIG8oZVtoXSk7XG4gICAgICB9KTtcbiAgICB9KSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1KTtcbiAgfSk7XG59O1xuZnVuY3Rpb24gT3MoZSwgdCwgciwgbiwgYSkge1xuICBjb25zdCBvID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjID0gYXdhaXQgd3MoZSwgciwgbiwgYSk7XG4gICAgICBjICYmIChjbGVhckludGVydmFsKHMpLCB0KGMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG8oKTtcbiAgY29uc3QgcyA9IHNldEludGVydmFsKG8sIFBuKTtcbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBVcyh7XG4gIGVsZW1lbnRzOiBlLFxuICBwb2xsaW5nSW50ZXJ2YWw6IHQsXG4gIHJlc29sdmU6IHJcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHQpLCBlLmhvc3QucmVtb3ZlKCksIHIoeyBzdGF0dXM6IEYuQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gZS5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgZS5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gYmUoZSkge1xuICBjb25zdCB7IHVybDogdCwgYmFzZVVybDogciwgZnJhbWVXaWR0aDogbiwgZnJhbWVIZWlnaHQ6IGEsIGZyYW1lVGl0bGU6IG8gfSA9IGUsIHMgPSBSbih0LCB7IHdpZHRoOiBuLCBoZWlnaHQ6IGEsIHRpdGxlOiBvIH0pO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCBsID0gKGYpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBjKGYpLCBkID09IG51bGwgfHwgZCgpO1xuICAgIH0sIHUgPSBPcyhcbiAgICAgIHMuaWZyYW1lLFxuICAgICAgbCxcbiAgICAgIG5ldyBVUkwocikub3JpZ2luLFxuICAgICAgXCJwaW5nLTNkcy1zdGF0dXNcIixcbiAgICAgIERvXG4gICAgKSwgZCA9IFVzKHtcbiAgICAgIGVsZW1lbnRzOiBzLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiB1LFxuICAgICAgcmVzb2x2ZTogY1xuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IEZuID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgdCA9IGF3YWl0IGJlKGUpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodC5zdGF0dXMgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHQuc3RhdHVzICE9PSBGLlNVQ0NFU1MgJiYga3QodC5zdGF0dXMpLCB7XG4gICAgaHJlZjogdC5ocmVmXG4gIH07XG59LCBqcyA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB3aW5kb3cub3Blbih0LCBcIl9ibGFua1wiKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gcjtcbn0sIE1uID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogYSB9ID0gSShcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgYyA9IGpzKGUsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IHlzKHQsIHIpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgbyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2V9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGEoZWUodSkpLCBjbGVhckludGVydmFsKGwpLCBzKGVlKHUpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIGNlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186ICRzLCBlcnJfXzogR3MgfSA9IEkoXCJjb21tb24tY2NcIiksIFZzID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZTogZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzczogdCxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3M6IHIsXG4gIHBheW1lbnRfbWV0aG9kOiBuXG59KSA9PiB7XG4gIGNvbnN0IGEgPSB7fTtcbiAgcmV0dXJuIG4gPT09IFwiYWNoXCIgJiYgKGFbcC5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KSwgYVtwLkxBU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSkpLCBlICYmIChhW3AuWklQX0NPREVdID0gayksIHQgJiYgKGFbcC5MSU5FMV0gPSBrLCBhW3AuQ0lUWV0gPSBrLCBhW3AuU1RBVEVdID0gaywgYVtwLkNPVU5UUlldID0gaywgYVtwLlpJUF9DT0RFXSA9IGspLCByICYmIChhW3AuU0hJUFBJTkdfTElORTFdID0gaywgYVtwLlNISVBQSU5HX0NJVFldID0gaywgYVtwLlNISVBQSU5HX1NUQVRFXSA9IGssIGFbcC5TSElQUElOR19DT1VOVFJZXSA9IGssIGFbcC5TSElQUElOR19aSVBfQ09ERV0gPSBrKSwgT2JqZWN0LmtleXMoYSkubGVuZ3RoID09PSAwID8gT2UgOiBPZS5leHRlbmQoYSk7XG59LCBxcyA9IChlLCB0LCByID0ge30pID0+IHtcbiAgaWYgKHIpIHtcbiAgICAkcyhgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgY29uc3QgbyA9IE9iamVjdC5rZXlzKHIpO1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykge1xuICAgICAgY29uc3QgYyA9IG9bc10sIGwgPSByW2NdO1xuICAgICAgZVtjXSB8fCAoZVtjXSA9IGwpO1xuICAgIH1cbiAgfVxuICBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSA9ICEhZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10sIGVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddICYmIChlW3AuU0hJUFBJTkdfTElORTFdID0gZVtwLkxJTkUxXSwgZVtwLlNISVBQSU5HX0xJTkUyXSA9IGVbcC5MSU5FMl0sIGVbcC5TSElQUElOR19MSU5FM10gPSBlW3AuTElORTNdLCBlW3AuU0hJUFBJTkdfQ0lUWV0gPSBlW3AuQ0lUWV0sIGVbcC5TSElQUElOR19TVEFURV0gPSBlW3AuU1RBVEVdLCBlW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0sIGVbcC5TSElQUElOR19aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdKTtcbiAgY29uc3QgYSA9IFZzKHIpLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFhLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gYS5lcnJvci5mb3JtYXQoKSwgcyA9IEZzKG8pLCBjID0gT2JqZWN0LmtleXMocyk7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBjLmxlbmd0aDsgbCsrKSB7XG4gICAgICBjb25zdCB1ID0gY1tsXSwgZCA9IHNbdV07XG4gICAgICB0KHUsIGQsIHUpO1xuICAgIH1cbiAgICB0aHJvdyBHcyhcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiBhLmRhdGE7XG59LCB7IGxvZ19fOiB6cywgZXJyX186IEhzIH0gPSBJKFwiY29tbW9uLWNjXCIpLCBxID0gcXMsIExuID0gKGUsIHQpID0+IHtcbiAgZm9yIChjb25zdCByIG9mIGUpXG4gICAgaWYgKHIuc3VjY2VzcyA9PT0gITEpXG4gICAgICB0aHJvdyByLmVycm9ycy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBCci5zYWZlUGFyc2Uobi5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgICAgIEhzKGBVbmtub3duIGZpZWxkIG5hbWUgaW4gb25WYWxpZGF0aW9uRXJyb3I6ICR7bi5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBuKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgbyA9IGEuZGF0YTtcbiAgICAgICAgICB0KG8sIG4uZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfSksIHpzKGBFcnJvciB0b2tlbml6aW5nIGNhcmQ6IGdvdCB2YWxpZGF0aW9uIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyLmVycm9ycyl9YCksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyB3aGlsZSB0b2tlbml6aW5nIGNhcmRcIik7XG59LCB7IGxvZ19fOiBWbCwgZXJyX186IERuIH0gPSBJKFwiY29tbW9uXCIpLCB1dCA9IChlKSA9PiB7XG4gIGlmIChlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7ZS5wYXltZW50X21ldGhvZHMubGVuZ3RofWApO1xuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogZS5wYXltZW50X21ldGhvZHNbMF0uaWQgfTtcbn0sIHogPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maW5kKChuKSA9PiB0LnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IERuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIGUpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHQucGFyc2Uocik7XG59LCBuciA9IChlLCB0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IGUuZW1haWwsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBlLmZpcnN0TmFtZSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooZSksXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGUsIHQpXG59KSwgbGUgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiB0IH0gPSBJKGUubG9nUHJlZml4KSwgciA9IGF3YWl0IE0oZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHV0KGUuY29uZmlybVJlc3VsdCk7XG4gIGlmIChyLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4gdChcIlNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QuLi5cIiksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGF3YWl0IGZzKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9KSB9O1xuICB7XG4gICAgaWYgKGUudXNlUGF5Rmlyc3RGbG93KSB7XG4gICAgICBpZiAodChcIlVzaW5nIHBheS1maXJzdCBmbG93Li4uXCIpLCAhZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBEbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGUuY29uZmlybVJlc3VsdCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHsgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIgfSxcbiAgICAgIGN1c3RvbWVyX2VtYWlsOiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkVNQUlMXSxcbiAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFooZS5yZXF1aXJlZEZvcm1GaWVsZHMpLFxuICAgICAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhlLnJlcXVpcmVkRm9ybUZpZWxkcywgci5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBwcm9tb3Rpb25fY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICBsaW5lX2l0ZW1zOiByLmxpbmVfaXRlbXMsXG4gICAgICB0b3RhbF9hbW91bnRfYXRvbTogci5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbi5wYXltZW50X21ldGhvZF9pZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgIH07XG4gICAgcmV0dXJuIHQoXCJEb2luZyBjaGVja291dC4uLlwiLCBhKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIoZS5hbnlDZGVDb25uZWN0aW9uLCBhKSB9O1xuICB9XG59LCBVID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiLCBcImFkeWVuXCIsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIsIFwibG9vcFwiXSk7XG5VLkVudW0uc3RyaXBlO1xuY29uc3QgeG4gPSAoe1xuICBzY3JpcHRJZDogZSxcbiAgc3JjOiB0LFxuICBjaGVja0xvYWRlZEZuOiByXG59KSA9PiB7XG4gIGNvbnN0IG4gPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgbykgPT4ge1xuICAgIGxldCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzLnNyYyA9IHQsIHMuaWQgPSBlLCBzLmFzeW5jID0gITA7XG4gICAgY29uc3QgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO1xuICAgIHIoKSA/IGEoKSA6IGMgPyBzID0gYyA6IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwibG9hZFwiLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBuLmFib3J0KCksIGEoKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICksIHMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZXJyb3JcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKFwiRmFpbGVkIHRvIGxvYWQgdGhlIHNjcmlwdFwiKTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogbi5zaWduYWwgfVxuICAgICk7XG4gIH0pO1xufSwgcWUgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgXztcbiAgY29uc3QgYyA9ICgoZiA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChfID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBfLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgc2hpcHBpbmdBZGRyZXNzUmVxdWlyZWQ6IHMuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogbyAhPSBudWxsICYmIG8ucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBvICE9IG51bGwgJiYgby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBvLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5vLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgb3IgPSAoKSA9PiB4bih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBVdCA9IG51bGw7XG5jb25zdCBhciA9IGFzeW5jIChlKSA9PiBhd2FpdCBwbihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCB6ZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBhcihlKTtcbiAgcmV0dXJuIFV0ID09PSBudWxsICYmIChVdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIFV0O1xufSwgSGUgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gWXIucGFyc2UodCkgOiBudWxsO1xufSwgaXIgPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgcywgYywgbDtcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKHMgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzLCBhID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmRdID0gKChsID0gKGMgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBjLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIGYgPSBkLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLkxJTkUxXSA9IHJbcC5MSU5FMV0gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCByW3AuTElORTJdID0gcltwLkxJTkUyXSB8fCBuLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5MSU5FM10gPSByW3AuTElORTNdIHx8IG4uYWRkcmVzczMgfHwgXCJcIiwgcltwLkNJVFldID0gcltwLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNUQVRFXSA9IHJbcC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IF8gPSByW3AuRklSU1RfTkFNRV0gfHwgdSB8fCBcIlwiLCBtID0gcltwLkxBU1RfTkFNRV0gfHwgZiB8fCBcIlwiO1xuICAgIF8gfHwgbSA/IChyW3AuRklSU1RfTkFNRV0gPSBfLCByW3AuTEFTVF9OQU1FXSA9IG0pIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKTtcbiAgfVxuICByZXR1cm4gYSAmJiAocltwLlNISVBQSU5HX0xJTkUxXSA9IHJbcC5TSElQUElOR19MSU5FMV0gfHwgYS5hZGRyZXNzMSB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTJdID0gcltwLlNISVBQSU5HX0xJTkUyXSB8fCBhLmFkZHJlc3MyIHx8IFwiXCIsIHJbcC5TSElQUElOR19MSU5FM10gPSByW3AuU0hJUFBJTkdfTElORTNdIHx8IGEuYWRkcmVzczMgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NJVFldID0gcltwLlNISVBQSU5HX0NJVFldIHx8IGEubG9jYWxpdHkgfHwgXCJcIiwgcltwLlNISVBQSU5HX1pJUF9DT0RFXSA9IHJbcC5TSElQUElOR19aSVBfQ09ERV0gfHwgYS5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgcltwLlNISVBQSU5HX1NUQVRFXSA9IHJbcC5TSElQUElOR19TVEFURV0gfHwgYS5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0NPVU5UUlldID0gcltwLlNISVBQSU5HX0NPVU5UUlldIHx8IGEuY291bnRyeUNvZGUgfHwgXCJVU1wiKSwgcjtcbn0sIHsgbG9nX186IEplLCBlcnJfXzogQnMgfSA9IEkoXCJhd3gtYmFjc1wiKSwgWXMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB3LCBFO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInRydWVsYXllclwiLCB1ID0gYXdhaXQgbmUocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhvLCBjLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSksIGQgPSBIZSh1KSwgZiA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuY29uc2VudF9pZCwgXyA9IGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCBtO1xuICAgIGlmIChfICYmIF8ubGVuZ3RoID49IDEpIHtcbiAgICAgIEplKFwiTXVsdGlwbGUgYmFua3MgYXZhaWxhYmxlLCBzaG93aW5nIGJhbmsgc2VsZWN0b3IuLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICBtID0gYXdhaXQgTm4oXywge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwMHB4XCIsXG4gICAgICAgICAgdGl0bGU6IFwiU2VsZWN0IGJhbmtcIlxuICAgICAgICB9KSwgSmUoYEJhbmsgc2VsZWN0ZWQ6ICR7bS5kaXNwbGF5X25hbWV9YCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgSmUoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeSA9IHtcbiAgICAgIHR5cGU6IFwiYmFjc19kaXJlY3RfZGViaXRcIixcbiAgICAgIGJhY3NfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgIC8vIFRydWVMYXllclxuICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICBjb3VudHJ5X2NvZGU6IG9bcC5DT1VOVFJZXVxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogY3VzdG9tUGFyYW1zLmFjY291bnROdW1iZXIsXG4gICAgICAgIC8vIHNvcnRfY29kZTogY3VzdG9tUGFyYW1zLnNvcnRDb2RlLFxuICAgICAgICAvLyBhZGRyZXNzOiBnZW5lcmF0ZUJpbGxpbmdBZGRyZXNzRnJvbUZpZWxkcyhub25DZGVGb3JtRmllbGRzKSxcbiAgICAgIH1cbiAgICB9LCBiID0gKEUgPSAodyA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHlcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdy5maW5kKFxuICAgICAgKEMpID0+IEMudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogRS5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGIpIHtcbiAgICAgIEplKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBDIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgIHVybDogYixcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSmUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDfV1gKSwgQyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChDID09PSBGLkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgdiA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQykge1xuICAgICAgdGhyb3cgQnMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgQyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBDXG4gICAgICB9KSwgbmV3IEVycm9yKChDID09IG51bGwgPyB2b2lkIDAgOiBDLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGtyLCBlcnJfXzogSnMgfSA9IEkoXCJhd3gtZWZ0XCIpLCBXcyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGIsIHY7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogTnQob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICAvLyBpbnN0aXR1dGlvbl9udW1iZXI6IHVuZGVmaW5lZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIC8vIHRyYW5zaXRfbnVtYmVyOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAvLyBhY2NvdW50X251bWJlcjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiB1bmRlZmluZWQgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgfVxuICAgIH0sIHkgPSAodiA9IChiID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YTogX1xuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoXG4gICAgICAodykgPT4gdy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB2LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoeSkge1xuICAgICAga3IoXCJFRlQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkVGVCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoa3IoYOKVsCBFRlQgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3d9XWApLCB3ID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAodyA9PT0gRi5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFRlQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZWZ0XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBKcyhcIkVGVCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXZSwgZXJyX186IFpzIH0gPSBJKFwiYXd4LXNlcGFcIiksIEtzID0gSChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdiwgdztcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIiwgdSA9IGF3YWl0IG5lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBaKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobywgYy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBkID0gSGUodSksIGYgPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmNvbnNlbnRfaWQsIF8gPSBkID09IG51bGwgPyB2b2lkIDAgOiBkLmF2YWlsYWJsZV9iYW5rcztcbiAgICBsZXQgbTtcbiAgICBpZiAoXyAmJiBfLmxlbmd0aCA+PSAxKSB7XG4gICAgICBXZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbSA9IGF3YWl0IE5uKF8sIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFdlKGBCYW5rIHNlbGVjdGVkOiAke20uZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFdlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSAodyA9ICh2ID0gKGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBsLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwic2VwYV9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBzZXBhX2RpcmVjdF9kZWJpdDoge1xuICAgICAgICAgICAgLy8gdHJ1ZWxheWVyXG4gICAgICAgICAgICBiYW5rX25hbWU6IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYmFua19uYW1lLFxuICAgICAgICAgICAgY291bnRyeV9jb2RlOiBvW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICAvLyBtaWNyb2RlcG9zaXRcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE50KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF1cbiAgICAgICAgICAgIC8vIGliYW46IGN1c3RvbVBhcmFtcy5pYmFuLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiB2LmZpbmQoXG4gICAgICAoRSkgPT4gRS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICkpID09IG51bGwgPyB2b2lkIDAgOiB3LnJlZGlyZWN0X3VybDtcbiAgICBpZiAoaCkge1xuICAgICAgV2UoXCJTRVBBIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IEUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJTRVBBIHZlcmlmaWNhdGlvblwiXG4gICAgICB9KTtcbiAgICAgIGlmIChXZShg4pWwIFNFUEEgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke0V9XWApLCBFID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKEUgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU0VQQSB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBiID0gYXdhaXQgTChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGZcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1zZXBhXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBiLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aHJvdyBacyhcIlNFUEEgcGF5bWVudCBlcnJvclwiLCBFKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IEVcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogUXMsIGVycl9fOiBzciB9ID0gSShcImFpcndhbGxleC1jY1wiKSwgWHMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBlYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBYcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHNyKG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIE9uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHRjID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBRcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgc3IociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtlZSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBVbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlYyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSksIGEgPSB0YyhuLmhyZWYgPz8gXCJcIiksIG8gPSByW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAobyAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtvfSkuYDtcbiAgICB0aHJvdyBzcihsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogcltcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgam4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBjciA9ICgpID0+IHhuKHtcbiAgc2NyaXB0SWQ6IFwiX19vcF9pbnRlcm5hbF9hcHBsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLFxuICBjaGVja0xvYWRlZEZuOiAoKSA9PiAhIXdpbmRvdy5BcHBsZVBheVNlc3Npb25cbn0pLCBsciA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSB0LmJpbGxpbmdDb250YWN0LCBhID0gdC5zaGlwcGluZ0NvbnRhY3QsIG8gPSB7IC4uLmUgfTtcbiAgaWYgKHIgfHwgbiB8fCBhKSB7XG4gICAgb1twLkVNQUlMXSA9IG9bcC5FTUFJTF0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgb1twLkNPVU5UUlldID0gb1twLkNPVU5UUlldIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgb1twLlpJUF9DT0RFXSA9IG9bcC5aSVBfQ09ERV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiO1xuICAgIGNvbnN0IHMgPSBvW3AuRklSU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmdpdmVuTmFtZSkgfHwgXCJcIiwgYyA9IG9bcC5MQVNUX05BTUVdIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmZhbWlseU5hbWUpIHx8IFwiXCI7XG4gICAgcyB8fCBjID8gKG9bcC5GSVJTVF9OQU1FXSA9IHMsIG9bcC5MQVNUX05BTUVdID0gYykgOiAob1twLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCBvW3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiBvO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCByYyA9ICh7XG4gIHRvdGFsOiBlLFxuICBwcmVmaWxsOiB0XG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAodC5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3QudG9rZW59YCwgQ24pLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCByID0gKG4gPSB0LmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAocilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogZS5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAociA9PSBudWxsID8gdm9pZCAwIDogci5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogciA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7dC50b2tlbn1gXG4gICAgfTtcbn0sIG5jID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgaW5pdGlhbFByZXZpZXc6IHQsXG4gIHByZWZpbGw6IHIsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmN1cnJlbmN5KSA/PyB0LmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogZSAhPSBudWxsICYmIGUucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgdXIgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVuY3lDb2RlOiBhLCB0b3RhbDogbyB9ID0gbmMoe1xuICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gICAgaW5pdGlhbFByZXZpZXc6IHQsXG4gICAgcHJlZmlsbDogcixcbiAgICBkZWZhdWx0TGFiZWw6IG5cbiAgfSk7XG4gIGxldCBzID0ge1xuICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcbiAgICAgIFwiZW1haWxcIixcbiAgICAgIC4uLnIuY2hlY2tvdXRfc2V0dGluZ3MucmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MgPyBbXCJwb3N0YWxBZGRyZXNzXCJdIDogW11cbiAgICBdLFxuICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICBdLFxuICAgIHRvdGFsOiBvLFxuICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiByYyh7XG4gICAgICB0b3RhbDogbyxcbiAgICAgIHByZWZpbGw6IHJcbiAgICB9KVxuICB9O1xuICByZXR1cm4gZSAhPSBudWxsICYmIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCAmJiAodHlwZW9mIGUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyBzID0ge1xuICAgIC4uLnMsXG4gICAgLi4uZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHMpXG4gIH0gOiBzID0geyAuLi5zLCAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgfSksIHM7XG59LCBvYyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgYWMgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogJGUsIGVycl9fOiBjdCB9ID0gSShcImFkeWVuLWNjXCIpLCBpYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IG9jLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBHbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgc2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gaWMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBjdChgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIGNjID0gKGUpID0+IEpTT04ucGFyc2UoZSksIEFyID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIGxjID0gYXN5bmMgKCkgPT4ge1xuICAkZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgQXIoKSB8fCBhd2FpdCBUdCg1MDApO1xuICBpZiAoIUFyKCkpXG4gICAgdGhyb3cgY3QoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEduKTtcbiAgcmV0dXJuICRlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgdWMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogYSwgaG9zdDogbywgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gY2ModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiAkZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICAkZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfKSwgby5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIGN0KFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBGLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9ICh5KSA9PiB7XG4gICAgICBjdChcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBGLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pO1xuICAgIGNvbnN0IG0gPSAoeSwgaCwgYikgPT4ge1xuICAgICAgby5yZW1vdmUoKSwgbCh7IHN0YXR1czogRi5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIGxjKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogbSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIGRjID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0gYWMuc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKCRlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKGN0KGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIFZuID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBzYyh0KSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IG8sIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBSbihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IHVjKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogZGMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IG8sXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRi5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiAkZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGt0KGwuc3RhdHVzKTtcbn0sIHpuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEhuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHBjIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIF9jKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFJ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFwcGxlX3BheV9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBtYyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBlLnBheW1lbnQsIG8gPSBscih0Lm5vbkNkZUZvcm1JbnB1dHMsIGEpLCBzID0gcShcbiAgICAgIG8sXG4gICAgICB0LmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApXG4gICAgfSk7XG4gICAgY29uc3QgYyA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYnJvd3Nlcl9pbmZvOiBhbygpLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHBjKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgYyksICEoKG4gPSAociA9IGMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh1KSwgbGUoe1xuICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogYyxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IG8gPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChvKSwgYTtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogS2UsIGVycl9fOiBCbiB9ID0gSShcImFkeWVuLWFwcGxlLXBheVwiKSwgZmMgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIGlmIChLZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgY3IoKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHI7XG4gICAgaWYgKEtlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBLZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgcjtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFQuYWR5ZW5BcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIEJuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgeWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgem4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgS2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBfYyh3LCBtKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGIoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHcgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uZi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHcpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKHcpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1jKHcsIG0pO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9uY2FuY2VsID0gdiwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBCbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogTWUgfSA9IEkoXCJhZHllbi1nb29nbGUtcGF5XCIpLCBoYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZiwgXztcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChpZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKF8gPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIF8uYXBpKSlcbiAgICAgIHJldHVybiBNZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IGFyKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gTWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIGllKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gcWUoe1xuICAgICAgICBwcmVmaWxsOiBjLFxuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHkgPSBhd2FpdCB6ZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgeS5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBNZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCByO1xuICAgIH1cbiAgICBjb25zdCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCB2ZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFQuYWR5ZW5Hb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBNZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBnYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGIsIHYsIHcsIEUsIEMsIE87XG4gICAgaWUoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBIbiksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBvLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgZCA9IGF3YWl0IE0odSksIGYgPSBxZSh7XG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgZ2F0ZXdheTogXCJhZHllblwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgZyhcImdvb2dsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBvLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQoZCwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBBID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBpZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEEpO1xuICAgICAgY29uc3QgRCA9IGlyKHIsIEEpLCBRID0gcShcbiAgICAgICAgRCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApO1xuICAgICAgaWYgKGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5RXG4gICAgICB9KSwgISgoeSA9IChtID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0udG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW4pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVlID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBRW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogUVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBRW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooUSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpXG4gICAgICB9KSwgQ2UgPSBIZSh1ZSk7XG4gICAgICBpZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIENlKTtcbiAgICAgIGxldCBZID0gYXdhaXQgTCh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBicm93c2VyX2luZm86IGFvKCksXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiAoYiA9IChoID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGxldCBoZSA9ICh3ID0gKHYgPSBZLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHZbMF0pID09IG51bGwgPyB2b2lkIDAgOiB3LmlkO1xuICAgICAgY29uc3QgRmUgPSAoRSA9IFkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogRS5maW5kKChCZSkgPT4gQmUudHlwZSA9PT0gXCJhZHllbi0zZHNcIik7XG4gICAgICBpZiAoRmUgJiYgRmUucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGllKFwiQWR5ZW4gM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgRmUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQmUgfSA9IGF3YWl0IGJlKHtcbiAgICAgICAgICB1cmw6IEZlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpZShg4pWwIEFkeWVuIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7QmV9XWApLCBCZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChCZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEZlICYmICFoZSAmJiAoWSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBGZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlclxuICAgICAgICB9XG4gICAgICB9KSwgaWUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZSBhZnRlciAzRFNcIiwgWSksIGhlID0gKE8gPSAoQyA9IFkucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IE8uaWQpLCAhaGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgbWV0aG9kIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImFkeWVuLWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogWSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgTWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQVxuICAgICAgfSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJciwgZXJyX186IHdjIH0gPSBJKFwiYXd4LWFjaFwiKSwgdmMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBoLCBiO1xuICAgIGNvbnN0IG8gPSBxKHIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBhLnZlcmlmaWNhdGlvbk1ldGhvZCA/PyBcInBsYWlkXCIsIHUgPSBhd2FpdCBuZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKG8sIGMuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KSwgZCA9IEhlKHUpLCBmID0gZCA9PSBudWxsID8gdm9pZCAwIDogZC5jb25zZW50X2lkLCBtID0gKGIgPSAoaCA9IChhd2FpdCBMKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZixcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogbCxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFjaF9kaXJlY3RfZGViaXRcIixcbiAgICAgICAgICBhY2hfZGlyZWN0X2RlYml0OiB7XG4gICAgICAgICAgICAvL3BsYWlkIHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGJ1c2luZXNzX2FjY291bnQ6IGEuaXNCdXNpbmVzc0FjY291bnQgPz8gITEsXG4gICAgICAgICAgICBvd25lcl9uYW1lOiBOdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIC8vIGFjY291bnRfbnVtYmVyOiBhY2hSZXN1bHQ/LnBheWxvYWQ/LmFjY291bnROdW1iZXIsXG4gICAgICAgICAgICAvLyBhYmFfcm91dGluZ19udW1iZXI6IGFjaFJlc3VsdD8ucGF5bG9hZD8ucm91dGluZ051bWJlcixcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaC5maW5kKFxuICAgICAgKHYpID0+IHYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogYi5yZWRpcmVjdF91cmw7XG4gICAgaWYgKG0pIHtcbiAgICAgIElyKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdiB9ID0gYXdhaXQgYmUoe1xuICAgICAgICB1cmw6IG0sXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoSXIoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dn1dYCksIHYgPT09IEYuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHYgPT09IEYuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeSA9IGF3YWl0IEwocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBmXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiB5LFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyB3YyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHYpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogdlxuICAgICAgfSksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiB5dCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBiYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFYyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB5dChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgYmUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoeXQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB5dChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gUGMoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gZS5wYXltZW50LCBsID0gbHIodC5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IHEoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG5lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWih1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBtID0gYXdhaXQgTCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYy50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB5dChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG0pO1xuICAgIGxldCB5ID0gKG4gPSAociA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gbS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAodikgPT4gdi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAobSA9IGF3YWl0IEVjKGgsIHQpLCB5ID0gKHMgPSAobyA9IG0ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGIgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYiksIGxlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBtLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChjKSB7XG4gICAgY29uc3QgbCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGwpLCBjO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBRZSwgZXJyX186IFluIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgU2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoUWUoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmIChRZShcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gUWUoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgdmUocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChmKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBULmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgWW4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQ2MgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgam4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBmID0gdXIoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogQXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgYikgPT4ge1xuICAgICAgY29uc3QgdiA9ICgpID0+IHtcbiAgICAgICAgUWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSB2LCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYmModywgbSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBiKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmYudG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBQYyh3LCBtKTtcbiAgICAgICAgICBoKEUpO1xuICAgICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgICAgYihFKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBZbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHJlLCBlcnJfXzogTGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwga2MgPSB3ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIGYsIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsICRuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICByZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBMZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHJlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgb3IoKSwgISgoXyA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIExlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgYXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBMZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgcmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IGMsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IHplKGUuYmFzZVVybCwgbSksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShtKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIExlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBMZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgQWMgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBtLCB5LCBoLCBiLCB2LCB3LCBFO1xuICAgIHJlKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgJG4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBBdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IHplKGUuYmFzZVVybCwgZik7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShmKTtcbiAgICAgIHJlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBPID0gaXIociwgQyksIEEgPSBxKFxuICAgICAgICBPLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICByZShcIl9fX1wiLCBBKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgRCA9ICh5ID0gKG0gPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBRID0gYXdhaXQgbmUodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFooQSksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKEEsIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgICAgfSksIFNlID0gSGUoUSk7XG4gICAgICByZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIFNlKTtcbiAgICAgIGxldCB1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IFNlID09IG51bGwgPyB2b2lkIDAgOiBTZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBEXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpO1xuICAgICAgbGV0IENlID0gKGIgPSAoaCA9IHVlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiBiLmlkO1xuICAgICAgY29uc3QgWSA9ICh2ID0gdWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFkgJiYgWS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgcmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBZKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBiZSh7XG4gICAgICAgICAgdXJsOiBZLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gRi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gRi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFkgJiYgIUNlICYmICh1ZSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBZLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBZLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHJlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgdWUpLCBDZSA9IChFID0gKHcgPSB1ZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCksICFDZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gbGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogQSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdWUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IExlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBXbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBJYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBSdCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFRjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGxyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBuZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IEwodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBsZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGh0LCBlcnJfXzogWm4gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBSYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoaHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGNyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gaHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGh0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIFpuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBOYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBKbiksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIGYgPSB1cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgZiksIG0gPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIGIpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGh0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBJYyh2LCBtKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IGYudG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgVGModiwgbSk7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIGIodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgWm4oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IFhlIH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEZjID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBmO1xuICAgIEllKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gWGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChJZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9yKCksICEoKGYgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIGYuYXBpKSlcbiAgICAgIHJldHVybiBYZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgSWUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBxZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgbSA9IGF3YWl0IHplKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBtLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIEllKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIFhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IHZlKG8sIHMudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBNYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHksIGgsIGI7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBXbikubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBmID0gcWUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCB6ZShlLmJhc2VVcmwsIGYpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEoZik7XG4gICAgICBJZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHYpO1xuICAgICAgY29uc3QgdyA9IGlyKHQsIHYpLCBFID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAobSA9IHYucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBuZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogWihFKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsoRSwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgICB9KTtcbiAgICAgIEllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgQSA9IGF3YWl0IEwodSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoYiA9IChoID0gQS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGxlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBBLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh2KSB7XG4gICAgICB0aHJvdyBYZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB2KSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiB2XG4gICAgICB9KSwgbmV3IEVycm9yKCh2ID09IG51bGwgPyB2b2lkIDAgOiB2Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IExjLCBlcnJfXzogS24gfSA9IEkoXCJwb2NreXQtY2NcIiksIERjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgeGMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRGMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBLbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBRbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTGMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEtuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgSHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBPYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBVYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB4Yyh0KSwgbiA9IGF3YWl0IEZuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBRbihuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogVHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIGpjID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgWG4gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgVHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IElpKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgVHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCAkYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBqYy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIEdjID0gNCwgeyBsb2dfXzogTmUsIGVycl9fOiBQdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIFZjID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTmUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBOZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBjID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBUbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBQdChhLCBsKSwgTmUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgTG4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgYm4obywgbCk7XG4gIGlmIChOZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBlbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gcWMoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBsLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgcWMgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBjXG4gIH0gPSBlO1xuICBsZXQgbCA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgR2M7IHUrKykge1xuICAgIE5lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IEJjKGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmID0gYXdhaXQgemModC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLmYubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTmUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgIGNvbnN0IF8gPSBlZShmKTtcbiAgICAgIFB0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChsID0gYXdhaXQgTChvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBjLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE5lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgbCksIGwuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBlbyhyLm1vZGUsIGwpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbC5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogbFxuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHpjID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCBYbigkYyh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoT24odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgVW4oZSwgdCkgfSB9O1xuICAgIGlmIChWbih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IHFuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoSGModCkpXG4gICAgICByZXR1cm4gYXdhaXQgcm8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgSGMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0byhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBCYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBzYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBQdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgUHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBlbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogTiwgZXJyX186IFJyIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBZYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIHk7XG4gICAgTihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgYyA9ICgobSA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogbS51bmlmaWVkX2NjKSA/PyAwO1xuICAgIE4oYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChjICogMTAwKX0lYCk7XG4gICAgY29uc3QgbCA9IE1hdGgucmFuZG9tKCksIHUgPSBsIDwgYywgZCA9IHtcbiAgICAgIHJvbGw6IGwsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGMsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBOKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtsfSB2cyAke2N9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgVmMoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBOKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIE4oYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBmID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uZlxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBmLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGNlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBOKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEVuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKExuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgTihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IGdzKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBiIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBOKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgYiA9IGF3YWl0IFNyKG8sIF8pO1xuICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2Ygdm4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBOKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgTihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIGIgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSBiW1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIE4oYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgdiA9IE9jKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgTihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgVWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT24oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIE4oXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFVuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFZuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBOKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgcW4oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IGJuKG8sIF8pO1xuICAgICAgICBOKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCBPID0gKCh5ID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogeVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgdiA/IE4oXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IE8gPyAoTihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKEpjKEMpKSkgOiAoTihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IHJvKEMsIGUuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCBBID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgTihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtBfV1gKTtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgTChvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE4oXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgRCk7XG4gICAgICAgICAgY29uc3QgUSA9IHV0KEQpO1xuICAgICAgICAgIHJldHVybiBOKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7US5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFEgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBOKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke08gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IFNyKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogQSxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IE9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gTihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogRCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBScihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgUnIoaCksIGg7XG4gICAgfVxuICB9XG4pLCBKYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gYmkucGFyc2UodCk7XG59LCBXYyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgdG8gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBXYy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4geG8ucGFyc2UodCk7XG59LCBybyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSB0byhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIE4oXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgTihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IGJlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKE4oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgWmMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IEosIGVycl9fOiBLYyB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCBRYyA9IHdlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBKKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFpjKTtcbiAgICBKKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIEooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IFJ0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IHZlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgYyA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGwgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBjID0gTWF0aC5tYXgoYywgbCkpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgbCA9IE1hdGgubWF4KGwsIGQpLCBjID0gTWF0aC5tYXgoYywgbCkpO1xuICAgIGNvbnN0IGYgPSBkLCBfID0gdjQoKSwgbSA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IGYsXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBjLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGwsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBtLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IHlcbiAgICB9O1xuICB9XG4pLCBYYyA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgSihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBKKFwiY29udGV4dFwiLCBlKSwgSihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgSihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIEooXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBKKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgSihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtvLm1vZGV9XWApO1xuICAgIGNvbnN0IHMgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgby5jaGVja291dF9zZXR0aW5nc1xuICAgICksIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBvLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IG5yKHMsIG8uY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgZyhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgbmUoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAuLi51LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBvLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogby5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV1cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogY2UoKVxuICAgIH0pLCBmID0gYXdhaXQgTChjLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG8udG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IGQuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBhLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKEooYENvbmZpcm0gcmVzdWx0OiAke2Z9YCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBKKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgSihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBmKTtcbiAgICAgIGNvbnN0IF8gPSB1dChmKTtcbiAgICAgIHJldHVybiBKKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEtjKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGYucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBrZSwgZXJyX186IGVsIH0gPSBJKFwicGF5cGFsXCIpLCBubyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIHRsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgbm8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFQucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBybCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGtlKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pLCB7IGlzQW5vbnltb3VzOiBjLCB1c2VSZWRpcmVjdEZsb3c6IGwgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBrZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gbm8ucGFyc2Uocik7XG4gICAgICBrZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gcSh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5jID8gTHMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIGYgPSBucihkLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIGtlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgbSA9ICExLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGwsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZlxuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgYiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCB2ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiBiXG4gICAgICB9KSwgdyA9IGAke2h9PyR7di50b1N0cmluZygpfWA7XG4gICAgICBpZiAobClcbiAgICAgICAgdGhyb3cga2UoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgVHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBNbihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgbyxcbiAgICAgICAgXyxcbiAgICAgICAgd1xuICAgICAgKTtcbiAgICAgIGtlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEUpO1xuICAgICAgY29uc3QgQyA9IEh0KEUuaHJlZiwgXCJjYXR0XCIpLCBPID0gSHQoRS5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIEEgPSBhd2FpdCBMKG8sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBtID8gQyA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IG0gPyBPIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBrZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBBKSwgbGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBkLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBBLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IG1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHRocm93IGVsKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgbyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogbyB9KSwgbmV3IEVycm9yKChvID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IGRlLCBlcnJfXzogTnIgfSA9IEkoXCJwb2NreXQtcGF5cGFsXCIpLCBvbyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgbmwgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBvbyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFQucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBvbCA9IEgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIEEsIEQ7XG4gICAgZGUoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShvKTtcbiAgICBkZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IG9vLnBhcnNlKHQpO1xuICAgIGRlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IHEoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBsID09IG51bGwgPyB2b2lkIDAgOiBsLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSBucih1LCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBkZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgIGNvbnN0IGYgPSB2NCgpLCBfID0gcy5tb2RlICE9PSBcInNldHVwXCIsIG0gPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IF8sXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IF8gPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKEEgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIEEudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZcbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkobSkpLCBiID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcy50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgdiA9IGAke3l9PyR7Yi50b1N0cmluZygpfWA7XG4gICAgaWYgKChEID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBELnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IGRlKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHYsIGF3YWl0IFR0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgZGUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIGRlKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IHcgPSBhd2FpdCBNbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBvLFxuICAgICAgZixcbiAgICAgIHZcbiAgICApO1xuICAgIGRlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHcpO1xuICAgIGNvbnN0IEUgPSBRbih3LmhyZWYpLCBDID0gSHQody5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFDKVxuICAgICAgdGhyb3cgTnIoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHcuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBkZShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtFfWApO1xuICAgIGNvbnN0IE8gPSBhd2FpdCBMKG8sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBFLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyA/IEMgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoZGUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTyksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTy5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBOcihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE8pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgRnIgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogRywgZXJyX186IGFsIH0gPSBJKFwic3RyaXBlLWxpbmtcIiksIGlsID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHNsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGNsID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBHKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGlsKTtcbiAgICBHKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBvID0gYXdhaXQgTShhKSwgcyA9IG8ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEcoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IHZlKGEsIG8udG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgU2kobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBHKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgZiA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke0ZyfWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8gRyhcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoRyhcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgZigpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBpZiAoRyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgRyhcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbS5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChtKSA9PiB7XG4gICAgICBHKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBtKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBtLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgeS5lcnJvciA/IChhbChcImVycm9yXCIsIHkuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoeS5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoRyhcInBheW1lbnRNZXRob2RcIiwgeS5wYXltZW50TWV0aG9kKSwgVC5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHkucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGYsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgZGwoRnIpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgbGwgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEcoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgRyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYyA9IHVsKHIsIGEuc3RyaXBlUE0pLCBsID0gcShjLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5sXG4gICAgfSksIEcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgdSA9IGF3YWl0IG5lKG8sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBhLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBsW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGxbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGxbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFoobCksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogSyhsLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBjZSgpXG4gICAgfSk7XG4gICAgRyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBmID0gc2wucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEcoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IEwobywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBmXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB1dChfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBHKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBsW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBsW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogbFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IFoobCksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IEsobCwgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBsW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcnIobywgXykgfTtcbiAgICB9XG4gIH1cbiksIHVsID0gKGUsIHQpID0+IHtcbiAgdmFyIGwsIHUsIGQsIGYsIF87XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gKCh1ID0gKGwgPSB0LmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBvID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IHQubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IHQuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgKChmID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IGYucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8ICgoXyA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGMgPSByW3AuTEFTVF9OQU1FXSB8fCBvIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGMgPyAocltwLkZJUlNUX05BTUVdID0gcywgcltwLkxBU1RfTkFNRV0gPSBjKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIEcoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBkbCA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IFcsIGVycl9fOiBwbCB9ID0gSShcInN0cmlwZS1wclwiKSwgX2wgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIG1sID0gd2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIFcoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIF9sKTtcbiAgICBXKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBNKG4pLCBvID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgVyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgdmUobiwgYS50b2tlbiwgbywgdm9pZCAwKSwgYyA9IGF3YWl0IENpKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgb1xuICAgICk7XG4gICAgVyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBwbChcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgVyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIGYpID0+IFQuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBmID09IG51bGwgPyB2b2lkIDAgOiBmLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgZmwgPSBIKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgaW5pdFJlc3VsdDogb1xuICB9KSA9PiB7XG4gICAgaWYgKFcoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBhLnByb3ZpZGVyICE9PSB0LnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHthLnByb3ZpZGVyfSwgZ290ICR7dC5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gby5wcjtcbiAgICBpZiAoYSAhPSBudWxsICYmIGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgeSA9IGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIFcoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHkpO1xuICAgICAgY29uc3QgaCA9IHR5cGVvZiB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8geS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIGhsKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIGgsIHkubGFiZWwpO1xuICAgIH1cbiAgICBXKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBraShjKTtcbiAgICBXKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBsKSwgVyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IHlsKHIsIGwpLCBkID0gcSh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5kXG4gICAgfSksIFcoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBkKTtcbiAgICBjb25zdCBmID0gYXdhaXQgbXMocywge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIF8gPSBnbChmKTtcbiAgICBXKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgQWkoXywgbCk7XG4gICAgY29uc3QgbSA9IGF3YWl0IE0ocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBXKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEwocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHV0KHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIFcoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBkW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogZFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBkW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBaKGQpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBLKGQsIG0uY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZFtwLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogbS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogbS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHJyKHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCB5bCA9IChlLCB0KSA9PiB7XG4gIHZhciBkLCBmLCBfLCBtO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5hXSA9ICgoZiA9IChkID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBkLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuc3BsaXQoL1xccysvKSkgPz8gW10sIG8gPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChtID0gKF8gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBfLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbcC5MQVNUX05BTUVdIHx8IG8gfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW3AuRklSU1RfTkFNRV0gPSBsLCByW3AuTEFTVF9OQU1FXSA9IHUpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgVyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGhsID0gKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBhID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBnbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBFaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBtZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSByID09PSB2b2lkIDAgPyAhMCA6IGEucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBhLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBvICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBUID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFljXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IG1sLFxuICAgIHJ1bjogZmxcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGNsLFxuICAgIHJ1bjogbGxcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IG5sLFxuICAgIHJ1bjogb2xcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IHRsLFxuICAgIHJ1bjogcmxcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGtjLFxuICAgIHJ1bjogQWNcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBTYyxcbiAgICBydW46IENjXG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogdmNcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBXc1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBZc1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBLc1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBRYyxcbiAgICBydW46IFhjXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogUmMsXG4gICAgcnVuOiBOY1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBGYyxcbiAgICBydW46IE1jXG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaGMsXG4gICAgcnVuOiBnY1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogZmMsXG4gICAgcnVuOiB5Y1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogd2wsIGVycl9fOiB2bCB9ID0gSShcImluaXQtZmxvd3NcIiksIG9lID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBldCgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICAgICAgd2woYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIHIuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICB2bChg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBlZShhKSwgXCJEZXRhaWxzOlwiLCBhKSwgci50aHJvdyhhLCBlZShhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgYmwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgRWwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogb2UoXCJTdHJpcGUgUFJcIiwgVC5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogb2UoXCJTdHJpcGUgTGlua1wiLCBULnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBvZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgVC5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogb2UoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgVC5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBvZShcIkxvb3BcIiwgVC5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBvZShcIlBheVBhbFwiLCBULnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IG9lKFwiUG9ja3l0IFBheVBhbFwiLCBULnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBvZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFQuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBvZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgVC5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiBvZShcIkFkeWVuIEdvb2dsZVBheVwiLCBULmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiBvZShcIkFkeWVuIEFwcGxlUGF5XCIsIFQuYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFBsIH0gPSBJKFwiZm9ybS1jYWxsYmFja3NcIiksIGFlID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgTXIgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogYWUsXG4gIG9uQmx1cjogYWUsXG4gIG9uQ2hhbmdlOiBhZSxcbiAgb25Mb2FkOiBhZSxcbiAgb25Mb2FkRXJyb3I6IGFlLFxuICBvblZhbGlkYXRpb25FcnJvcjogYWUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBhZSxcbiAgb25DaGVja291dFN1Y2Nlc3M6IGFlLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGFlLFxuICBvbkNoZWNrb3V0RXJyb3I6IGFlLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogYWVcbn0pLCBmZSA9IGNsYXNzIGZlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSB5YShyLCBuID8/IGZlLk5PT1AsIFBsKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGZlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5mZS5OT09QID0gKCkgPT4ge1xufSwgZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKE1yLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSBmZS5OT09QO1xuICB9KSwgdDtcbn0sIGZlLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IGZlKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcyhNci5wYXJzZSh0KSksIHI7XG59O1xubGV0IEJ0ID0gZmU7XG5mdW5jdGlvbiBTbCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gJCgpLCB0ID0gZTtcbiAgICBpZiAodCAhPSBudWxsICYmIHQubmV4dCB8fCB0ICE9IG51bGwgJiYgdC5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgciA9IGU7XG4gICAgaWYgKHIgIT0gbnVsbCAmJiByLl9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKGEpID0+IGEuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuICE9IG51bGwgJiYgbi5WdWUgfHwgbiAhPSBudWxsICYmIG4uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBDbChlKSB7XG4gIHZhciB0LCByLCBuO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IG8gPSAkKCk7XG4gICAgICAgIHJldHVybiAoKHQgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiB0LnZlcnNpb24pIHx8ICgociA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IChuID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogbi5kb2N1bWVudCwgbyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG8gPyBvLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24ga2woKSB7XG4gIGNvbnN0IGUgPSBTbCgpLCB0ID0gQ2woZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY29uc3QgYW8gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbCwgdCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGwsIHIgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGwsIG4gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6ICExLCBhID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGwsIG8gPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IHMgPSBudWxsO1xuICB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciAmJiAocyA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2UpO1xuICBjb25zdCBjID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoOiByLFxuICAgIGphdmFfZW5hYmxlZDogbixcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6ICEwLFxuICAgIGxhbmd1YWdlOiBzLFxuICAgIHNjcmVlbl9oZWlnaHQ6IGUsXG4gICAgc2NyZWVuX3dpZHRoOiB0LFxuICAgIHRpbWVfem9uZV9vZmZzZXQ6IGMsXG4gICAgdXNlcl9hZ2VudDogYSxcbiAgICBhY2NlcHRfaGVhZGVyOiBvXG4gIH07XG59O1xudmFyIFIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5hcHBsZVBheSA9IFwiYXBwbGUtcGF5XCIsIGUuZ29vZ2xlUGF5ID0gXCJnb29nbGUtcGF5XCIsIGUubG9vcENyeXB0byA9IFwibG9vcC1jcnlwdG9cIiwgZS5wYXlwYWwgPSBcInBheXBhbFwiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmFkeWVuR29vZ2xlUGF5ID0gXCJhZHllbi1nb29nbGUtcGF5XCIsIGUuYWR5ZW5BcHBsZVBheSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCIsIGUuYWlyd2FsbGV4QUNIID0gXCJhaXJ3YWxsZXgtYWNoXCIsIGUuYWlyd2FsbGV4RUZUID0gXCJhaXJ3YWxsZXgtZWZ0XCIsIGUuYWlyd2FsbGV4QkFDUyA9IFwiYWlyd2FsbGV4LWJhY3NcIiwgZS5haXJ3YWxsZXhTRVBBID0gXCJhaXJ3YWxsZXgtc2VwYVwiLCBlKSkoUiB8fCB7fSk7XG56JDEubmF0aXZlRW51bShSKTtcbnZhciBBZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkFDSCA9IFwiYWNoXCIsIGUuRUZUID0gXCJlZnRcIiwgZS5CQUNTID0gXCJiYWNzXCIsIGUuU0VQQSA9IFwic2VwYVwiLCBlLkFQUExFX1BBWSA9IFwiYXBwbGVfcGF5XCIsIGUuQ1JFRElUX0NBUkQgPSBcImNyZWRpdF9jYXJkXCIsIGUuR09PR0xFX1BBWSA9IFwiZ29vZ2xlX3BheVwiLCBlLlNUUklQRV9MSU5LID0gXCJzdHJpcGVfbGlua1wiLCBlLkNSWVBUTyA9IFwiY3J5cHRvXCIsIGUuUEFZUEFMID0gXCJwYXlwYWxcIiwgZSkpKEFlIHx8IHt9KTtcbmNvbnN0IExyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFtlLmFpcndhbGxleEFwcGxlUGF5LCBlLmF1dGhvcml6ZU5ldEFwcGxlUGF5LCBlLmFkeWVuQXBwbGVQYXldLCByID0gW107XG4gIHQuZm9yRWFjaCgoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSBhLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBvICE9IG51bGwgJiYgby5pc0F2YWlsYWJsZSAmJiByLnB1c2gobyk7XG4gIH0pO1xuICBjb25zdCBuID0gZS5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIHJldHVybiBuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSAmJiBuLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBuLnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBvID09IG51bGwgPyB2b2lkIDAgOiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChhKSA9PiBhLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IEFsKHIsIGEpXG4gIH07XG59LCBEciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhHb29nbGVQYXksIGUuYXV0aG9yaXplTmV0R29vZ2xlUGF5LCBlLmFkeWVuR29vZ2xlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKGEpID0+IHtcbiAgICBjb25zdCBvID0gYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgbyAhPSBudWxsICYmIG8uaXNBdmFpbGFibGUgJiYgci5wdXNoKG8pO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5ICYmIHIucHVzaCh7XG4gICAgaXNBdmFpbGFibGU6ICEwLFxuICAgIGlzTG9hZGluZzogITEsXG4gICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgIHN0YXJ0RmxvdzogKG8pID0+IG4uc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBvID09IG51bGwgPyB2b2lkIDAgOiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KVxuICB9KSwge1xuICAgIHByb2Nlc3NvcnM6IHIubWFwKChhKSA9PiBhLnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IHIubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHN0YXJ0RmxvdzogKGEpID0+IElsKHIsIGEpXG4gIH07XG59LCBBbCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgQXBwbGUgUGF5IHByb2Nlc3NvciBmb3VuZFwiKTtcbn0sIElsID0gKGUsIHQpID0+IHtcbiAgaWYgKHQgIT0gbnVsbCAmJiB0LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IG4gPSBlLmZpbmQoKGEpID0+IGEucHJvY2Vzc29yID09PSB0LnByb2Nlc3Nvcik7XG4gICAgaWYgKG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlKVxuICAgICAgcmV0dXJuIG4uc3RhcnRGbG93KHQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7dC5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCByID0gZS5maW5kKChuKSA9PiBuLmlzQXZhaWxhYmxlKTtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHIuc3RhcnRGbG93KHQpO1xuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBUbCA9IChlKSA9PiBKU09OLnN0cmluZ2lmeShlKSwgeyBsb2dfXzoganQsIGVycl9fOiBSbCB9ID0gSShcInRyYWNlclwiKSwgTmwgPSAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIEZsKGUsIHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgUmwoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7cn1gKTtcbiAgfVxufTtcbmxldCB4cjtcbmNvbnN0IEZsID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIilcbiAgICByZXR1cm47XG4gIGNvbnN0IHIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQndPNkhoRzYtIX57MDAzfX4uanMnKSwgeyBDb25zb2xlU3BhbkV4cG9ydGVyOiBuLCBTaW1wbGVTcGFuUHJvY2Vzc29yOiBhLCBXZWJUcmFjZXJQcm92aWRlcjogbyB9ID0gciwgcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1EbjZKaldfWS0hfnswMDZ9fi5qcycpLCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uOiBjIH0gPSBzLCBsID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LXNnUVk2VklHLSF+ezAwYn1+LmpzJyksIHsgWm9uZUNvbnRleHRNYW5hZ2VyOiB1IH0gPSBsLCBkID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUM3WWlVYXdWLSF+ezAwY31+LmpzJyksIHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zOiBmIH0gPSBkLCBfID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJhOUpXWTdHLSF+ezAwZX1+LmpzJyksIHsgUmVzb3VyY2U6IG0gfSA9IF8sIHkgPSBhd2FpdCBpbXBvcnQoJy4vZGV0ZWN0LXJlc291cmNlcy1DS2xSRW5FMS0hfnswMGh9fi5qcycpLnRoZW4oKENlKSA9PiBDZS5kKSwgeyBkZXRlY3RSZXNvdXJjZXNTeW5jOiBoIH0gPSB5LCBiID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJqNThrbUc0LSF+ezAwa31+LmpzJyksIHsgT1RMUFRyYWNlRXhwb3J0ZXI6IHYgfSA9IGIsIHcgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQmhUTjQwR1EtIX57MDBtfX4uanMnKSwgeyBCM1Byb3BhZ2F0b3I6IEUsIEIzSW5qZWN0RW5jb2Rpbmc6IEMgfSA9IHcsIE8gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQnlNZ0pVWWEtIX57MDAxfX4uanMnKSwgeyBCYXRjaFNwYW5Qcm9jZXNzb3I6IEEgfSA9IE87XG4gIGp0KGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke2V9IGFuZCBiYXNlVXJsICR7dH1gKTtcbiAgY29uc3QgRCA9IE1sKHQpO1xuICBqdChgVXNpbmcgY29sbGVjdG9yIFVSTCAke0R9YCk7XG4gIGNvbnN0IFEgPSBuZXcgdih7IHVybDogRCB9KSwgU2UgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogZSxcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIHJldHVybiBuZXcgbyh7XG4gICAgcmVzb3VyY2U6IG5ldyBtKFNlKS5tZXJnZShoKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgYShuZXcgbigpKSxcbiAgICAgIG5ldyBBKFEsIHtcbiAgICAgICAgc2NoZWR1bGVkRGVsYXlNaWxsaXM6IDUwMFxuICAgICAgfSlcbiAgICBdXG4gIH0pLnJlZ2lzdGVyKHtcbiAgICBjb250ZXh0TWFuYWdlcjogbmV3IHUoKSxcbiAgICBwcm9wYWdhdG9yOiBuZXcgRSh7IGluamVjdEVuY29kaW5nOiBDLk1VTFRJX0hFQURFUiB9KVxuICB9KSwgZih7XG4gICAgaW5zdHJ1bWVudGF0aW9uczogW1xuICAgICAgbmV3IGMoe1xuICAgICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiBbLy4qL10sXG4gICAgICAgIC8vIFByb3BhZ2F0ZSB0byBhbGwgVVJMc1xuICAgICAgICAvLyBFeGNsdWRlIEFkeWVuIFVSTHMgLSB0aGV5IGRvIG5vdCBhbGxvdyBPUFRJT05TIHJlcXVlc3RzXG4gICAgICAgIC8vIEFsc28gZXhjbHVkZSBsb29wY3J5cHRvLnh5elxuICAgICAgICBpZ25vcmVVcmxzOiBbL15odHRwczpcXC9cXC8oLipcXC4pP2FkeWVuXFwuY29tLywgL15odHRwczpcXC9cXC8oLipcXC4pP2xvb3BjcnlwdG9cXC54eXovXVxuICAgICAgfSlcbiAgICBdXG4gIH0pLCB4ciA9IGplLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIGp0KFwiVHJhY2VyIGluaXRpYWxpemVkXCIpLCB4cjtcbn0sIE1sID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5ldyBVUkwoZSkuaG9zdG5hbWU7XG4gIHJldHVybiB0ID09PSBcImNkZS5vcGVucGF5c3RhZ2luZy5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLm9wZW5wYXlzYW5kYm94LmNvbS92MS90cmFjZXNcIiA6IHQgPT09IFwiY2RlLmdldG9wZW5wYXkuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5nZXRvcGVucGF5LmNvbS92MS90cmFjZXNcIiA6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE5L3YxL3RyYWNlc1wiO1xufTtcbmNsYXNzIExsIHtcbiAgY29uc3RydWN0b3IodCwgciwgbiwgYSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChvKSA9PiB7XG4gICAgICBpZiAoIW8uc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKE9yKG8ub3JpZ2luKSAhPT0gT3IodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygby5kYXRhID09IFwib2JqZWN0XCIgJiYgby5kYXRhLnBlbnBhbCB8fCB0eXBlb2Ygby5kYXRhID09IFwib2JqZWN0XCIgJiYgby5kYXRhLnNvdXJjZSAmJiBvLmRhdGEuc291cmNlID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgcyA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBzID0gTXMoSlNPTi5wYXJzZShvLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChzKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IHMsIGQgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUsIHtcbiAgICAgICAgICAgIG9iZnVzY2F0ZWRWYWx1ZTogdS5vYmZ1c2NhdGVkVmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UobCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBvLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcih1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAobykgPT4gby5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFvLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgby5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgbyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhvLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBvKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChvLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gdCwgdGhpcy5iYXNlVXJsID0gciwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGE7XG4gIH1cbn1cbmNvbnN0IE9yID0gKGUpID0+IG5ldyBVUkwoZSkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gRGwoZSwgdCkge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHRcbiAgfSkucHJvbWlzZSwgYSA9IGF3YWl0IGJzKG4pO1xuICBpZiAoIUVzKG4sIGEpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyB4bCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24odCwgcikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHQsIHIpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgdCA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBPbCA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IGU7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoYSkgPT4ge1xuICAgIGlmIChhLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgbyA9IGEubG9hZGVkVmFsdWUsIHMgPSBvLmlzQXZhaWxhYmxlICYmIG8uYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gby5pc0F2YWlsYWJsZSAmJiBvLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGwgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IHMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgcyAmJiBVcihcImFwcGxlX3BheVwiLCBvLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGMgJiYgVXIoXCJnb29nbGVfcGF5XCIsIG8sIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHIuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKGwpO1xuICAgIH1cbiAgfSk7XG59LCBVciA9IChlLCB0LCByLCBuLCBhKSA9PiBULnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IHIsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoci5jaGVja291dFBheW1lbnRNZXRob2RzLCBlKSxcbiAgbm9uQ2RlRm9ybUlucHV0czogaihyLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IGUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiB0XG59KSwganIgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBwZSwgZXJyX186IHRlIH0gPSBJKFwib3AtZm9ybVwiKSwgeWUgPSBjbGFzcyB5ZSB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICB2YXIgYTtcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gITEsIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IGV0KCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBldCgpLCB0aGlzLmNvbnRleHQgPSBuZXcgZXQoKSwgdGhpcy5pbml0Rmxvd3MgPSBFbCgpLCB0aGlzLmlzU3VibWl0dGluZyA9ICExLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvID0gamUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgcyA9IG8uc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogc3QuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgLy8gJ2Vudmlyb25tZW50JzogLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsnOiBmcmFtZXdvcmssXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yay52ZXJzaW9uJzogdmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geGUud2l0aChqZS5zZXRTcGFuKHhlLmFjdGl2ZSgpLCBzKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoX2UuQ0RFX0JSSURHRSk7XG4gICAgICAgICAgYy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgYy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihjLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pLCBjLm1vdW50KFwiYm9keVwiKSwgcGUoXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKSwgcGUoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgcGUoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgbCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGpyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGUoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIHMgPT0gbnVsbCB8fCBzLmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIiksIHBlKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IHUgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnN0YXJ0U3BhbihcImNkZS5jb25uZWN0XCIsIHZvaWQgMCwgeGUuYWN0aXZlKCkpLCBkID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGpyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdSA9PSBudWxsIHx8IHUuZW5kKCksIHMgPT0gbnVsbCB8fCBzLmFkZEV2ZW50KFwiY2RlX2Nvbm5lY3RlZFwiKSwgcGUoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IHZzKGQsIHRoaXMuZGV2aWNlVG9rZW4pLCBwZShcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBmID0geWUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChmKSwgT2wodGhpcy5pbml0Rmxvd3MsIGYsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHBlKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBibCh0aGlzLmluaXRGbG93cywgZiwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQobC50b3RhbEFtb3VudEF0b21zLCBsLmN1cnJlbmN5KSwgcGUoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgcyA9PSBudWxsIHx8IHMuc2V0U3RhdHVzKHsgY29kZTogRWUuT0sgfSksIGcoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIGNvbnN0IGwgPSBlZShjKTtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogRWUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIHRlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBsKSwgZyhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogbFxuICAgICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGwpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAobykgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBvLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICFzIHx8IHMudHlwZSA9PT0gX2UuQ0RFX0JSSURHRSB8fCAocy5ub2RlLnN0eWxlLmhlaWdodCA9IG8pO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChvKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQuc2V0KG8pLCBnKFwiY2RlX2xvYWRlZFwiKSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChvKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKG8pLCBvKSwgZyhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IG9cbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAobywgcyA9IHt9KSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKSwgIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYyA9IHVvLnBhcnNlKG8pLCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgdSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhzKTtcbiAgICAgIGwubmFtZSA9IGAke2N9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgZCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtsLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGQuc2VhcmNoID0gdS50b1N0cmluZygpLCBsLnNyYyA9IGQuaHJlZiwgbC5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgbC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGMsIGwpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAobywgcykgPT4ge1xuICAgICAgY29uc3QgYyA9IHtcbiAgICAgICAgdHlwZTogbyxcbiAgICAgICAgbm9kZTogcyxcbiAgICAgICAgbW91bnQ6IChsKSA9PiB7XG4gICAgICAgICAgdmFyIHU7XG4gICAgICAgICAgKHUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwpKSA9PSBudWxsIHx8IHUuYXBwZW5kQ2hpbGQocyksIGcoXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiBvXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYy50eXBlLCBub2RlOiBjLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW19lLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtfZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW19lLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbX2UuQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFtfZS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbb10gPSBjLCBjO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvKSA9PiB7XG4gICAgICBjb25zdCBzID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIHMuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgcy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBvLnN0eWxlcyAmJiBzLmFwcGVuZChcInN0eWxlc1wiLCBUbChvLnN0eWxlcykpLCBzLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBzO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChvKSA9PiBtdChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgRGwoby5ub2RlKTtcbiAgICAgICAgcy50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oby50eXBlLCBzKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBvLnR5cGUgPT09IF9lLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChzKTtcbiAgICAgIH1cbiAgICApLmNhdGNoKChzKSA9PiB0ZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgcykpLCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKG8pID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICB0ZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBtdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogbyA9PSBudWxsID8gdm9pZCAwIDogby5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4ubyB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBULmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiBtdChcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpO1xuICAgICAgICBjb25zdCBvID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICBpZiAoIW8pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NvcnM6IHMsIGlzQXZhaWxhYmxlOiBjIH0gPSBMcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCB7IHByb2Nlc3NvcnM6IGwsIGlzQXZhaWxhYmxlOiB1IH0gPSBEcihcbiAgICAgICAgICB0aGlzLmluaXRGbG93c1xuICAgICAgICApLCBkID0gdGhpcy5pbml0Rmxvd3MucGF5cGFsLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSwgZiA9IChkID09IG51bGwgPyB2b2lkIDAgOiBkLmlzQXZhaWxhYmxlKSA/PyAhMSwgXyA9IG8uY2hlY2tvdXRQYXltZW50TWV0aG9kcy5zb21lKFxuICAgICAgICAgICh3KSA9PiB3LnByb2Nlc3Nvcl9uYW1lID09PSBcInBvY2t5dFwiICYmIHcucHJvdmlkZXIgPT09IFwicGF5cGFsXCJcbiAgICAgICAgKSwgbSA9IHRoaXMuaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCB5ID0gKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uaXNBdmFpbGFibGUpID8/ICExLCBoID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBzLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogbCxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGYgPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBmXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IF8gPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiB5ID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHlcbiAgICAgICAgICB9XG4gICAgICAgIF0sIGIgPSB7XG4gICAgICAgICAgcGF5cGFsOiBSLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFIuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBSLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogUi5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFIuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFIuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogUi5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW3csIEVdKSA9PiB7XG4gICAgICAgICAgY29uc3QgQyA9IEUucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBiW3ddID8/IHcsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiAoQyA9PSBudWxsID8gdm9pZCAwIDogQy5pc0F2YWlsYWJsZSkgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uaF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG8sIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICB0ZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCBtdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IG8sIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAobykge1xuICAgICAgICAgICAgICBjYXNlIFIucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBULnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIEFlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBMcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBEcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgdGUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHRlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICB0ZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhFRlQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQuYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQuYWlyd2FsbGV4QkFDUy5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgQWUuQkFDUyxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBBZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAga3Qobyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdmFyIG87XG4gICAgICBwZShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gITA7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIHMgJiYgcy5ub2RlLnJlbW92ZSgpO1xuICAgICAgKG8gPSAkKCkpID09IG51bGwgfHwgby5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdmkoKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG8pID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3Mobyk7XG4gICAgfSwgeWUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC41LjdcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBCdC5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgeGwoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IFRuKCksIHdpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IGtsKCk7XG4gICAgcG4odGhpcy5iYXNlVXJsKS50aGVuKChvKSA9PiB7XG4gICAgICBpZiAoIXF0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogbyxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIHF0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pLCB0LmFsbG93VHJhY2luZyA9PT0gITAgJiYgTmwodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBMbCh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgKGEgPSAkKCkpID09IG51bGwgfHwgYS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZSh0ID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCByID0geWUuZ2V0SW5zdGFuY2UoKSwgbiA9IHtcbiAgICAgIGNhbGxlcjogdCxcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZm9ybUlkKSB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIGEgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKHRlKGEpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCAhMSkgOiAhciB8fCByLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAodGUoYSksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksICExKSA6ICEwO1xuICB9XG59O1xueWUub2pzRmxvd3MgPSBULCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmICh5ZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHllLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gQ24pLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgJHIgPSB5ZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmICgkci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgJHIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSAkci5nZXRJbnN0YW5jZSgpID8/IG5ldyAkcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyAkaSBhcyAkLCBDYXJkQ3ZjRWxlbWVudCBhcyBDLCBFZSBhcyBFLCBGaWVsZE5hbWUgYXMgRiwgS3QgYXMgSywgUHIgYXMgUCwgUXQgYXMgUSwgU3VibWl0TWV0aG9kcyBhcyBTLCBWaSBhcyBWLCBXaSBhcyBXLCBYLCBadCBhcyBaLCBFdCBhcyBhLCBpdCBhcyBiLCBDYXJkRWxlbWVudCBhcyBjLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBkLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBlLCBmbiBhcyBmLCBnbiBhcyBnLCBFbGVtZW50c0Zvcm0gYXMgaCwgaXMgYXMgaSwgamUgYXMgaiwgRW52aXJvbm1lbnQgYXMgaywgUGF5SW5GYWlsZWQgYXMgbCwgUGF5SW5TdGF0ZSBhcyBtLCBycyBhcyByLCBzdCBhcyBzLCB0cyBhcyB0LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHYsIHhlIGFzIHgsIHluIGFzIHksIHp0IGFzIHogfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JM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QUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsWUFBWU07QUFBQSxJQUNaLFdBQUFJO0FBQUEsSUFDQSxNQUFNRjtBQUFBLEVBQ1I7QUFDQSxTQUF1QixnQkFBQS9rQixHQUFJeWxCLElBQVUsRUFBRSxVQUFVcEIsSUFBdUMsZ0JBQUFya0IsR0FBSXpCLEdBQWdCLFVBQVUsRUFBRSxPQUFPOGxCLEdBQXNCLFVBQTBCLGdCQUFBcmtCLEdBQUksT0FBTyxFQUFFLElBQUlpa0IsSUFBYSxXQUFXcmxCLEVBQU0sV0FBVyxVQUFVQSxFQUFNLFNBQVM4bUIsQ0FBYSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQW9CLGdCQUFBMWxCLEdBQUl5bEIsSUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlULEdBQ01ELEtBQTBCLENBQUNyQixPQUN4QjtBQUFBLEVBQ0wsUUFBUUEsRUFBTztBQUFBLEVBQ2YsWUFBWUEsRUFBTyxlQUFlO0FBQUEsRUFDbEMsVUFBVUEsRUFBTztBQUFBLEVBQ2pCLHFCQUFxQkEsRUFBTztBQUFBLEVBQzVCLGdCQUFnQkEsRUFBTztBQUFBLEVBQ3ZCLFNBQVNBLEVBQU87QUFDbEI7IiwKICAibmFtZXMiOiBbImNvbm5lY3RUb0NoaWxkIiwgInokMSIsICJjaGFsayIsICJ2NCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZUVmZmVjdCIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImZuIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyQxIiwgIl9leHRlbmRTdGF0aWNzIiwgImQiLCAiYiIsICJwIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkFXWEJhbmsiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgIkVGVEZvcm1EYXRhIiwgIkJBQ1NGb3JtRGF0YSIsICJTRVBBRm9ybURhdGEiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ29tcGxldGVBZGRyZXNzIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAieiQxIiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fJDEiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAicmVzdWx0IiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQVdYX0xPQURJTkciLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudCIsICJFbnZpcm9ubWVudDIiLCAiUGF5SW5GYWlsZWQiLCAiUGF5SW5GYWlsZWQyIiwgIlBheUluU3RhdGUiLCAiUGF5SW5TdGF0ZTIiLCAiTE9PUF9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIk1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSIsICJnZXRBcHBsZVBheVByb2Nlc3NvcnMiLCAiaW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdEZsb3dzIiwgImFwcGxlUGF5SW5pdFJlc3VsdHMiLCAiZmxvdyIsICJmbG93VmFsdWUiLCAic3RyaXBlUFJGbG93UmVzdWx0IiwgImN1c3RvbVBhcmFtcyIsICJzdGFydEFwcGxlUGF5RmxvdyIsICJnZXRHb29nbGVQYXlQcm9jZXNzb3JzIiwgImdvb2dsZVBheUluaXRGbG93cyIsICJnb29nbGVQYXlJbml0UmVzdWx0cyIsICJzdGFydEdvb2dsZVBheUZsb3ciLCAiaW5pdFJlc3VsdHMiLCAiYXZhaWxhYmxlRmxvdyIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAidXNlU3RhdGUiLCAiaWZyYW1lUmVmIiwgInVzZVJlZiIsICJlbGVtZW50U3R5bGUiLCAidXNlTWVtbyIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJ1c2VFZmZlY3QiLCAianN4IiwgInVybCIsICJDYXJkRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiLCAiaW8iLCAic28iLCAiY28iLCAiciIsICJuIiwgImEiLCAibyIsICJzIiwgImxvIiwgImsiLCAiUyIsICJxciIsICJ6ciIsICJIciIsICJCciIsICJfZSIsICJ1byIsICJTdCIsICJwbyIsICJzZSIsICJfbyIsICJtbyIsICJmbyIsICJ5byIsICJobyIsICJnbyIsICJ3byIsICJ2byIsICJibyIsICJFbyIsICJQbyIsICJTbyIsICJPZSIsICJDbyIsICJrbyIsICJBbyIsICJJbyIsICJUbyIsICJSbyIsICJObyIsICJudCIsICJGbyIsICJNbyIsICJMbyIsICJGIiwgIkRvIiwgInhvIiwgIk9vIiwgIllyIiwgIlVvIiwgImpvIiwgIiRvIiwgIkdvIiwgIlZvIiwgIlAiLCAicW8iLCAiSnIiLCAiV3IiLCAiem8iLCAiSG8iLCAiVmUiLCAiQm8iLCAiWW8iLCAiWnIiLCAiSm8iLCAiV28iLCAiWm8iLCAiZHIiLCAiS3IiLCAicHIiLCAiUXIiLCAiS28iLCAiUW8iLCAiZ3QiLCAiWHIiLCAiWG8iLCAiZWEiLCAidGEiLCAiZW4iLCAicmEiLCAidG4iLCAibmEiLCAib2EiLCAiYWEiLCAiaWEiLCAic2EiLCAiY2EiLCAibGEiLCAidWEiLCAiZGEiLCAicGEiLCAiJHQiLCAibWEiLCAiZmEiLCAiZWUiLCAieWEiLCAiaGEiLCAicm4iLCAiZ2EiLCAid2EiLCAiSCIsICJnIiwgImdpIiwgIlNuIiwgIndlIiwgIkkiLCAiY2hhbGsiLCAiR3QiLCAiUGUiLCAidmEiLCAibm4iLCAiVWUiLCAid3QiLCAidnQiLCAiRGUiLCAiYmEiLCAieSIsICJoIiwgImIiLCAidiIsICJfIiwgIkVhIiwgIlYiLCAiQ3QiLCAiRnQiLCAiYnQiLCAibHQiLCAiX3IiLCAib24iLCAiYW4iLCAic24iLCAiY24iLCAibG4iLCAibXIiLCAiZnQiLCAiWXQiLCAia2EiLCAiVnQiLCAiUGEiLCAiTXQiLCAiU2EiLCAicHQiLCAiQ2EiLCAiSnQiLCAiQWEiLCAiSWEiLCAiZ2UiLCAiUmEiLCAiZnIiLCAiVGEiLCAiTmEiLCAiRmEiLCAiTWEiLCAiTGEiLCAiRGEiLCAidW4iLCAieXIiLCAieGEiLCAiT2EiLCAiaHIiLCAiVWEiLCAiZ3IiLCAiamEiLCAiJGEiLCAiR2EiLCAiVmEiLCAicWEiLCAiemEiLCAiSGEiLCAiQmEiLCAiWWEiLCAiSmEiLCAiV2EiLCAiWmEiLCAiS2EiLCAiUWEiLCAiWGEiLCAiZWkiLCAiZG4iLCAidGkiLCAicmkiLCAibmkiLCAib2kiLCAiYWkiLCAiaWkiLCAic2kiLCAiY2kiLCAibGkiLCAidWkiLCAiZGkiLCAidyIsICJldCIsICJrdCIsICJ3ciIsICJwaSIsICJMdCIsICJwbiIsICJBdCIsICIkIiwgInF0IiwgInZyIiwgIm1pIiwgImZpIiwgInlpIiwgIl90IiwgImhpIiwgImMiLCAiV3QiLCAiX24iLCAibW4iLCAidCIsICJ3aSIsICJ2aSIsICJHciIsICJiaSIsICJFaSIsICJQaSIsICJJdCIsICJiciIsICJUdCIsICJTaSIsICJDaSIsICJraSIsICJBaSIsICJJaSIsICJUaSIsICJUZSIsICJFciIsICJSaSIsICJsIiwgInUiLCAiZCIsICJOaSIsICJGaSIsICJvdCIsICJhdCIsICJadCIsICJpdCIsICJLdCIsICJNaSIsICJMaSIsICJEaSIsICJZZSIsICJYIiwgInhpIiwgIk9pIiwgIlVpIiwgImppIiwgIkV0IiwgIiRpIiwgIkdpIiwgIlZpIiwgInFpIiwgInppIiwgIkhpIiwgIkJpIiwgIllpIiwgIkR0IiwgIkppIiwgIlF0IiwgInp0IiwgInluIiwgIldpIiwgInR0IiwgIlh0IiwgImVyIiwgIlppIiwgInRyIiwgIktpIiwgIlFpIiwgImhuIiwgIlhpIiwgImVzIiwgInRzIiwgInJzIiwgImduIiwgIm5zIiwgInh0IiwgInduIiwgIm9zIiwgImFzIiwgImlzIiwgInNzIiwgImNzIiwgIlByIiwgInN0IiwgIkVlIiwgInhlIiwgIk90IiwgImxzIiwgImplIiwgInVzIiwgIm10IiwgInZuIiwgIkIiLCAicHMiLCAiZHMiLCAiX3MiLCAiTSIsICJuZSIsICJibiIsICJtcyIsICJMIiwgImZzIiwgInlzIiwgImhzIiwgInZlIiwgIkVuIiwgIlNyIiwgImdzIiwgInJyIiwgIlBuIiwgIndzIiwgImNvbm5lY3RUb0NoaWxkIiwgIlJ0IiwgInZzIiwgImJzIiwgIkVzIiwgIkNuIiwgImtuIiwgInJ0IiwgIlBzIiwgIkFuIiwgIkNyIiwgIlJlIiwgIlplIiwgIlNzIiwgIkNzIiwgImtzIiwgIlRzIiwgIkFzIiwgIklzIiwgIlJzIiwgIkluIiwgIlRuIiwgIk5zIiwgIkZzIiwgImoiLCAiTXMiLCAiTHMiLCAiWiIsICJLIiwgIk50IiwgIkRzIiwgInhzIiwgIlJuIiwgIk5uIiwgIk9zIiwgIlVzIiwgImJlIiwgIkZuIiwgImpzIiwgIk1uIiwgImNlIiwgIiRzIiwgIkdzIiwgIlZzIiwgInFzIiwgInpzIiwgIkhzIiwgInEiLCAiTG4iLCAiVmwiLCAiRG4iLCAidXQiLCAieiIsICJuciIsICJsZSIsICJVIiwgInhuIiwgInFlIiwgImYiLCAib3IiLCAiVXQiLCAiYXIiLCAiemUiLCAiSGUiLCAiaXIiLCAiSmUiLCAiQnMiLCAiWXMiLCAiRSIsICJtIiwgIkMiLCAia3IiLCAiSnMiLCAiV3MiLCAiV2UiLCAiWnMiLCAiS3MiLCAiUXMiLCAic3IiLCAiWHMiLCAiZWMiLCAiT24iLCAidGMiLCAiVW4iLCAiam4iLCAiJG4iLCAiY3IiLCAibHIiLCAicmMiLCAibmMiLCAidXIiLCAib2MiLCAiYWMiLCAiJGUiLCAiY3QiLCAiaWMiLCAiR24iLCAic2MiLCAiY2MiLCAiQXIiLCAibGMiLCAidWMiLCAiZGMiLCAiVm4iLCAicW4iLCAiem4iLCAiSG4iLCAicGMiLCAibWMiLCAiYW8iLCAiS2UiLCAiQm4iLCAiZmMiLCAiVCIsICJ5YyIsICJpZSIsICJNZSIsICJoYyIsICJnYyIsICJPIiwgIkEiLCAiRCIsICJRIiwgInVlIiwgIkNlIiwgIlkiLCAiaGUiLCAiRmUiLCAiQmUiLCAiSXIiLCAid2MiLCAidmMiLCAieXQiLCAiYmMiLCAiRWMiLCAiUGMiLCAiUWUiLCAiWW4iLCAiU2MiLCAiQ2MiLCAicmUiLCAiTGUiLCAia2MiLCAiQWMiLCAiU2UiLCAiSm4iLCAiV24iLCAiSWMiLCAiVGMiLCAiaHQiLCAiWm4iLCAiUmMiLCAiTmMiLCAiSWUiLCAiWGUiLCAiRmMiLCAiTWMiLCAiTGMiLCAiS24iLCAiRGMiLCAieGMiLCAiUW4iLCAiSHQiLCAiT2MiLCAiVWMiLCAiVHIiLCAiamMiLCAiWG4iLCAiJGMiLCAiR2MiLCAiTmUiLCAiUHQiLCAiVmMiLCAiZW8iLCAicWMiLCAiQmMiLCAiemMiLCAiSGMiLCAicm8iLCAidG8iLCAiTiIsICJSciIsICJZYyIsICJKYyIsICJXYyIsICJaYyIsICJKIiwgIktjIiwgIlFjIiwgIlhjIiwgImtlIiwgImVsIiwgIm5vIiwgInRsIiwgInJsIiwgImRlIiwgIk5yIiwgIm9vIiwgIm5sIiwgIm9sIiwgIkZyIiwgIkciLCAiYWwiLCAiaWwiLCAic2wiLCAiY2wiLCAiZGwiLCAibGwiLCAidWwiLCAiVyIsICJwbCIsICJfbCIsICJtbCIsICJtZSIsICJmbCIsICJobCIsICJ5bCIsICJnbCIsICJ3bCIsICJ2bCIsICJvZSIsICJibCIsICJFbCIsICJQbCIsICJhZSIsICJNciIsICJmZSIsICJCdCIsICJTbCIsICJDbCIsICJrbCIsICJSIiwgIkFlIiwgIkxyIiwgIkFsIiwgIkRyIiwgIklsIiwgIlRsIiwgImp0IiwgIlJsIiwgIk5sIiwgIkZsIiwgInhyIiwgIk1sIiwgIkxsIiwgIk9yIiwgIkRsIiwgInhsIiwgIk9sIiwgIlVyIiwgImpyIiwgInBlIiwgInRlIiwgInllIiwgIiRyIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K